UbuntuでuWSDIとNginxを使用してFlaskプロジェクトを配備する(回転)

7330 ワード

uWSDIについては、まずこの文章を読むことができます.簡単に言えば、WSDIはPythonプロトコルであり、アプリケーション(私たちが書いたソフトウェア)がNginxなどのWebサーバとどのように通信するかを定義しています.WSDIはインタフェースにすぎません.一方、uWSDIは、複数の言語をサポートするサーバコンテナであり、WSDI定義の標準を使用して複数のWebサーバとの通信を実現し、Webサーバからの要求をアプリケーションが理解できる形式に「翻訳」する.
インストール
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
  • protocol説明httpプロトコル
  • の使用
  • -wは、起動するモジュール
  • を示す.
  • runはプロジェクト起動ファイルrun.py拡張子を削除し、appはrun.pyファイルの変数app、すなわちFalskインスタンスである.

  • そしてアクセスし、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
  • 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はリクエスト履歴をファイルに書き込む.

  • 構成が完了したら実行:
    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
  • WorkingDirectory:あなたのプロジェクトディレクトリ.
  • Environment:プロジェクトを示すプロファイル
  • など、必要な環境変数
  • ExecStart:サービス起動のコード
  • 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