⑧Web開発

Webアプリをサーバーにデプロイする【Nginx+Gunicorn完全ガイド】

⑧Web開発
記事内に広告が含まれています。

開発した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:8000

systemdでサービス化する

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.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

Nginxをリバースプロキシとして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の前段に置くのが定番構成

コメント

タイトルとURLをコピーしました