UbuntuでuWSDIとNginxを使用してFlaskプロジェクトを配備する(回転)
7330 ワード
uWSDIについては、まずこの文章を読むことができます.簡単に言えば、WSDIはPythonプロトコルであり、アプリケーション(私たちが書いたソフトウェア)がNginxなどのWebサーバとどのように通信するかを定義しています.WSDIはインタフェースにすぎません.一方、uWSDIは、複数の言語をサポートするサーバコンテナであり、WSDI定義の標準を使用して複数のWebサーバとの通信を実現し、Webサーバからの要求をアプリケーションが理解できる形式に「翻訳」する.
インストール
Python 2:
Python 3:
Flaskとuwsgiのインストール:
簡単なFlaskプロジェクトを作成します~/myproject/myproject.py:
開始ファイルを~/myproject/run.pyとして作成します.
python run.pyを実行し、アクセスhttp://server_domain_or_IP:5000は次のように表示されます.
もちろんpython run.pyを直接使用する方法はローカル開発に適しており、オンラインでは速度が遅すぎてuwsgiを使用する必要があります.
uwsgi
まずuwsgiがインストールされていることを確認し、実行します. protocol説明httpプロトコル の使用-wは、起動するモジュール を示す. runはプロジェクト起動ファイルrun.py拡張子を削除し、appはrun.pyファイルの変数app、すなわちFalskインスタンスである.
そしてアクセスし、http://server_domain_or_IP:5000、同じように上図が見えます.説明uwsgiは正常に動作します.
ただし、コマンドラインから起動するたびに面倒なので、~/myproject/ディレクトリの下にプロファイルmyproject.iniを作成できます. processes=5は、5つのサブプロセス処理要求を開始することを示す.module=run:appはコマンドラインと同じ意味で使用されます. chdir=/home/ubuntu/myprojectは、run.pyが存在するフォルダである私たちのプロジェクトのルートディレクトリだけを望んでいます. socket=/path/to/sock/myproject.sockはuwsgiが起動した後に作成する必要があるファイルで、このファイルはNginxと通信するために使用され、後でNginxを構成する際に使用されるので、chmod-socket=660は.sockファイルの権限を変更してNginxと通信するためです. logto=/home/to/log/ishuhui.logはuwsgiログディレクトリを示し、uwsgiはリクエスト履歴をファイルに書き込む.
構成が完了したら実行:
/path/to/sock/myproject.sockディレクトリには、Nginxと通信するためにmyproject.sockファイルが追加されています.次に、Nginxを構成します.
Nginxの設定
Nginxの構成は特に簡単で、Nginxプロファイル(sudo vim/etc/nginx/sites-available/default)を見つけて、以下のフォーマットに変更します.
実は重要なのは2行です.
次に意外なことに、80ポートにアクセスすると、プログラムが表示されます.
uwsgiをシステムサービスに設定する
uwsgi–ini myproject.iniを実行した後、ctrl+cを押すかssh接続ウィンドウを閉じると、uwsgiプロセスが閉じます.uwsgiプロセスが閉じると、.sockファイルが消え、WebサイトNginxにアクセスするとエラーが発生します.
この場合、プロセス管理ソフトウェアがuwsgiプロセスの実行を管理する必要があります.Ubuntuが持参したsystemdは最も簡単な方法で、私たちのプロジェクトをシステムサービスに変えることができます.まずmyproject.serviceファイルsudo vim/etc/systemd/system/myproject.serviceを作成します. WorkingDirectory:あなたのプロジェクトディレクトリ. Environment:プロジェクトを示すプロファイル など、必要な環境変数 ExecStart:サービス起動のコード WantedBy=multi-user.target:システムの起動に従ってサービスが開始されることを示します.
上記のすべてのパスが絶対パスであることに注意してください.
次に、快適に起動できます(myprojectはmyproject.serviceファイル名です拡張子を削除します):
参考:https://www.jianshu.com/p/84978157c785 https://juejin.im/entry/58eb912c8d6d810061908b90 https://blog.csdn.net/lihao21/article/details/52304119
インストール
Python 2:
sudo apt-get update
sudo apt-get install python-pip python-dev nginx
Python 3:
sudo apt-get update
sudo apt-get install python3-pip python3-dev nginx
Flaskとuwsgiのインストール:
pip install uwsgi flask
簡単なFlaskプロジェクトを作成します~/myproject/myproject.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello There!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
開始ファイルを~/myproject/run.pyとして作成します.
from myproject import app
if __name__ == "__main__":
app.run()
python run.pyを実行し、アクセスhttp://server_domain_or_IP:5000は次のように表示されます.
もちろんpython run.pyを直接使用する方法はローカル開発に適しており、オンラインでは速度が遅すぎてuwsgiを使用する必要があります.
uwsgi
まずuwsgiがインストールされていることを確認し、実行します.
uwsgi --socket 0.0.0.0:5000 --protocol=http -w run:app
そしてアクセスし、http://server_domain_or_IP:5000、同じように上図が見えます.説明uwsgiは正常に動作します.
ただし、コマンドラインから起動するたびに面倒なので、~/myproject/ディレクトリの下にプロファイルmyproject.iniを作成できます.
[uwsgi]
module = run:app
master = true
processes = 3
chdir = /home/ubuntu/myproject
socket = /path/to/sock/myproject.sock
logto = /home/to/log/ishuhui.log
chmod-socket = 660
vacuum = true
構成が完了したら実行:
uwsgi --ini myproject.ini
/path/to/sock/myproject.sockディレクトリには、Nginxと通信するためにmyproject.sockファイルが追加されています.次に、Nginxを構成します.
Nginxの設定
Nginxの構成は特に簡単で、Nginxプロファイル(sudo vim/etc/nginx/sites-available/default)を見つけて、以下のフォーマットに変更します.
server {
listen 80;
server_name server_domain_or_IP;
location / {
include uwsgi_params;
uwsgi_pass unix:/path/to/sock/myproject.sock;
}
}
実は重要なのは2行です.
include uwsgi_params;
uwsgi_pass unix:/path/to/sock/myproject.sock;
次に意外なことに、80ポートにアクセスすると、プログラムが表示されます.
uwsgiをシステムサービスに設定する
uwsgi–ini myproject.iniを実行した後、ctrl+cを押すかssh接続ウィンドウを閉じると、uwsgiプロセスが閉じます.uwsgiプロセスが閉じると、.sockファイルが消え、WebサイトNginxにアクセスするとエラーが発生します.
この場合、プロセス管理ソフトウェアがuwsgiプロセスの実行を管理する必要があります.Ubuntuが持参したsystemdは最も簡単な方法で、私たちのプロジェクトをシステムサービスに変えることができます.まずmyproject.serviceファイルsudo vim/etc/systemd/system/myproject.serviceを作成します.
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
[Service]
User=lufficc
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
Environment=FLASKR_SETTINGS=/home/ubuntu/myproject/env.cfg
ExecStart=/usr/local/bin/uwsgi --ini /home/ubuntu/myprojectenv/ishuhui.ini
[Install]
WantedBy=multi-user.target
上記のすべてのパスが絶対パスであることに注意してください.
次に、快適に起動できます(myprojectはmyproject.serviceファイル名です拡張子を削除します):
sudo systemctl start myproject
sudo systemctl restart myproject
sudo systemctl stop myproject
参考:https://www.jianshu.com/p/84978157c785 https://juejin.im/entry/58eb912c8d6d810061908b90 https://blog.csdn.net/lihao21/article/details/52304119