開発Flask 本番gunicorn

Flask開発サーバーとgunicornにはいくつかの重要な違いがあります。これらの違いのため、本番環境ではgunicornなどのWSGIサーバーが推奨されます。

Flask開発サーバーの特徴

  1. デバッグと開発用:
  • Flaskの開発サーバーは、開発とデバッグのために設計されています。
  • 自動的にコードの変更を検出し、アプリケーションを再起動するホットリロード機能があります。
  • デバッグモードでは、エラートレースバックとデバッガーが提供され、問題の特定が容易になります。
  1. パフォーマンスと安定性の欠如:
  • 開発サーバーはシングルスレッドで動作し、高負荷環境や複数の同時接続に対して効率的にスケールしません。
  • 高負荷や長時間の運用ではクラッシュしやすく、本番環境には不向きです。
  1. セキュリティの欠如:
  • セキュリティ機能が限定的であり、本番環境での使用は推奨されません。
  • デバッグモードの有効化は重大なセキュリティリスクを伴います。

gunicornの特徴

  1. プロダクションレディ:
  • gunicorn(Green Unicorn)は、Python WSGI HTTPサーバーで、本番環境での使用を目的としています。
  • 並行処理をサポートし、多数の同時接続を効率的に処理できます。
  1. マルチスレッドとマルチプロセス:
  • gunicornは複数のワーカー(プロセスやスレッド)を生成し、負荷分散と高可用性を提供します。
  • 各ワーカーは独立してリクエストを処理するため、単一のワーカーのクラッシュが全体のサービス停止につながりません。
  1. セキュリティ:
  • gunicornは、TLS(SSL)暗号化などのセキュリティ機能をサポートしています。
  • 安全な本番環境のための適切なセキュリティ設定が可能です。
  1. パフォーマンス:
  • gunicornは高性能で、リクエストの処理速度や応答時間が優れています。
  • ワーカー数やタイムアウト設定を調整することで、パフォーマンスを最適化できます。
  1. スケーラビリティ:
  • 負荷分散やスケーリングのための設定が簡単に行えます。
  • クラウド環境やコンテナ化された環境(例:Docker)での運用が容易です。

なぜ本番環境でgunicornを使用するのか?

  • 安定性: gunicornは、長時間にわたる高負荷の運用に耐える安定性を提供します。
  • セキュリティ: 本番環境に必要なセキュリティ機能をサポートしています。
  • パフォーマンス: 複数のリクエストを効率的に処理でき、スケーラビリティも優れています。
  • 設定可能性: 様々な環境設定を調整することで、パフォーマンスと安定性をさらに向上させることができます。

これらの理由から、本番環境ではgunicornのようなWSGIサーバーを使用することが推奨されます。

“gunicorn” は “Green Unicorn” の略称で、通常「ガニコーン」と発音されます。発音のガイドラインとしては「gun(ガン)」と「unicorn(ユニコーン)」を組み合わせたものです。ただし、アクセントは “gun” に置かれ、「ガニコーン」と言うのが一般的です。

日本語での発音は、「ガニコーン」または「グニコーン」とされることが多いです。どちらでも通じると思います。

確認事項

  1. アプリケーション動作の確認:
    • ブラウザでEC2インスタンスのパブリックIPまたはドメイン名にアクセスして、アプリケーションが正しく動作していることを確認します。例:shコードをコピーする
    • http://<your-ec2-public-ip>
  2. セキュリティグループの設定:
    • ポート80がセキュリティグループで開放されていることを確認します。セキュリティグループのインバウンドルールに以下の設定があることを確認します:タイププロトコルポート範囲ソースHTTP TCP 800.0.0.0/0 (または特定のIPアドレス)
  3. Firewallの設定:
    • インスタンス内のファイアウォールがポート80のトラフィックをブロックしていないことを確認します。

追加の考慮事項

  • エラーログの監視:
    • gunicornのログを監視して、エラーや警告がないか確認します。
    • ログファイルを指定する場合、gunicornのオプションでログファイルを設定できます。
    • 例:
    • sudo /home/ubuntu/venv/bin/gunicorn -b 0.0.0.0:80 app:app --access-logfile /var/log/gunicorn/access.log --error-logfile /var/log/gunicorn/error.log
  • サービスとして設定:
    • gunicornをシステムサービスとして設定し、自動的に起動するようにすることを検討してください。これにより、サーバーが再起動されたときに自動的にアプリケーションが再起動されます。

システムサービスとして設定する方法

  1. サービスファイルの作成:
    • 次の内容で/etc/systemd/system/gunicorn.serviceファイルを作成します。
    • iniコードをコピーする
    • [Unit] Description=gunicorn daemon After=network.target
    • [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/chouseikun ExecStart=/home/ubuntu/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/chouseikun/app.sock -m 007 wsgi:app
    • [Install] WantedBy=multi-user.target
  2. サービスのリロードと起動:shコードをコピーする
    • sudo systemctl daemon-reload
    • sudo systemctl start gunicorn
    • sudo systemctl enable gunicorn
  3. Nginxの設定(オプション):
    • より安定した環境のために、Nginxをリバースプロキシとして使用することを検討してください。

これで、gunicornが正常に起動し、アプリケーションが正しくリッスンしていることを確認できます。もしブラウザでアプリケーションにアクセスできない場合は、セキュリティグループの設定やファイアウォール設定を再度確認してください。

タイトルとURLをコピーしました