FlaskアプリケーションをAmazon Linuxにデプロイする方法

Flaskは、Pythonで構築された軽量なWebフレームワークで、手軽にAPIやWebアプリケーションを作成できます。本記事では、Amazon Linux環境でFlaskアプリケーションをセットアップし、GunicornとNginxを用いてデプロイする手順を解説します。


必要な環境構築

1. Python環境のインストール

Amazon LinuxでPythonとpipをインストールするには、以下のコマンドを実行します。

sudo yum install python3
sudo yum install python3-pip

2. プロジェクトのセットアップ

プロジェクトフォルダの作成

任意の場所にプロジェクトフォルダを作成し、移動します。

mkdir flask_project
cd flask_project

仮想環境の作成と有効化

仮想環境を利用すると、プロジェクト間で依存関係が衝突するリスクを防げます。

python3 -m venv venv
source venv/bin/activate
仮想環境が有効化されると、コマンドラインの先頭に (venv) が表示されます。

3. 必要なパッケージのインストール

requirements.txt ファイルを用意して、必要なPythonパッケージを管理します。

例: requirements.txt

Flask==2.3.2
gunicorn

パッケージのインストール:

pip install -r requirements.txt

アプリケーションの準備

1. 環境変数の設定

Flaskアプリケーションを適切に動作させるため、環境変数を設定します。開発環境用の設定は以下の通りです。

export FLASK_APP=app.py
export FLASK_ENV=development

本番環境では FLASK_ENV=production を指定します。


2. Gunicornによるアプリケーションの起動

Flaskは単独では本番環境向けに最適化されていないため、Gunicornを使用します。

以下のコマンドでアプリケーションを起動します。

gunicorn -w 4 -b 127.0.0.1:5000 app:app -D
  • -w 4: ワーカー数(サーバのCPUコア数に応じて調整)
  • -b 127.0.0.1:5000: バインドアドレスとポート
  • -D: デーモンとしてバックグラウンドで実行

3. Nginxの設定

Nginxのインストールと設定

Nginxをインストールし、Gunicornにリバースプロキシとして接続します。

sudo yum install nginx
Nginx設定ファイル (/etc/nginx/nginx.conf) を以下のように編集します。
server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

設定をテストしてからNginxを再起動します。

sudo nginx -t
sudo systemctl restart nginx





注意点

  • 仮想環境を使用しない場合: システムのPython環境に直接パッケージをインストールすると、他のプロジェクトと依存関係が衝突するリスクがあります。仮想環境の使用を強く推奨します。
  • Gunicornの自動起動: 再起動後もGunicornを起動させるには、systemdサービスファイルを作成します。

システム全体の停止方法

停止する場合のコマンド

pkill gunicorn
sudo systemctl stop nginx

以上で、Amazon Linux環境でのFlaskアプリケーションのデプロイが完了です。