18.04でFlaskマイクロフレームワークを使用してPythonアプリケーションを構築します。server]のセットアップ方法と、アプリケーションを起動してhttps://www.nginx.com/[Nginx]を設定して、フロントエンドリバースプロキシ。前提条件このガイドを開始する前に、次のものが必要です。18.04がインストールされたサーバーと、sudo特権を持つ非rootユーザー。[初期サーバーセットアップガイド]に従ってください。18.04にNginxをインストールする方法のステップ1および2に従って、Nginxがインストールされました。サーバーを指すように構成されたドメイン名。[Freenom]で無料で入手できます。[ドメインとDNSに関するドキュメント]に従って、ドメインをDigitalOceanにポイントする方法を学習できます。次のDNSレコードを必ず作成してください。サーバーのパブリックIPアドレスを指す「++」を持つAレコード。+」を持つAレコード。GunicornサーバーがFlaskアプリケーションと通信するために使用するWSGI仕様に精通している。[この議論は、WSGIをより詳細にカバーしています。手順1-Ubuntuリポジトリからコンポーネントをインストールする最初のステップは、Ubuntuリポジトリから必要なすべてのピースをインストールすることです。Gunicornコンポーネントの一部を構築するために必要なPython開発ファイルも入手します。ローカルパッケージインデックスを更新し、Python環境を構築できるパッケージをインストールしましょう。python3-setuptoolsこれらのパッケージを用意したら、プロジェクトの仮想環境の作成に移りましょう。次に、Flaskアプリケーションをシステム上の他のPythonファイルから分離するために、仮想環境を設定します。`パッケージをインストールします。+`モジュールがインストールされます。python3-venv次に、Flaskプロジェクトの親ディレクトリを作成しましょう。作成後、ディレクトリに移動します。~/次を入力して、FlaskプロジェクトのPython要件を保存する仮想環境を作成します。`+`というディレクトリにインストールされます。仮想環境内にアプリケーションをインストールする前に、アクティブ化する必要があります。/bin/activateプロンプトが変わり、仮想環境内で操作していることが示されます。ステップ3-Flaskアプリケーションのセットアップ仮想環境になったので、FlaskとGunicornをインストールして、アプリケーションの設計を開始できます。+`をインストールしましょう。wheelNote次に、FlaskとGunicornをインストールしましょう。flaskサンプルアプリの作成Flaskが使用可能になったので、簡単なアプリケーションを作成できます。フラスコはマイクロフレームワークです。多くのフル機能のフレームワークが提供するツールの多くは含まれておらず、主にプロジェクトにインポートしてWebアプリケーションの初期化を支援できるモジュールとして存在します。~//.pyアプリケーションコードはこのファイルに保存されます。Flaskをインポートし、Flaskオブジェクトをインスタンス化します。これを使用して、特定のルートが要求されたときに実行される機能を定義できます。app.run(host='0.0.0.0')これは基本的に、ルートドメインにアクセスしたときに表示するコンテンツを定義します。完了したら、ファイルを保存して閉じます。サーバーの初期セットアップガイドに従った場合、UFWファイアウォールを有効にする必要があります。+`へのアクセスを許可する必要があります。5000次のように入力して、Flaskアプリをテストできます。.py次のような出力が表示されます。これには、本番環境でこのサーバー設定を使用しないように促す警告が含まれています。quit)WebブラウザーでサーバーのIPアドレスの後に「:5000」を入力します。http://:5000このようなものが見えるはずです。+`を押してFlask開発サーバーを停止します。次に、アプリケーションのエントリポイントとして機能するファイルを作成しましょう。これにより、Gunicornサーバーにアプリケーションとの対話方法が通知されます。~//wsgi.pyこのファイルで、アプリケーションからFlaskインスタンスをインポートして実行します。app.run()完了したら、ファイルを保存して閉じます。ステップ4-Gunicornの構成これで、エントリポイントが確立されたアプリケーションが作成されました。Gunicornの構成に進むことができます。先に進む前に、Gunicornがアプリケーションを正しく提供できることを確認する必要があります。これを行うには、エントリポイントの名前を渡すだけです。」を除く)、およびアプリケーション内の呼び出し可能オブジェクトの名前として構築されます。wsgi:app`です。公開するインターフェイスでアプリケーションが開始されるように、バインドするインターフェイスとポートを指定します。wsgi:app次のような出力が表示されるはずです。28220ウェブブラウザの末尾に「:5000」が追加されたサーバーのIPアドレスに再度アクセスします。http://:5000アプリケーションの出力が表示されます。これで仮想環境が完成したので、非アクティブ化できます。deactivatePythonコマンドはすべて、システムのPython環境を再び使用するようになります。次に、systemdサービスユニットファイルを作成しましょう。systemdユニットファイルを作成すると、Ubuntuの初期化システムがGunicornを自動的に起動し、サーバーが起動するたびにFlaskアプリケーションを提供できるようになります。.service`で終わるユニットファイルを作成します。+`セクションから始めます。ここにサービスの説明を入れて、ネットワーキングターゲットに到達した後にのみ開始するようにinitシステムに伝えましょう。`セクションを開きます。これにより、プロセスを実行するユーザーとグループを指定します。関連するすべてのファイルを所有しているため、通常のユーザーアカウントにプロセスの所有権を与えましょう。www-data」グループに付与しましょう。PATH`環境変数を設定して、initシステムがプロセスの実行可能ファイルが仮想環境内にあることを認識できるようにします。サービスを開始するコマンドも指定しましょう。このコマンドは次のことを行います。`を作成してバインドします。umask値を「+007」に設定して、所有者とグループへのアクセスを許可するソケットファイルを作成し、他のアクセスを制限します。+)を指定しますSystemdでは、仮想環境内にインストールされているGunicorn実行可能ファイルへのフルパスを指定する必要があります。ユーザー名とプロジェクトパスを独自の情報に置き換えることを忘れないでください。+`セクションを追加しましょう。これにより、ブート時に起動できるようにした場合、このサービスをリンクする対象がsystemdに指示されます。通常のマルチユーザーシステムが稼働しているときにこのサービスを開始する必要があります。:[Install]WantedBy=multi-user.targetこれで、systemdサービスファイルが完成しました。今すぐ保存して閉じます。これで、作成したGunicornサービスを開始し、起動時に開始できるように有効化できます。status次のような出力が表示されます。007エラーが表示された場合は、チュートリアルを続行する前にエラーを解決してください。ステップ5-リクエストをプロキシするためのNginxの設定これで、Gunicornアプリケーションサーバーが起動して実行され、プロジェクトディレクトリのソケットファイルに対する要求を待機します。Nginxを設定して、設定ファイルに少し追加して、そのソケットにWebリクエストを渡すようにします。`ディレクトリに新しいサーバーブロック構成ファイルを作成することから始めます。この「+」を呼び出して、残りのガイドに合わせてみましょう。/etc/nginx/sites-available/サーバーブロックを開き、Nginxにデフォルトのポート「80」でリッスンするように指示します。サーバーのドメイン名のリクエストにこのブロックを使用するように伝えましょう。www.;}次に、すべてのリクエストに一致する場所ブロックを追加しましょう。`ファイルを含めます。+`ディレクティブを使用して定義したソケットにリクエストを渡します。}}完了したら、ファイルを保存して閉じます。/etc/nginx/sites-enabledそのディレクトリ内のファイルを使用して、構文エラーをテストできます。-tこれが問題を示さずに戻る場合、Nginxプロセスを再起動して新しい設定を読み取ります。nginx最後に、ファイアウォールを再度調整しましょう。+`からアクセスする必要がなくなったため、そのルールを削除できます。その後、Nginxサーバーへのフルアクセスを許可できます。Full'これで、Webブラウザでサーバーのドメイン名に移動できるはずです。http://アプリケーションの出力が表示されます。[Flaskサンプルアプリ]エラーが発生した場合は、次を確認してください。+:Nginxエラーログをチェックします。+:Nginxアクセスログをチェックします。+:Nginxプロセスログをチェックします。+:FlaskアプリのGunicornログを確認します。ステップ6-アプリケーションの保護サーバーへのトラフィックを安全に保つために、ドメインのSSL証明書を取得しましょう。Encrypt]、https://www.digitalocean.com/community/tutorials/how-to-create-a-selfから無料の証明書を取得するなど、複数の方法があります。18.04でのNginxの自己署名SSL証明書]。便宜上、オプション1を使用します。Ubuntuリポジトリを追加します。ENTER`を押す必要があります。+`でCertbotのNginxパッケージをインストールします。python-certbot-nginxCertbotは、プラグインを介してSSL証明書を取得するさまざまな方法を提供します。Nginxプラグインは、必要に応じてNginxの再構成と構成の再読み込みを処理します。このプラグインを使用するには、次を入力します。+」を使用して証明書を有効にする名前を指定します。`を実行する場合は、電子メールアドレスを入力し、利用規約に同意するよう求められます。Encryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。+」はHTTPS設定をどのように構成するかを尋ねます。ENTER」を押します。設定が更新され、Nginxがリロードして新しい設定を取得します。+`は、プロセスが成功したこと、および証明書が保存されている場所を通知するメッセージで終了します。https://eff.org/donate-le前提条件のNginxのインストール手順に従った場合、冗長HTTPプロファイルの許可は不要になります。+`を使用してもう一度ドメインに移動します。https://ブラウザのセキュリティインジケータとともに、アプリケーションの出力がもう一度表示され、サイトが保護されていることを示すはずです。結論このガイドでは、Python仮想環境内で簡単なFlaskアプリケーションを作成して保護しました。WSGI対応のアプリケーションサーバーがインターフェイスできるようにWSGIエントリポイントを作成し、この機能を提供するようにGunicornアプリサーバーを構成しました。その後、systemdサービスファイルを作成して、起動時にアプリケーションサーバーを自動的に起動しました。Encryptを使用して、Webクライアントトラフィックをアプリケーションサーバーに渡し、外部リクエストを中継し、サーバーへのトラフィックを保護するNginxサーバーブロックを作成しました。Flaskは非常にシンプルですが、非常に柔軟なフレームワークであり、構造や設計に制限をかけすぎることなく、アプリケーションに機能を提供することを目的としています。このガイドで説明されている一般的なスタックを使用して、設計したフラスコアプリケーションを提供できます。