デプロイ
コンポーネントごとのデプロイ先
| コンポーネント | デプロイ先 | 方法 |
|---|---|---|
| API(FastAPI) | VPSサーバー(Ubuntu 22.04) | GitHub Actions → Docker |
| Web(Next.js) | Cloudflare Pages | GitHub Actions → Wrangler |
| SPN(Next.js) | Cloudflare Pages | GitHub Actions → Wrangler |
APIサーバー
デプロイの流れ
main ブランチにマージされると GitHub Actions が自動でデプロイします。
main にマージ
→ Dockerイメージをビルド(GHCR にプッシュ)
→ 本番サーバーに SSH 接続
→ docker compose pull && docker compose up -d
→ alembic upgrade head(マイグレーション)
→ /health へのヘルスチェック(5回リトライ)
サーバー要件
| 項目 | 最小 | 推奨 |
|---|---|---|
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS |
| RAM | 2GB | 4GB以上 |
| CPU | 2コア | 4コア以上 |
| ストレージ | 20GB | — |
サーバーの構成
- デプロイ先ディレクトリ:
/opt/happa-api - リバースプロキシ: Nginx(SSL/TLS はLet's Encrypt)
- コンテナ: Docker Compose で管理
Nginxの設定でセキュリティヘッダ(X-Frame-Options, X-Content-Type-Options など)と WebSocket アップグレードが設定されています。
手動デプロイが必要な場合
ssh <user>@<production-host>
cd /opt/happa-api
# 最新イメージを取得して再起動
docker compose pull
docker compose up -d
# マイグレーション実行
docker compose exec api alembic upgrade head
# ヘルスチェック
curl https://<your-api-domain>/health
データベースマイグレーション
Alembic でマイグレーションを管理しています。
# 新しいマイグレーションファイルを作成
cd api
alembic revision --autogenerate -m "add column xxx to yyy"
# 適用(CIで自動実行されるが手動でも可)
alembic upgrade head
# 1つ前に戻す
alembic downgrade -1
マイグレーションファイルは /api/alembic/versions/ に保存されます。コミットに含めてください。
Webフロントエンド(Cloudflare Pages)
デプロイコマンド
cd web
npm run build
npm run deploy # wrangler で Cloudflare Pages にデプロイ
環境変数の管理
Cloudflare Pagesの環境変数はCloudflareダッシュボードで管理します。.env.local はローカル専用で本番には使いません。
SPNフロントエンド(Cloudflare Pages)
cd spn
npm run build
npm run deploy
Web と同様、環境変数はCloudflareダッシュボードで設定します。
ロールバック手順
API のロールバック
GHCR にコミットSHAタグ付きのイメージが残っています。
ssh <user>@<production-host>
cd /opt/happa-api
# docker-compose.yml のイメージタグを特定のSHAに変更してから
docker compose pull
docker compose up -d
データベースのロールバック
# 1つ前のマイグレーションに戻す
alembic downgrade -1
# 特定のリビジョンまで戻す
alembic downgrade <revision_id>
:::caution データの損失に注意 マイグレーションの巻き戻しはカラム削除などを伴う場合があります。本番で実行する前に必ずバックアップを取ってください。 :::