Flask + Nginx + Gunicornをデプロイしたい。 Nginxをセットアップして実行し、ドキュメントに記載されているようにgunicornを実行します。
gunicorn app:app
しかし、サーバーからログアウトすると、gunicornプロセスが終了しますか? Nginxが接続するために実行を継続し、クラッシュした場合に再起動するための正しい方法は何ですか?
Supervisor のようなものを調べます。
使用する --daemon
オプション、gunicornの実行中。例:
gunicorn grand56.wsgi:application --name grand56 --workers 3 --user=root --group=root --bind=127.0.0.1:1001 --daemon
gunicornのバインディングコマンドに--daemonを使用します。例:
gunicorn --bind 0.0.0.0:8001 your_project.wsgi --daemon
注意すべき重要な点は、コマンドラインからプロセスを開始すると、それはターミナルプロセスの子(つまり、bash
の子)になるということです。サーバーからログアウトすると、bash
プロセスが終了します-そのすべての子も同様です。
あなたはnginxを管理するためにあなたが持っているどんなシステムでも使用したいでしょう、そしてgunicorn(init.d
またはUpstartスクリプトを、Monit、Supervisor、Bluepill、Foremanなどの特殊なアプリケーションプロセスモニターに追加します)
ショーンに注目してください。
ただし、次のようにその場で実行できます。
Nohup gunicorn -c config.py </dev/null >/dev/null 2>&1
そしてそれはもはやターミナル接続に依存しなくなります。出力を保存する場合は、>/dev/null
を>somelogfile
などに置き換えることができます。
ただし、本番環境で使用する場合は、プロセス管理に使用するツールに統合するのが最適です。
これを試して:
Nohup gunicorn app:app &
私はsystemdオプションを試してみましたが、問題なく動作しました。以下のリンクに完全な答えがあり、すべての手順を実行して、アプリをgunicornサービスとして呼び出すことができます。
https://askubuntu.com/questions/930589/running-upstart-script-on-17-04/1010398#1010398
Supervisor
は、プロセス管理のための優れたクロスプラットフォームソリューションです。これは非常に機能が豊富で、(私の意見では)一部のVanilla Linux代替(upstart、sysv、systemd)よりも多くの構成が必要です。プロセスの開始、監視、および(必要に応じて)再起動するには、必ずこのようなものを使用する必要があります。
最終的に使用するプロセスマネージャーに関係なく、gunicornを「不適切に実行」する(つまり、rootユーザーとして)ままにすることは非常に簡単です。他の回答で省略されている重要な詳細のいくつかは、おそらく1人の(非ルート)ユーザーに、そのユーザーとnginxグループが所有し、アクセス許可を持つUNIXソケットにバインドするgunicornプロセスを所有させるべきだと思います_770
_。 gunicorn
では、代わりにマスクを指定するので、_770
_を_007
_に反転し、_-m
_フラグを使用します。この方法では、gunicornとnginxのみがソケットに対して読み取り/書き込み/実行を行うことができ、ポートは必要ありません。 _-u
_および_-g
_フラグを使用して、gunicornプロセスのユーザーとグループを指定できます。これらの所有者でソケットが作成されます。最終的にはプロセスmgmt、nginx/gunicornを使用する場合、起動スクリプトで次のようにする必要があります。
_exec gunicorn wsgi:app -u gunicorn -g nginx -m 007 -b gunicorn.sock >> /var/log/$<service_name>.sys.log 2>&1
_
Gunicornユーザーがログファイルへの書き込み権限を持っていることを確認してください。次に、以前にip/port(つまり_0.0.0.0:5000
_)があったnginxで、ソケットへのパス(つまり_/usr/share/nginx/html/gunicorn.sock
_)を配置します。ここでは_--daemon
_フラグを使用していませんが、exec
を使用していることに注意してください。これは、exec
で子プロセスとしてgunicornを実行するプロセスマネージャーを想定しています。
すべての異なるフラグ here を見つけることができます。
このように hug apiを実行します。
-daemonは、プロセスをバックグラウンドで維持するためのものです。
-access-logfileリクエストログを保持します
-bind = <ip>:<port>IPを与えると、他のシステムからのアクセスが許可されます(プロキシが必要ない場合)。
gunicorn <pyscirpt_name>:__hug_wsgi__ --name caassist -w 4 --access-logfile /var/logs/gunicorn/gunicorn_access.log --daemon --bind=<ip>:<port>