チュートリアルに関する最後の記事になります。
参考サイト: Flask – Tutorial(公式ドキュメント)
- チュートリアル
- クイックスタート
10. 本番環境へのデプロイ
チュートリアルのこのパートは、アプリケーションをデプロイするサーバを既に持っていることを前提としています。ここではディストリビューションファイルを作成し、インストールする方法の概要を述べるにとどめ、どのサーバやソフトウェアを使うべきかについては立ち入って説明してはいません。下のインストラクションを試すために新しい開発環境をセットアップしますが、実際の公開アプリケーションのホストには使うことは推奨されていません。アプリケーションをホストする多くの方法の一覧を見るには、Development Optionsを参照下さい。
10-1. ビルドとインストール
アプリケーションをどこかにデプロイする場合、ディストリビューションファイルを作成する必要があります。現在のPythonディストリビューションの標準は、.whl
拡張子を持ったwheelフォーマットです。まず、wheelライブラリがインストールされていることを確認して下さい。
(env)flask-tutorial$ pip install wheel
Pythonでsetup.py
を実行すると、ビルド関連のコマンドを発するコマンドラインツールを取得できます。bdist_wheel
コマンドは、wheelディストリビューションファイルをビルドします。
(env)flask-tutorial$ python setup.py bdist_wheel
このコマンドを実行すると、dist/flaskr-1.0.0-py3-none-any.whl
ファイルが作成されます。ファイル名はプロジェクトの名前で、ファイルのバージョンやタグをインストールできます。
他のマシーンにこのファイル(dist/flaskr-1.0.0-py3-none-any.whl
)をコピーし、新しい仮想環境を構築してpip
を使ってこのファイルをインストールして下さい。
(env)other-env$ pip install flaskr-1.0.0-py3-none-any.whl
pip
は依存関係に沿って、プロジェクトをインストールします。
インストールしたマシーンは、開発したものとは異なるマシーンのため、instanceフォルダにデータベースを作る必要があるので、再度init-db
コマンドを実行します。
(venv)other-env$ export FLASK_APP=flaskr
(venv)other-env$ flask init-db
Flaskはアプリケーションを見つけ、それをインストールします(編集モードではない)。この場合、instanceフォルダは異なるフォルダを使います。venv/var/flaskr-instance
がinstanceフォルダです。
10-2. シークレットキーを設定する。
チュートリアルの初めにSECRET_KEY
に初期値を設定しましたが、本番環境では、これはランダムなbyteデータに変更すべきです。そうでない場合、サイトアタッカーがセッションクッキーやシークレットキーを利用するデータを変更するためにdev
キーを使用する可能性があります。ランダムなシークレットキーの生成は次のコマンドで行えます。
$ python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'
存在する場合にファクトリーが読み取るinstanceフォルダにconfig.py
ファイルを作成し、そこに生成したシークレットキーをコピーします。
# venv/var/flaskr-instance/config.py
SECRET_KEY = b'_5#y2L"F4Q8z\n\xec]/'
このFlaskrアプリケーションでは、このファイルに設定される値はSECRET_KEY
だけですが、他にも必要な設定を記述することもできます。
10-3. 本番環境で実行する
開発環境下ではなく、公で公開しているとき、組み込みの開発サーバを利用すべきではありません(flask run
)。開発サーバは、便宜上Werkzeugによって提供されていますが、特別効率的、安定的、安全なものではありません。
代わりに本番用のWSGIサーバを使います。例えば、[Waitress]を使うには、まず仮想環境にWaitressをインストールします。
(venv)other-env$ pip install waitress
Waitressにこのアプリケーションについて伝える必要がありますが、flask run
で行うFlask_APP
は使用しません。アプリケーションオブジェクトを取得するために、アプリケーションファクトリーをインストールし、呼び出すよう、Waitressに指令する必要があります。
(venv)other-env$ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080
アプリケーションをホストする他の多くの方法を見るには、Development Optionsを参照下さい。Waitressは一例であり、WindowsもLinuxもサポートするため選択されました。プロジェクトで選択できるWSGIサーバやデプロイオプションは他にもたくさん存在します。
11. 開発し続けろ!
このチュートリアルを通して、FlaskとPythonについて多くのことを学習しました。チュートリアルを再度確認し、記述したコードとそこに至ったステップを比較してみて下さい。自身のプロジェクトとサンプルプロジェクトを比較してみて下さい。チュートリアルを一歩ずつ進んできたので、最初とは少し異なって見えるかもしれません。
Flaskには、今まで見た以上に多くの機能があります。しかし、自身のウェブアプリケーションの開発を始められる技能は既に身についています。Flaskができることをより知るにはQuickstartをチェックして下さい。それからさらに学ぶにはドキュメントを読み込んでみて下さい。Flaskは、場面場面でJinja、Click、Werkzeug、ItsDengerousを使っています。そして、それらは全て独自のドキュメントを持っています。またデータベース操作やフォームデータの検証などのタスクをシンプルかつ強力に行う拡張機能もあります。
Flaskrプロジェクトを引き続き開発し続ける場合、次に行うと面白いアイディアはいくつかあります。
- 一つの投稿を表示する詳細なページ。投稿のタイトルをクリックすると、そのページへ飛ぶ
- 投稿にライク/アンライクをつける
- コメント
- タグ。タグをクリックすると、そのタグを持つ全ての投稿を見れるようにする
- インデックスページを名前でフィルターをかける検索ボックス
- ページ表示。1ページにつき5件の投稿を表示する
- 投稿に付随する画像をアップロードできるようにする
- マークダウンを使った投稿を整形する
- 新しい投稿のRSSフィード
楽しみながら、素晴らしいアプリケーションを作ろう!
最後に
以上がFlaskの公式ドキュメントに記載されているチュートリアルの内容です。クイックスタートとこのチュートリアルを理解できればある程度のアプリケーションを作成できます。私もこのチュートリアルを学んだ時は、これを参考にアプリケーションを作りました。アプリケーションを作るために必要な情報が網羅されていると思いますので、ぜひ参考にして頂ければと思います。
読んで頂き、ありがとうございました。