运行pythonweb服务器
我正在使用python和Flask框架。您可能知道,当您运行脚本时,它将在前台运行。像这样:运行pythonweb服务器,python,web,flask,Python,Web,Flask,我正在使用python和Flask框架。您可能知道,当您运行脚本时,它将在前台运行。像这样: python hello.py * Running on http://localhost:5000/ 如何像ApacheWeb服务器那样在后台运行python脚本 谢谢您可以看看Flask,它使用Apache和mod_wsgi部署了您的应用程序。还有另外一个问题,有人写道,Flask文档对他们来说并不完美。您可以看看Flask,了解如何使用Apache和mod_wsgi部署应用程序。还有一个附加问
python hello.py
* Running on http://localhost:5000/
如何像ApacheWeb服务器那样在后台运行python脚本
谢谢您可以看看Flask,它使用Apache和mod_wsgi部署了您的应用程序。还有另外一个问题,有人写道,Flask文档对他们来说并不完美。您可以看看Flask,了解如何使用Apache和mod_wsgi部署应用程序。还有一个附加问题,有人写道,Flask文档对他们来说并不完美。如果您只想让web服务器进程与终端分离,以便继续使用终端,那么只需将其发送到后台(与任何其他命令一样): 或者使用更详细的输出重定向:
python hello.py > /dev/null 2>&1 &
但请注意(正如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
现在,此进程已从终端(--daemon选项)分离。
上述命令启动gunicorn在非特权端口(8000)上侦听。如果要在特权端口(如80)上侦听,可以删除工作进程的特权:
sudo gunicorn --daemon --workers 4 --bind 0.0.0.0:80 --user www-data --group www-data hello:app
但是,如果您需要对流程进行更多的控制,像or这样的流程管理工具可能会有所帮助
apachemod_wsgi
如果您使用Apache更方便,请安装并启用mod_wsgi
,然后添加一个VirtualHost指向您的应用程序
下面是一个示例配置,用于运行应用程序和Apache配置
假设我们有hello.py
烧瓶应用程序,那么将其保存到适当的位置(并提供适当的权限)。例如,这里我们使用/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-app对象
然后安装并启用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>
注意:在上面的示例中,我使用myapp.local作为服务器名,因此您需要将其更改为可以通过DNS解析的名称(或者如果您在devbox上测试,则将myapp.local添加到/etc/hosts)
Flask部署提供了有关安装所需模块或使用virtualenv运行应用程序的更多详细信息
有关更多详细信息,请参阅文档
上述两种解决方案都可用于运行其他WSGI应用程序,而不仅仅是使用Flask的应用程序。如果您只想让web服务器进程与您的终端分离,以便您可以继续使用终端,那么只需将其发送到后台(与任何其他命令一样): 或者使用更详细的输出重定向:
python hello.py > /dev/null 2>&1 &
但请注意(正如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
现在,此进程已从终端(--daemon选项)分离。
上述命令启动gunicorn在非特权端口(8000)上侦听。如果要在特权端口(如80)上侦听,可以删除工作进程的特权:
sudo gunicorn --daemon --workers 4 --bind 0.0.0.0:80 --user www-data --group www-data hello:app
但是,如果您需要对流程进行更多的控制,像or这样的流程管理工具可能会有所帮助
apachemod_wsgi
如果您使用Apache更方便,请安装并启用mod_wsgi
,然后添加一个VirtualHost指向您的应用程序
下面是一个示例配置,用于运行应用程序和Apache配置
假设我们有hello.py
烧瓶应用程序,那么将其保存到适当的位置(并提供适当的权限)。例如,这里我们使用/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-app对象
然后安装并启用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>
注意:在上面的示例中,我使用myapp.local作为服务器名,因此您需要将其更改为可以通过DNS解析的名称(或者如果您在devbox上测试,则将myapp.local添加到/etc/hosts)
Flask部署提供了有关安装所需模块或使用virtualenv运行应用程序的更多详细信息
有关更多详细信息,请参阅文档
sudo ln -s /var/www/yourwebsite/yourwebsite_nginx.conf /etc/nginx/conf.d/
sudo service nginx restart
[uwsgi]
#application's base folder
base = /var/www/yourwebsite
#python module to import
app = yourappfile # yourappfile should have the name of the file in which you do the `app = Flask(__name__)`
module = %(app)
home = %(base)/venv # This should point to your virtualenv python install
pythonpath = %(base)
#socket file's location
socket = /var/www/yourwebsite/%n.sock
#permissions for the socket file
chmod-socket = 666
#the variable that holds a flask application inside the module imported at line #6
callable = app # This is normally `app`
uwsgi --ini /var/www/yourwebsite/yourwebsite_uwsgi.ini