运行Python Web服务器

时间:2015-10-27 07:23:25

标签: python web flask

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

python hello.py
 * Running on http://localhost:5000/

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

由于

3 个答案:

答案 0 :(得分:5)

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

python hello.py &

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

python hello.py > /dev/null 2>&1 &

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

Apache在生产服务器上更容易管理,因为大多数发行版软件包都提供了启动/停止/监视Apache进程的脚本。因此,您需要安装/启用mod_wsgiconfigure服务器来运行您的应用。

Gunicorn很容易start with

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

Gunicorn

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

sudo pip install gunicorn
gunicorn --daemon --workers 4 --bind 0.0.0.0:8000 hello:app

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

sudo gunicorn --daemon --workers 4 --bind 0.0.0.0:80 --user www-data --group www-data hello:app 

但是,如果您需要对流程有更多控制权,那么SupervisordPerp等流程管理工具可以提供帮助。

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。本地到您的 / etc / hosts ,如果您正在devbox上进行测试。)

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

有关详细信息,请参阅mod_wsgi文档。

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

答案 1 :(得分:2)

[编辑] 我误解了这个问题。我以为你想要一个生产就绪的服务器,但是如果你还处于测试阶段,我通常会使用screen(这里是a tutorial)。在任何情况下,学习屏幕都非常好,因为它会在许多与服务器相关的任务中派上用场。 [/编辑]

我只是使用this tutorial使用nginx和uwsgi设置了生产服务器。假设您使用的是Ubuntu 14.04,它基本上就是:

首先安装nginx:

sudo add-apt-repository ppa:nginx/stable
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install nginx

通过转到浏览器中的ip-address并检查是否看到nginx欢迎屏幕来检查nginx是否正在运行。

然后安装uwsgi:

sudo apt-get install build-essential python python-dev
pip install uwsgi

删除默认的nginx配置:

sudo rm /etc/nginx/sites-enabled/default

为您的网站创建一个名为yourwebsite_nginx.conf的nginx配置文件(调整指向您网站文件夹的路径):

server {
    listen      80;
    server_name localhost;
    charset     utf-8;
    client_max_body_size 75M;
    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/yourwebsite/yourwebsite_uwsgi.sock;
    }
}

符号链接此文件并重新启动nginx:

sudo ln -s /var/www/yourwebsite/yourwebsite_nginx.conf /etc/nginx/conf.d/
sudo service nginx restart

配置uwsgi以创建您在nginx配置(/var/www/yourwebsite/yourwebsite_uwsgi.sock)中指向的.sock文件。在/var/www/yourwebsite/yourwebsite_uwsgi.ini中为此创建一个文件,其中包含:

[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:

uwsgi --ini /var/www/yourwebsite/yourwebsite_uwsgi.ini

简而言之。但是请查看我上面链接的教程,它以更慢,更简单的步骤解释事情。

答案 2 :(得分:1)

您可以使用Apache和mod_wsgi查看Flask documentation以部署您的应用程序。另外还有一个snippet,有人写道,他们提到Flask文档对他们来说并不完美。