FastAPIアプリケーションを仮想専用サーバー(VPS)にデプロイするには、効率的かつ安全で信頼性の高い動作を確保するためのいくつかの手順が必要です。このガイドでは、アプリケーションサーバーとしてGunicorn、リバースプロキシとしてNginxを使用し、CertbotによるHTTPSでアプリケーションを保護するプロセスを説明します。手順は主にUbuntuベースのシステムを対象としています。
前提条件
開始前に、以下の準備が整っていることを確認してください: * デプロイ可能なFastAPIアプリケーション(依存関係を列挙したrequirements.txtファイルを含む) * Ubuntu(または他のDebianベースのディストリビューション)を実行するVPS * VPSへのSSHアクセス権 * VPSのIPアドレスを指す登録済みドメイン名(オプションですが、HTTPS利用には強く推奨されます)
1. VPSへの接続とシステム更新
まず、SSH経由でVPSに接続し、システムのパッケージリストを更新します。
ssh your_username@your_vps_ip
sudo apt update && sudo apt upgrade -y
2. Python、Pip、仮想環境のインストール
Python 3、パッケージインストーラーである pip、および仮想環境を作成するための venv モジュールをインストールします。
sudo apt install python3 python3-pip python3-venv -y
3. FastAPIアプリケーションのクローン作成
適切なディレクトリ(例: /var/www/)に移動し、バージョン管理システム(例: Git)からFastAPIアプリケーションをクローンします。
sudo mkdir -p /var/www/your_fastapi_app cd /var/www/your_fastapi_app sudo git clone <your_repository_url> . 注: your_fastapi_app および Git URL をプロジェクトの詳細に置き換えてください。
セキュリティ上の理由から、アプリケーション専用の非rootユーザーを作成することを推奨します。
sudo adduser your_app_user sudo usermod -aG sudo your_app_user sudo chown -R your_app_user:your_app_user /var/www/your_fastapi_project_name
次に、この新しいユーザーに切り替えます:
su - your_app_user
cd /var/www/your_fastapi_project_name 4. 仮想環境の設定と依存関係のインストール
プロジェクト用のPython仮想環境を作成し、FastAPI、Gunicorn、Uvicornを含むアプリケーションの依存関係をインストールします。
python3 -m venv venv
source venv/bin/activate pip install -r requirements.txt
pip install gunicorn "uvicorn[standard]" fastapi requirements.txt ファイルがない場合は、ローカル開発環境で pip freeze > requirements.txt を実行して作成できます。
5. FastAPI アプリケーションのテスト (VPS 上でローカルに)
Gunicorn と Nginx を設定する前に、Uvicorn を使用して FastAPI アプリケーションが正しく動作するかどうかをテストしてください。
uvicorn main:app --host 0.0.0.0 --port 8000 main:app を実際のモジュールおよび FastAPI アプリインスタンス名(例:your_app_folder.main:app)に置き換えてください。 アプリケーションは http://your_vps_ip:8000 でアクセスできるはずです。サーバーを停止するには Ctrl+C を押してください。
6. Gunicorn の設定
Gunicorn はアプリケーションサーバーとして動作し、リクエストを処理するために Uvicorn ワーカーを管理します。
Gunicorn設定ファイルの作成(任意ですが推奨)
プロジェクトディレクトリ内にgunicorn_conf.pyというファイルを作成します。
nano gunicorn_conf.py 以下の内容を追加します:
bind = "127.0.0.1:8000"
workers = 4 # CPUコア数に基づいて調整してください(コアあたり2~4ワーカーが一般的な推奨値です)
worker_class = "uvicorn.workers.UvicornWorker" workers の値は調整可能です。一般的な推奨値は (2 * CPU_CORES) + 1です。
Gunicornのテスト
FastAPIアプリケーションでGunicornを実行し、正しく起動することを確認してください。
gunicorn -c gunicorn_conf.py main:app ここでも、main:app をアプリケーションのエントリポイントに置き換えてください。
7. Gunicorn 用 Systemd サービスの作成
アプリケーションが起動時に自動で開始され、簡単に管理できるようにするには、systemd サービスを作成します。
sudo nano /etc/systemd/system/your_fastapi_app.service 以下の内容を追加し、必要に応じてパスや名前を調整してください:
[Unit] Description=FastAPIアプリを提供するGunicornインスタンス
After=network.target [Service] User=your_app_user
Group=your_app_user WorkingDirectory=/var/www/your_fastapi_project_name
ExecStart=/var/www/your_fastapi_project_name/venv/bin/gunicorn -c /var/www/your_fastapi_project_name/gunicorn_conf.py main:app
Restart=always
PrivateTmp=true [Install] WantedBy=multi-user.target 各フィールドの説明: * User および Group: セキュリティのため非rootユーザーを使用。www-dataはWebサーバーで一般的。 * WorkingDirectory: FastAPIプロジェクトディレクトリの絶対パス。
* ExecStart: Gunicorn を起動するコマンド。仮想環境の gunicorn 実行ファイル、設定ファイル、アプリケーションのエントリポイントを指します。
* Restart=always: サービスがクラッシュした場合に再起動することを保証します。
systemd を再読み込みし、サービスを起動し、起動時に実行されるように有効にします。
sudo systemctl daemon-reload
sudo systemctl start your_fastapi_appsudo systemctl enable your_fastapi_app
ステータスとログを確認し、エラーなく実行されていることを確認してください。
sudo systemctl status your_fastapi_app
sudo journalctl -u your_fastapi_app -f 8. Nginxをリバースプロキシとして設定する
Nginxはリバースプロキシとして機能し、インターネットからのリクエストをGunicornアプリケーションに転送し、静的ファイルとSSLを処理します。
Nginxのインストール
sudo apt install nginx -y Nginx設定ファイルの作成
アプリケーション用の新しいNginxサーバーブロック設定ファイルを作成します。
sudo nano /etc/nginx/sites-available/your_domain 以下の内容を追加し、your_domain.comを実際のドメイン名に、/var/www/your_fastapi_project_nameをプロジェクトパスに置き換えてください:
server { listen 80;
server_name your_domain.com www.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;
} # オプション: Nginx経由で静的ファイルを直接提供 # location /static/ {
# alias /var/www/your_fastapi_project_name/static/; # } } Nginx設定の有効化
設定を有効化し、Nginxの構文エラーをテストするためにシンボリックリンクを作成します。
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
sudo nginx -t テストが成功したら、Nginxを再起動します。
sudo systemctl restart nginx 9. ファイアウォール (UFW) の設定
ファイアウォール (例: UFW) が有効になっている場合は、ポート 80 (HTTP) および 443 (HTTPS) での通信を許可するように設定してください。
sudo ufw allow 'Nginx Full'
sudo ufw enable プロンプトが表示されたら、y で確認します。
ファイアウォールのステータスを確認します。
sudo ufw status
10. Certbot(Let's Encrypt)を使用したHTTPSによるセキュリティ強化
アプリケーションをHTTPSで保護することを強く推奨します。CertbotはLet's EncryptからのSSL証明書の取得と設定プロセスを自動化します。
Certbotのインストール
sudo apt install certbot python3-certbot-nginx -y SSL 証明書の取得とインストール
sudo certbot --nginx -d your_domain.com -d www.your_domain.com プロンプトに従ってください。Certbot は Nginx 設定を自動的に変更し、SSL 設定を追加して自動更新を設定します。
11. デプロイの確認
これで、FastAPIアプリケーションがドメイン名経由でHTTPS経由でアクセス可能になっているはずです。ウェブブラウザを開き、https://your_domain.com にアクセスしてください。
トラブルシューティングのヒント
- Gunicornログの確認:
sudo journalctl -u your_fastapi_app -f - Nginxエラーログの確認:
sudo tail -f /var/log/nginx/error.log - Nginx アクセスログの確認:
sudo tail -f /var/log/nginx/access.log - Nginx 設定の確認:
sudo nginx -t - プロジェクトディレクトリと仮想環境のファイル権限が正しいことを確認してください.
- ファイアウォールの問題: UFWルールを再確認してください。
これらの手順に従うことで、Nginx、Gunicorn、HTTPSを備えた本番環境対応のFastAPIアプリケーションをVPSにデプロイできます。