超簡単ubuntu20.04 + Flask + Gunicorn + NginxでWebサーバー
1. 環境作成
$ sudo apt install python3-pip python3-venv python3-dev nginx
$ mkdir ~/myapp; cd ~/myapp
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install gunicorn flask
/etc/iptables/rules.v4
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5000 -j ACCEPT
$ sudo netfilter-persistent reload # 反映
$ sudo iptables -L # 確認
2. ファイル作成
~/myapp/server.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1 style='color:blue'>Hello There!</h1>"
if __name__ == "__main__":
app.run(host='0.0.0.0')
~/myapp/wsgi.py
from server import app
if __name__ == "__main__":
app.run()
/etc/systemd/system/myapp.service
[Unit]
Description=Gunicorn instance to serve myapp
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myapp
Environment="PATH=/home/ubuntu/myapp/.venv/bin"
ExecStart=/home/ubuntu/myapp/.venv/bin/gunicorn --reload --workers 1 --bind unix:server.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
3. サービス起動
$ sudo systemctl start myapp
$ sudo systemctl enable myapp # 自動起動
$ sudo systemctl status myapp # 確認
4. プロキシ設定
/etc/nginx/sites-available/myapp
server {
listen 80;
server_name <domain> www.<domain>;
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/myapp/server.sock;
}
}
$ sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled
$ sudo nginx -t # 確認
$ sudo systemctl restart nginx # 再起動
以上、超簡単!
SSL対応したい場合は
超簡単ubuntu20.04 + nginx + Let's Encrypt https初期設定
を見てもらえましたら
5. 参考
この記事が気に入ったらサポートをしてみませんか?