在后台启动烧瓶服务器

Uda*_*day 20 python celery flask python-2.7

我有一个烧瓶应用程序,我目前正以下列方式启动:

#phantom.py
__author__ = 'uruddarraju'
from phantom.api.v1 import app
app.run(host='0.0.0.0', port=8080, debug=True)
Run Code Online (Sandbox Code Playgroud)

当我运行这个脚本时,它通过打印成功执行:

loading config from /home/uruddarraju/virtualenvs/PHANTOMNEW/Phantom/etc/phantom/phantom.ini
* Running on http://0.0.0.0:8080/
Run Code Online (Sandbox Code Playgroud)

但它永远不会返回,如果我执行CTRL-C,服务器就会停止.我正在尝试将其部署到生产环境,并希望在后台运行此启动,只要服务器启动,该进程就会保持运行状态.

做这个的最好方式是什么?

Jor*_*ley 17

$ python phantom.py &
Run Code Online (Sandbox Code Playgroud)

可能是让它在后台运行的最简单方法.那说你不应该使用app.run()服务器为你的烧瓶应用程序服务,如果你正在将它移植到生产中,因为@LukasGraf提到(以及我相信他们的文档)


Rap*_*hDG 15

我最喜欢的生产方式是将烧瓶与uwsgi和nginx结合起来以保持持久性.以下是一些很好的设置说明,可帮助您入门:http://www.markjberger.com/flask-with-virtualenv-uwsgi-nginx/

JIST:

首先确保您的vps具有最新更新:

sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

现在安装python和virtualenv:

sudo apt-get install build-essential python-dev python-pip
sudo pip install virtualenv
Run Code Online (Sandbox Code Playgroud)

为您的网站创建一个文件夹:

sudo mkdir -p /var/www/mysite
sudo chown -R <your user id> /var/www/mysite
cd /var/www/mysite
Run Code Online (Sandbox Code Playgroud)

设置virtualenv并安装flask:

virtualenv .env --no-site-packages
source .env/bin/activate
pip install flask
Run Code Online (Sandbox Code Playgroud)

将烧瓶应用程序放在此文件夹中.确保您的主机设置为0.0.0.0并且您的应用程序位于if下__name__ == '__main__':.如果你的应用程序在一个函数中,uwsgi将无法调用它.

现在是使用烧瓶开发服务器测试您的应用程序的好时机,看看到目前为止一切是否正常.如果一切顺利,请安装nginx和uwsgi:

deactivate
sudo apt-get install nginx uwsgi uwsgi-plugin-python
Run Code Online (Sandbox Code Playgroud)

接下来,我们必须为nginx创建一个套接字文件,以便与uwsgi进行通信:

cd /tmp/
touch mysite.sock
sudo chown www-data mysite.sock
Run Code Online (Sandbox Code Playgroud)

通过将mysite.sock的所有者更改为www-data,nginx将能够写入套接字.现在我们要做的就是为nginx和uwsgi添加配置文件.首先删除nginx的默认配置:

cd /etc/nginx/sites-available
sudo rm default
Run Code Online (Sandbox Code Playgroud)

创建一个新的配置文件mysite并添加以下内容:

server {
    listen 80;
    server_tokens off;
    server_name www.mysite.com mysite.com;

     location / {
         include uwsgi_params;
         uwsgi_pass unix:/tmp/mysite.sock;
     }

     location /static {
         alias /var/www/mysite/static;
     }

     ## Only requests to our Host are allowed
     if ($host !~ ^(mysite.com|www.mysite.com)$ ) {
        return 444;
     }
}
Run Code Online (Sandbox Code Playgroud)

为了启用站点,我们必须将配置文件链接到/ etc/nginx/sites-enabled /:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite
Run Code Online (Sandbox Code Playgroud)

uwsgi的过程类似.创建文件/etc/uwsgi/apps-available/mysite.ini并添加以下内容:

[uwsgi]
vhost = true
socket = /tmp/mysite.sock
venv = /var/www/mysite/.env
chdir = /var/www/mysite
module = app
callable = app
Run Code Online (Sandbox Code Playgroud)

Module是python脚本的名称,callable是flask实例的名称.因此,如果您的烧瓶站点位于名为mysite.py的文件中,如下所示:

from flask import Flask
my_app = Flask(__name__)

@my_app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    my_app.run(host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

你的mysite.ini文件将是:

module = mysite
callable = my_app
Run Code Online (Sandbox Code Playgroud)

将配置文件链接到enabled-apps文件夹:

sudo ln -s /etc/uwsgi/apps-available/mysite.ini /etc/uwsgi/apps-enabled/mysite.ini
Run Code Online (Sandbox Code Playgroud)

最后,重启nginx和uwsgi:

sudo service nginx restart
sudo service uwsgi restart
Run Code Online (Sandbox Code Playgroud)

  • 如何直接使用gunicorn?像gunicorn -w 2 -b 0.0.0.0:8080 run:app - daemon (3认同)