我在Flask框架中使用python.您可能知道,当您运行脚本时,它将在前台运行.像这样:
python hello.py
* Running on http://localhost:5000/
Run Code Online (Sandbox Code Playgroud)
如何运行python Web服务器在后台运行python脚本,就像Apache Web Server一样.
谢谢
如果你想要的只是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和Apache运行相关应用程序,但请注意,这些样本不是生产环境的最佳配置.
假设您有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,则添加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的应用程序.
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |