運用・デプロイ

デプロイ(nginx-proxy・sslip.io)

Docker Compose と HTTPS 検証。

nginx-proxy + sslip.io で Swipe LP を外から確認する

前提

  • /srv/proxy/docker-compose.ymlnginx-proxyacme-companion が起動していること。
  • Docker ネットワーク proxy が存在すること(proxy スタック起動時に作成される)。
docker network inspect proxy --format '{{.Name}}'

sslip.io のホスト名

sslip.io では、よく次のどちらかで IP を指定する。

  1. ドット区切りIP(Nexus の admin.163.44.96.146.sslip.io と同じ型)
    • 例: swipe-lp.163.44.96.146.sslip.io163.44.96.146
  2. ハイフン区切りの1ラベル
    • 例: 203-0-113-10.sslip.ioswipe-lp.203-0-113-10.sslip.io

どちらでもよい。既存サービスと揃えるなら 1 が分かりやすい。

Let’s Encrypt(HTTP-01)は 80番がその IP で到達可能である必要がある(ファイアウォール・ルータのポート転送を確認)。

スタック概要

docker composePostgreSQL・MinIO(S3互換)・API(FastAPI)・Web(Next.js) を起動する。詳細は spec/stack.md

nginx-proxy には web コンテナだけが接続する。コンテナ内ポートは 3000VIRTUAL_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 で再ビルドする。

手順

  1. リポジトリルートで環境変数を用意する。

    cd /srv/sites/swipe-lp
    cp .env.example .env
    # .env の SWIPE_LP_HOST を自分の IP に合わせて編集
    # API キー等を入れたあと・編集前: npm run env:backup(.env.backup-* をローカル保持)
    
  2. ビルドして起動する。

    docker compose build
    docker compose up -d
    
  3. ブラウザで https://{SWIPE_LP_HOST}/ を開く。初回は証明書発行に1〜2分かかることがある。

  4. APIのヘルスは Next 経由で https://{SWIPE_LP_HOST}/api/v1/health(rewrite で FastAPI に転送)。

トラブルシュート

症状確認
502docker compose psweb が Up か。proxy ネットワークに接続されているか。
/docs が 404web イメージが古い、または .dockerignoredocs/ が除外されている(ビルドに docs が乗らない)。後者はルートの .dockerignore を確認。修正後は docker compose build web && docker compose up -d web
証明書が出ない80/443 が外向きに開いているか。acme-companion のログ。LETSENCRYPT_HOSTVIRTUAL_HOST と一致しているか。
名前が解決しないsslip.io の形式(ドット→ハイフン)ミス。

デプロイを楽にするコツ

  • 本番では sslip の代わりに自前ドメインの DNS A レコードを向け、SWIPE_LP_HOST だけ差し替える。
  • 変更のたび: docker compose up -d --buildフロントのルートや docs/ をイメージに含める変更後は web の再ビルドが必須)。
  • CI ではイメージをレジストリに push → サーバで pull + compose up(将来 Makefiledeploy ターゲットに寄せられる)。

関連ファイル

  • docker-compose.ymlpostgres / minio / api / webproxy ネットワーク
  • apps/web/Dockerfile … Next.js standalone
  • apps/api/Dockerfile … FastAPI + Alembic

ローカルでポート公開したい場合

ploxy を使わずに確認する場合は、例として docker-compose.override.ymlweb3000:3000api8000:8000 を載せる(git に含めない)。

ソース: docs/deploy/nginx-proxy-sslip.md