在后台启动Flask服务器

2024-06-26 03:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

loading config from /home/uruddarraju/virtualenvs/PHANTOMNEW/Phantom/etc/phantom/phantom.ini
* Running on http://0.0.0.0:8080/

但它永远不会返回,如果我执行CTRL-C,服务器就会停止。我正试图将此部署到生产环境中,并希望在后台运行此启动,只要服务器启动,进程就会一直运行。

最好的方法是什么?


Tags: runfrompyimport服务器apiapp应用程序
3条回答

在生产中,我最喜欢的方法是将烧瓶与uwsgi和nginx结合以保持持久性。下面是一些很好的安装说明,可以帮助您开始:http://www.markjberger.com/flask-with-virtualenv-uwsgi-nginx/

Jist:

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

sudo apt-get update
sudo apt-get upgrade

现在安装python和virtualenv:

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

为网站创建文件夹:

sudo mkdir -p /var/www/mysite
sudo chown -R <your user id> /var/www/mysite
cd /var/www/mysite

安装virtualenv并安装烧瓶:

virtualenv .env --no-site-packages
source .env/bin/activate
pip install flask

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

现在是用flask development server测试应用程序的好时机,看看到目前为止是否一切正常。如果一切顺利,请安装nginx和uwsgi:

deactivate
sudo apt-get install nginx uwsgi uwsgi-plugin-python

接下来,我们必须创建一个套接字文件,供nginx与uwsgi通信:

cd /tmp/
touch mysite.sock
sudo chown www-data mysite.sock

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

cd /etc/nginx/sites-available
sudo rm default

创建一个新的配置文件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;
     }
}

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

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite

这个过程与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

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')

您的mysite.ini文件将是:

module = mysite
callable = my_app

将配置文件链接到“已启用的应用”文件夹:

sudo ln -s /etc/uwsgi/apps-available/mysite.ini /etc/uwsgi/apps-enabled/mysite.ini

最后,重新启动nginx和uwsgi:

sudo service nginx restart
sudo service uwsgi restart
$ python phantom.py &

可能是让它在后台运行的最简单的方法。也就是说,如果你像@LukasGraf提到的那样将flask应用投入生产(我也相信他们的文档),那么你不应该使用app.run()服务器为你的flask应用提供服务

试试Supervisord。它以指定用户的身份启动命令,并在命令终止后重新启动它们。对于您想要做的事情,配置非常简单。

相关问题 更多 >