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