python - 运行 Python Web 服务器

标签 python web flask

我正在使用带有 Flask 框架的 python。您可能知道,当您运行脚本时,它将在前台运行。像这样:

python hello.py
 * Running on http://localhost:5000/

如何像 Apache Web 服务器那样运行 Python Web 服务器以在后台运行 Python 脚本。

谢谢

最佳答案

如果您只想让 Web 服务器进程与您的终端分离,以便您可以继续使用终端,那么只需将它发送到后台(就像任何其他命令一样):

python hello.py &

或者使用更详细的输出重定向:

python hello.py > /dev/null 2>&1 &

但请注意(正如 Fask 文档中所述)Flask 的默认 Web 服务器不是为生产而编写的,而是用于开发的。建议将其他 WSGI 服务器(如带有 mod_wsgi 的 Apache、Gunicorn 等)用于生产环境。

Apache 在生产服务器上更易于管理,因为大多数发行包都提供脚本来启动/停止/监控 Apache 进程。所以你需要做的就是安装/启用 mod_wsgiconfigure运行您的应用程序的服务器。

Gunicorn很容易start with .

我将包含使用 Gunicorn 和 Apache 运行相关应用程序的示例,但请注意,这些示例并不是生产环境的最佳配置。

unicorn

假设您有 hello.py 文件模块,并且 Flask 对象存储在名为 app 的变量中,您可以通过运行以下命令来运行应用程序:

sudo pip install gunicorn
gunicorn --daemon --workers 4 --bind 0.0.0.0:8000 hello:app

现在这个进程与您的终端分离(--daemon 选项)。 上面的命令启动 gunicorn 监听非特权端口 (8000)。如果你想监听一个特权端口(比如 80),你可以放弃工作进程的特权:

sudo gunicorn --daemon --workers 4 --bind 0.0.0.0:80 --user www-data --group www-data hello:app 

但是,如果您需要对流程进行更多控制,可以使用像 Supervisord 这样的流程管理工具。或 Perp可以提供帮助。

Apache mod_wsgi

如果您使用 Apache 更方便,请安装并启用 mod_wsgi,然后添加一个 VirtualHost 以指向您的应用程序。

这是应用程序的示例配置和运行它的 Apache 配置。

假设我们有 hello.py,我们有 Flask 应用程序,所以将它保存到适当的位置(并提供适当的权限)。例如,这里我们使用 /var/www/myapp 但这只是为了简单。

# file: /var/www/myapp/hello.py
from flask import Flask

application = Flask(__name__)

@application.route("/")
def index():
    return "Hello!"

请注意,Flask 对象存储在 application 变量中,因为 mod_wsgi 在指定模块中查找名为 application 的 WSGI 应用程序对象。

然后安装并启用 mod_wsgi,以 Ubuntu 为例:

sudo apt-get install apache2 libapache2-mod-wsgi
sudo a2enmod wsgi

现在添加一个 VirtualHost 以指向您的 WSGI 应用。

# file: /etc/apache2/sites-available/101-myapp.conf
<Directory /var/www/myapp>
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
        ServerName myapp.local
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/myapp
        WSGIDaemonProcess www-data processes=2 threads=15 display-name=%{GROUP}
        WSGIProcessGroup www-data
        WSGIScriptAlias / /var/www/myapp/hello.py
        ErrorLog ${APACHE_LOG_DIR}/myapp-error.log
        CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined
</VirtualHost>

现在启用主机:

sudo a2ensite 101-myapp
sudo service apache2 reload

请注意,在上面的示例中,我使用 myapp.local 作为 ServerName,因此您需要将其更改为可以使用 DNS 解析的名称(或添加 myapp.local )。本地到你的/etc/hosts,如果你在你的devbox上测试)。

flask 部署 documentation提供有关安装所需模块或使用 virtualenv 运行应用程序的更多详细信息。

参见 mod_wsgi文档以获取更多详细信息。

上述两种解决方案都可用于运行其他 WSGI 应用程序,而不仅仅是使用 Flask 的应用程序。

关于python - 运行 Python Web 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33362035/

相关文章:

python - Flask中的Stripe Checkout流程如何携带userID这样的变量?

Python:舍入误差扭曲了均匀分布

python - 按值比较数据帧

python - 在 Tkinter 中动态初始化文件夹中的框架

html - 网站不适合所有屏幕分辨率

python - jsonschema.exceptions - 未知类型 'str' 用于具有架构 : 的验证器

python - 如何设置 Git 以将 python 应用程序文件部署到 Ubuntu Server 中?

html - 行内 block 不按预期行事

java - 确保休息端点安全的框架/库/模式

python - 我如何在 Python/Flask 中干净地做 slugs?