どのようにwaitressとnginxを使用して、HTTPSの上にフラスコアプリを実行します.2022年に更新.


HTTPSの上にフラスコアプリを実行すると、単純なエクササイズが、しかし、このトピックをカバーする多くの最新のガイドがないように思える.ここでは、私はHTTPSの上にフラスコアプリを実行するために取ったステップです.
ここに基本的な手順があります.
  • フラスコのアプリを設定します.
  • ウェイトレスで実行します.
  • NGinxで逆プロキシを使用します.
  • SSLを設定しました.
  • nginxサーバのルールを設定します.
  • このガイドでは、すでにフラスコのアプリをしていると仮定して実行します.ここではない場合は、単純なフラスコアプリです.
    from flask import Flask
    
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'> A very simple flask server !</h1>"
    
    if __name__ == "__main__":
        #app.run(host='0.0.0.0')
    
    
    これを実行すると、次のようになります.

    OK、我々は我々のフラスコアプリを実行している理由だけではなく、このサーバーを使用するか?文書ごとに:
    '軽量ながら使いやすく、フラスコの内蔵サーバーは、それがよくスケールしないように生産に適していません.適切な実行中のフラスコに利用可能なオプションのいくつかはここで文書化されています
    これに最も簡単な解決策の一つは、Waitressを使用して自由に自分の公式ガイドを読むことです.しかし、この例では、若干のマイナーな変更をする必要があるだけです.まずウェイトレスをインストールします.
    $ pip install waitress
    
    次に、我々はそれがウェイトレスを使用している知っているようにフラスコのアプリにいくつかの変更を行う必要があります.
    
    from flask import Flask
    #we import waitress here. 
    from waitress import serve
    
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'> A very simple flask server !</h1>"
    
    if __name__ == "__main__":
        #app.run(host='0.0.0.0')
        #We now use this syntax to server our app. 
        serve(app, host='0.0.0.0', port=5000)
    
    
    今我々は我々のフラスコアプリは、生産可能なサーバーを実行している.しかし、我々はまだ我々のSSLを必要とします.あなたがすでに1を持っていないならば、あなたはCertbotを使うことができるか、自己署名Certを使うことができます.
    (更新:Men Faruk Sananakに感謝)
    これらのコマンドを実行してSSLまたはスキップして独自のプロセスを実行します.
    
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
    sudo apt-get install python3-certbot-nginx
    
    
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    
    letsencrypt certonly -a webroot --webroot-path=/var/www/yourdomain.com/html/ -d yourdomain.com -d www.yourdomain.com
    
    
    
    我々はフラスコのアプリに1つの最終的な変更を行います.我々は、ウェイトレスに我々がHTTPSを使用しているということを知らせる必要があります.Documentation .我々はアプリにurl_scheme='https'を追加します.
    from flask import Flask
    from waitress import serve
    
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'> A very simple flask server !</h1>"
    
    if __name__ == "__main__":
        #app.run(host='0.0.0.0')
        serve(app, host='0.0.0.0', port=5000, url_scheme='https')
    
    現在、我々は我々のSSLを持っていて、NGinxを使う準備ができています.既にインストールされていない場合は、hereをインストールする方法です.
    当社のWebサーバのルールは
    etc/nginx/sites-available/default
    
    CDを使用して、例を削除します.
    これらは私たちの規則です.ノートexample.com & your.ipこれは、あなた自身のドメイン/サーバアドレスを使用する例です
    server {
        listen 443 ssl;
    
    
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    
    
    
    
    
        server_name example.com;
    
    
    
     location / {
    
                proxy_pass http://your.ip.adress:5000;
                proxy_set_header X-Real-IP $remote_addr;
    
    
            }
    
    
    }
    
    
    
    server {
        listen 80;
    
        server_name example.com;
    
        return 302 https://$server_name$request_uri;
    }
    
    
    
    
    この行に注意してください.proxy_pass http://your.ip.adress:5000;あなたが別のポートにあなたのアプリケーションを実行している場合は、これらの試合を確認する必要があります.たとえば、ポート3000を使用しているなら、proxy_pass http://your.ip.adress:3000;OK、すべての設定が行われます.しかし、我々はnginxを知っているようにする必要がありますので、我々のようにサーバーを再起動します.sudo systemctl status nginxリフレッシュとSSLで動作する新しいサーバが表示されます.