第10章 アプリを本番環境対応にする
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
コンテナは正常に動作しているが、本番環境対応ではない。 テストを活用して安全を確保しつつ、本番環境対応を目指そう。
ある意味、本番環境対応プロセスにレッド/グリーン/リファクタリングのサイクルを適用しているのだ。 ハック的なコンテナ設定でグリーン状態を達成した後は、リファクタリングを行う。 コーディング時と同様にインクリメントで進め、動作状態から動作状態へと移行し、FT(機能テスト)で後退を検知するのだ。
必要なこと
ハック的なコンテナイメージの問題点は?
いくつかある:まず、アプリを「通常の」ポート80でホストする必要がある。そうすればユーザーは普通のURLでアクセスできる。
おそらくもっと重要なのは、本番環境でDjangoの開発サーバーを使うべきじゃないってことだ。 実際のワークロードに耐えられるようには設計されていない。 代わりに、人気のGunicorn Python WSGI HTTPサーバを使う。
注記
Djangoのrunserver はローカル開発とデバッグ向けに構築・最適化されている。 への同時アクセスは1ユーザのみを想定。
ソースコード保存時の自動再読み込みは対応するが、
パフォーマンス最適化は施されておらず、
セキュリティ脆弱性への対策も強化されていない。
さらに、settings.pyのいくつかの設定は現状では問題がある。DEBUG=True は本番環境では強く推奨されない。SECRET_KEYを一意にセットする必要があるし、後で見るように他にも問題が発生するだろう。
警告
DEBUG=True セキュリティリスクと見なされる。
Djangoデバッグページは変数の値やsettings.pyの大半の設定など機密情報を表示するためだ。
一つずつ修正できるか見ていこう。
Gunicornへの切り替え
Djangoのマスコットがポニーなのは知ってるか? その由来はこうだ。Djangoには欲しい機能が全て揃っている: ORM、各種ミドルウェア、管理画面…「他に何が欲しい?ポニーか?」さて、Gunicornは「Green Unicorn」の略だ。 ポニーを既に持っているなら、次に欲しいのはこれだろう…
まずコンテナにGunicornをインストールし、runserver の代わりに使う必要がある:
$ python -m pip install gunicorn Collecting gunicorn [...] Successfully installed gunicorn-2[...]
Gunicornは「WSGIサーバ」へのパスを知る必要がある1
通常はapplication という関数だ。
Djangoはsuperlists/wsgi.pyでこれを提供している。
イメージの実行コマンドを変更しよう:
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access