開発したWebアプリを本番サーバーで公開する方法を解説します。Nginx+Gunicornの組み合わせはPython Webアプリの定番デプロイ構成です。
Gunicornとは?
GunicornはPython用のWSGIサーバーです。FastAPIなどのアプリを複数ワーカープロセスで動かし、本番環境に適した安定した実行環境を提供します。
pip install gunicorn uvicorn[standard]Gunicornで起動する
# FastAPIアプリをGunicorn+Uvicornワーカーで起動
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000systemdでサービス化する
sudo nano /etc/systemd/system/myapp.service[Unit]
Description=FastAPI App
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/myapp
EnvironmentFile=/var/www/myapp/.env
ExecStart=/var/www/myapp/venv/bin/gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
Restart=always
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myappNginxをリバースプロキシとしてGunicornに繋ぐ
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $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;
}
}まとめ
- Gunicornで複数ワーカーを立ててアプリを安定稼働させる
- systemdでサービス化してサーバー再起動時も自動起動する
- NginxをリバースプロキシとしてGunicornの前段に置くのが定番構成



コメント