运行pythonweb服务器

运行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和Flask框架。您可能知道,当您运行脚本时,它将在前台运行。像这样:

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