AWSでEC2に Flask ,Nginx, Gunicornの環境を作成

OSはAmazon Linux 2にしました。最新の2023だと情報が少ないので古いバージョンのOSにしてます。

pythonとnginxをインストールします

sudo yum install -y python3 python3-pip
sudo amazon-linux-extras install nginx1

pythonの仮想環境を作成します。

mkdir ~/my_flask_app
cd ~/my_flask_app
python3 -m venv venv

仮想環境で各ライブラリをインストールします。

source venv/bin/activate
pip install wheel
pip install gunicorn flask

Flaskのソースファイルを作成します。

vi ~/my_flask_app/flaskapp.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello Flask!"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

実行して、エラーがないことを確認。

python3 flaskapp.py

GunicornのWSGIエントリーポイントを作成します。

vi ~/my_flask_app/wsgi.py

from flaskapp import app
if __name__ == "__main__":
    app.run()

実行して、エラーがないことを確認。

cd ~/project/
gunicorn --bind 0.0.0.0:5000 wsgi:app

仮想環境から出ます。

deactivate

各設定ファイルを作成します。

sudo vi /etc/systemd/system/flask.service

[Unit]
Description=Gunicorn instance to serve Flask
After=network.target
[Service]
User=ec2-user
Group=ec2-user
WorkingDirectory=/home/ec2-user/my_flask_app
Environment="PATH=/home/ec2-user/my_flask_app/venv/bin"
ExecStart=/home/ec2-user/my_flask_app/venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
[Install]
WantedBy=multi-user.target
sudo vi /etc/nginx/proxy_params 

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

パーミッションを変更します

chmod -R 775 /home/ec2-user/my_flask_app

実行して、エラーがないことを確認。

sudo systemctl daemon-reload
sudo systemctl start flask
sudo systemctl enable flask
sudo systemctl status flask

flaskの設定ファイルを作成します

sudo vi /etc/nginx/conf.d/flask.conf

server {
    listen 80;
    server_name _;
    location / {
        include proxy_params;
        proxy_pass  http://127.0.0.1:5000;
    }
}

書式があってるかテストします。

sudo nginx -t

再起動します。

systemctl restart nginx

アクセスして、ログが出るか確認します。

curl localhost
less /var/log/nginx/access.log

参考にしたサイト
https://www.rosehosting.com/blog/how-to-deploy-flask-application-with-nginx-and-gunicorn-on-ubuntu-20-04/?utm_source=pocket_saves

この記事が気に入ったらサポートをしてみませんか?