本番環境へのデプロイ—フラスコのドキュメント

提供:Dev Guides
< FlaskFlask/docs/1.0.x/tutorial/deploy
移動先:案内検索

本番環境にデプロイする

チュートリアルのこの部分では、アプリケーションのデプロイ先のサーバーがあることを前提としています。 配布ファイルを作成してインストールする方法の概要を説明しますが、使用するサーバーまたはソフトウェアの詳細については説明しません。 開発用コンピューターに新しい環境をセットアップして、以下の手順を試すことができますが、実際のパブリックアプリケーションをホストするために使用しないでください。 アプリケーションをホストするさまざまな方法のリストについては、デプロイメントオプションを参照してください。

ビルドとインストール

アプリケーションを他の場所にデプロイする場合は、配布ファイルを作成します。 Pythonディストリビューションの現在の標準は、[X82X] 拡張子の付いた wheel 形式です。 ホイールライブラリが最初にインストールされていることを確認してください。

pip install wheel

Pythonでsetup.pyを実行すると、ビルド関連のコマンドを発行するためのコマンドラインツールが提供されます。 bdist_wheelコマンドは、ホイール配布ファイルを作成します。

python setup.py bdist_wheel

このファイルはdist/flaskr-1.0.0-py3-none-any.whlにあります。 ファイル名は、プロジェクトの名前、バージョン、およびファイルに関するいくつかのタグをインストールできます。

このファイルを別のマシンにコピーし、新しいvirtualenv をセットアップしてから、pipでファイルをインストールします。

pip install flaskr-1.0.0-py3-none-any.whl

Pipは、依存関係とともにプロジェクトをインストールします。

これは別のマシンであるため、init-dbを再度実行して、インスタンスフォルダーにデータベースを作成する必要があります。

export FLASK_APP=flaskr
flask init-db

Flaskがインストールされていることを検出すると(編集可能モードではない)、インスタンスフォルダーに別のディレクトリを使用します。 代わりにvenv/var/flaskr-instanceで見つけることができます。


秘密鍵を構成する

チュートリアルの冒頭で、 SECRET_KEY のデフォルト値を指定しました。 これは、本番環境ではランダムなバイトに変更する必要があります。 そうしないと、攻撃者は公開'dev'キーを使用して、セッションCookie、または秘密キーを使用するその他のものを変更する可能性があります。

次のコマンドを使用して、ランダムな秘密鍵を出力できます。

python -c 'import os; print(os.urandom(16))'

b'_5#y2L"F4Q8z\n\xec]/'

インスタンスフォルダにconfig.pyファイルを作成します。このファイルは、ファクトリが存在する場合に読み取ります。 生成された値をそこにコピーします。

venv/var/flaskr-instance/config.py

SECRET_KEY = b'_5#y2L"F4Q8z\n\xec]/'

ここで他の必要な構成を設定することもできますが、Flaskrに必要なのはSECRET_KEYだけです。


本番サーバーで実行

開発ではなくパブリックで実行する場合は、組み込みの開発サーバー(flask run)を使用しないでください。 開発サーバーは便宜上Werkzeugによって提供されていますが、特に効率的、安定的、または安全になるようには設計されていません。

代わりに、本番WSGIサーバーを使用してください。 たとえば、ウェイトレスを使用するには、最初に仮想環境にインストールします。

pip install waitress

アプリケーションについてウェイトレスに伝える必要がありますが、flask runのようにFLASK_APPを使用しません。 アプリケーションファクトリをインポートして呼び出すように指示して、アプリケーションオブジェクトを取得する必要があります。

waitress-serve --call 'flaskr:create_app'

Serving on http://0.0.0.0:8080

アプリケーションをホストするさまざまな方法のリストについては、デプロイメントオプションを参照してください。 ウェイトレスは単なる例であり、WindowsとLinuxの両方をサポートしているため、チュートリアルに選択されています。 プロジェクトに選択できるWSGIサーバーと展開オプションは他にもたくさんあります。

開発を続けてください!に進んでください。