運用・デプロイ
デプロイ(nginx-proxy・sslip.io)
Docker Compose と HTTPS 検証。
nginx-proxy + sslip.io で Swipe LP を外から確認する
前提
/srv/proxy/docker-compose.ymlの nginx-proxy と acme-companion が起動していること。- Docker ネットワーク
proxyが存在すること(proxy スタック起動時に作成される)。
docker network inspect proxy --format '{{.Name}}'
sslip.io のホスト名
sslip.io では、よく次のどちらかで IP を指定する。
- ドット区切りIP(Nexus の
admin.163.44.96.146.sslip.ioと同じ型)- 例:
swipe-lp.163.44.96.146.sslip.io→163.44.96.146
- 例:
- ハイフン区切りの1ラベル
- 例:
203-0-113-10.sslip.ioやswipe-lp.203-0-113-10.sslip.io
- 例:
どちらでもよい。既存サービスと揃えるなら 1 が分かりやすい。
Let’s Encrypt(HTTP-01)は 80番がその IP で到達可能である必要がある(ファイアウォール・ルータのポート転送を確認)。
スタック概要
docker compose で PostgreSQL・MinIO(S3互換)・API(FastAPI)・Web(Next.js) を起動する。詳細は spec/stack.md。
nginx-proxy には web コンテナだけが接続する。コンテナ内ポートは 3000(VIRTUAL_PORT=3000)。
/api/* のプロキシ(重要)
Next.js の rewrites は イメージビルド時に API_INTERNAL_URL を読み込む。Dockerfile の ARG API_INTERNAL_URL=http://api:8000 により、コンテナ内から FastAPI へは http://api:8000 に向く。
ランタイムの environment: API_INTERNAL_URL だけでは rewrite 先は変わらないので、API の向き先を変えたいときは docker compose build web で再ビルドする。
手順
-
リポジトリルートで環境変数を用意する。
cd /srv/sites/swipe-lp cp .env.example .env # .env の SWIPE_LP_HOST を自分の IP に合わせて編集 # API キー等を入れたあと・編集前: npm run env:backup(.env.backup-* をローカル保持) -
ビルドして起動する。
docker compose build docker compose up -d -
ブラウザで
https://{SWIPE_LP_HOST}/を開く。初回は証明書発行に1〜2分かかることがある。 -
APIのヘルスは Next 経由で
https://{SWIPE_LP_HOST}/api/v1/health(rewrite で FastAPI に転送)。
トラブルシュート
| 症状 | 確認 |
|---|---|
| 502 | docker compose ps で web が Up か。proxy ネットワークに接続されているか。 |
/docs が 404 | web イメージが古い、または .dockerignore で docs/ が除外されている(ビルドに docs が乗らない)。後者はルートの .dockerignore を確認。修正後は docker compose build web && docker compose up -d web。 |
| 証明書が出ない | 80/443 が外向きに開いているか。acme-companion のログ。LETSENCRYPT_HOST が VIRTUAL_HOST と一致しているか。 |
| 名前が解決しない | sslip.io の形式(ドット→ハイフン)ミス。 |
デプロイを楽にするコツ
- 本番では sslip の代わりに自前ドメインの DNS A レコードを向け、
SWIPE_LP_HOSTだけ差し替える。 - 変更のたび:
docker compose up -d --build(フロントのルートやdocs/をイメージに含める変更後はwebの再ビルドが必須)。 - CI ではイメージをレジストリに push → サーバで
pull+compose up(将来Makefileのdeployターゲットに寄せられる)。
関連ファイル
docker-compose.yml…postgres/minio/api/webとproxyネットワークapps/web/Dockerfile… Next.js standaloneapps/api/Dockerfile… FastAPI + Alembic
ローカルでポート公開したい場合
ploxy を使わずに確認する場合は、例として docker-compose.override.yml で web に 3000:3000、api に 8000:8000 を載せる(git に含めない)。