运行Python Web服务器

Mob*_*bar 1 python flask web

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

python hello.py
 * Running on http://localhost:5000/
Run Code Online (Sandbox Code Playgroud)

如何运行python Web服务器在后台运行python脚本,就像Apache Web Server一样.

谢谢

far*_*zad 5

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

python hello.py &
Run Code Online (Sandbox Code Playgroud)

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

python hello.py > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

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

Apache在生产服务器上更容易管理,因为大多数发行版软件包都提供了启动/停止/监视Apache进程的脚本.因此,您需要做的就是安装/启用mod_wsgi并配置服务器以运行您的应用程序.

Gunicorn很容易入手.

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

Gunicorn

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

sudo pip install gunicorn
gunicorn --daemon --workers 4 --bind 0.0.0.0:8000 hello:app
Run Code Online (Sandbox Code Playgroud)

现在,此进程已从终端分离(--damon选项).上面的命令启动gunicorn监听非特权端口(8000).如果要侦听特权端口(如80),可以删除工作进程的权限:

sudo gunicorn --daemon --workers 4 --bind 0.0.0.0:80 --user www-data --group www-data hello:app 
Run Code Online (Sandbox Code Playgroud)

但是,如果您需要对流程进行更多控制,则可以使用Supervisord或Perp等流程管理工具.

Apache mod_wsgi

如果您使用Apache更方便,安装并启用mod_wsgi,则添加VirtualHost以指向您的应用程序.

以下是应用程序的示例配置和运行它的Apache配置.

假设我们拥有hello.pyFlask应用程序,请将其保存到适当的位置(并提供适当的权限).这里我们使用/ var/www/myapp,但这只是为了简单起见.

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

application = Flask(__name__)

@application.route("/")
def index():
    return "Hello!"
Run Code Online (Sandbox Code Playgroud)

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

然后安装并启用mod_wsgi,作为Ubuntu的一个例子:

sudo apt-get install apache2 libapache2-mod-wsgi
sudo a2enmod wsgi
Run Code Online (Sandbox Code Playgroud)

现在添加一个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>
Run Code Online (Sandbox Code Playgroud)

现在启用主机:

sudo a2ensite 101-myapp
sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)

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

Flask部署文档提供了有关安装所需模块或使用virtualenv运行应用程序的更多详细信息.

有关更多详细信息,请参阅mod_wsgi文档.

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