flask=============================================================================
#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を実行するとサーバーが停止します。これを実稼働環境にデプロイしようとしており、このスタートアップをバックグラウンドで実行したいと考えています。サーバーが稼働している限り、プロセスは稼働したままです。
これを行う最良の方法は何ですか?
本番環境で私のお気に入りの方法は、flaskと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
Webサイト用のフォルダーを作成します。
Sudo mkdir -p /var/www/mysite
Sudo chown -R <your user id> /var/www/mysite
cd /var/www/mysite
Virtualenvをセットアップし、flaskをインストールします。
virtualenv .env --no-site-packages
source .env/bin/activate
pip install flask
flaskアプリをこのフォルダーに配置します。ホストが0.0.0.0に設定され、__name__ == '__main__':
。アプリが関数内にある場合、uwsgiはそれを呼び出すことができません。
ここで、flask開発サーバーでアプリをテストして、すべてがこれまでに機能しているかどうかを確認してください。すべてが正常に実行される場合は、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インスタンスの名前です。したがって、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
構成ファイルをenabled-appsフォルダーにリンクします。
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が言及しているように本番環境に移行する場合は、app.run()サーバーを使用してflaskアプリを使用するべきではありません。
Supervisord を試してください。指定されたユーザーとしてコマンドを開始し、終了後にコマンドを再起動します。設定は、あなたがやりたいことに対して非常に簡単です。
おそらくこれを行うための最良の方法は、@ RaphDGが答えたようにnginxの背後にありますが、個人使用のためにバックグラウンドで実行したい場合は、ログシステムの最後に「&」のみを使用することはできませんコマンドライン、さらにロガーはWerkzeugライブラリの内部ロガーであることがわかりました。
これを回避するには、次の手順を実行します(以下のコード):
通知とロガーを回避し、このプロセスをバックグラウンドで実行できるようにします(「&」を使用)
コード:
import werkzeug._internal
def demi_logger(type, message,*args,**kwargs):
pass
__ main __の最初の行:
werkzeug._internal._log = demi_logger