繁体   English   中英

运行Python Web服务器

[英]Running Python Web Server

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

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

我该如何运行python网络服务器以像Apache Web Server一样在后台运行python脚本。

谢谢

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

python hello.py &

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

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

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

由于大多数发行版软件包都提供脚本来启动/停止/监视Apache进程,因此Apache在生产服务器上更易于管理。 因此,您所需要做的就是安装/启用mod_wsgi配置服务器以运行您的应用程序。

Gunicorn很容易入手

我将提供一些示例,以使用Gunicorn和Apache来运行有问题的应用程序,但是请注意,这些示例不是针对生产环境的最佳配置。

独角兽

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

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

现在,此过程已从终端分离(--daemon选项)。 上面的命令启动在非特权端口(8000)上监听gunicorn。 如果您想在特权端口(例如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配置的示例配置。

假设我们在Flask应用程序所在的位置拥有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应用程序对象。

然后在Ubuntu上安装并启用mod_wsgi作为示例:

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部署文档提供了有关安装所需模块或使用virtualenv来运行该应用程序的更多详细信息。

有关更多详细信息,请参见mod_wsgi文档。

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

[编辑]我误解了问题。 我以为您想要生产就绪的服务器,但是如果您仍处于测试阶段,我通常会使用screen (这是一个教程 )。 无论如何,学习屏幕真的很好,因为它将在许多与服务器相关的任务中派上用场。 [/编辑]

我只是使用本教程使用nginx和uwsgi为flask设置了一个生产服务器。 假设您使用的是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地址并查看是否看到nginx欢迎屏幕,来检查nginx是否正在运行。

然后安装uwsgi:

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

删除默认的nginx配置:

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

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

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配置中指向的.sock文件( /var/www/yourwebsite/yourwebsite_uwsgi.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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM