見出し画像

超簡単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. 参考


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