メインコンテンツまでスキップ

デプロイ

コンポーネントごとのデプロイ先

コンポーネントデプロイ先方法
API(FastAPI)VPSサーバー(Ubuntu 22.04)GitHub Actions → Docker
Web(Next.js)Cloudflare PagesGitHub Actions → Wrangler
SPN(Next.js)Cloudflare PagesGitHub Actions → Wrangler

APIサーバー

デプロイの流れ

main ブランチにマージされると GitHub Actions が自動でデプロイします。

main にマージ
→ Dockerイメージをビルド(GHCR にプッシュ)
→ 本番サーバーに SSH 接続
→ docker compose pull && docker compose up -d
→ alembic upgrade head(マイグレーション)
→ /health へのヘルスチェック(5回リトライ)

サーバー要件

項目最小推奨
OSUbuntu 22.04 LTSUbuntu 22.04 LTS
RAM2GB4GB以上
CPU2コア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 データの損失に注意 マイグレーションの巻き戻しはカラム削除などを伴う場合があります。本番で実行する前に必ずバックアップを取ってください。 :::