Skip to main content
 首页 » 编程设计

python之运行 Python Web 服务器

2025年05月04日47Leo_wl

我正在使用带有 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_wsgi 和 configure运行您的应用程序的服务器。

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 的应用程序。