Vercel からの移行
Zenavo では、Next.js アプリはサーバーレス関数ではなく、常駐する 1 つのサーバー(next start)として動き、静的サイトは Caddy が配信します。ほとんどのアプリはコードを変えずに移行できます。
Vercel と Zenavo の対応
| Vercel | Zenavo |
|---|---|
| プロジェクト | プロジェクト内のサービス |
| 本番ブランチの Git デプロイ | push でデプロイ |
| Preview デプロイ | 該当なし:別のブランチを追跡するサービスを追加するか、プロジェクトを複製 |
| Serverless と Edge Functions | 1 つの Next.js サーバーの一部 |
| 環境変数 | 変数。NEXT_PUBLIC_* はビルド引数 |
vercel.json の redirects、rewrites、headers | next.config.js、または静的サーバーの設定 |
| Vercel Postgres、KV、Blob | そのまま使い続けるか、データベースサービスに移す |
| Cron Jobs | 定期実行はまだありません:スケジューラーを持つワーカーサービスを動かします |
1. アプリをデプロイする
- サーバーを追加し、プロジェクトを作成します。
- Add Service → GitHub でリポジトリを選び、モノレポならルートディレクトリを設定します。
- Next.js か静的サイトのガイドに従います。Next.js は
next buildでビルドしてnext startで起動し、Vite などの静的ビルドは出力フォルダーから配信されます。
Vercel と動きが違う点:
- ISR と画像キャッシュは
next startでも動きますが、キャッシュはコンテナ内にあり、デプロイのたびに空から始まります。 - Middleware はエッジではなく Node.js のサーバーで動きます。
vercel.jsonの redirects、rewrites、headers は読まれません。next.config.jsのredirects()、rewrites()、headers()に移してください。
2. 変数をコピーする
sh
vercel env pull .env.production --environment=productionその行をサービスの Variable タブ → Edit Raw Variables に貼り付けます(VERCEL_* は除きます)。NEXT_PUBLIC_*(静的サイトなら VITE_*)はビルド時に必要なので、すべて Settings → Build → Build arguments に移します。終わったらファイルは削除してください。
3. データ
Vercel Marketplace のデータベース(Neon、Upstash、Supabase など)は、接続文字列を使えば Zenavo からもそのまま使えます。PostgreSQL を自分のサーバーに移すなら、pg_dump --no-owner --no-acl "$POSTGRES_URL" | gzip > vercel.sql.gz でプレーンな SQL にダンプし、新しい PostgreSQL サービスの Backup & Restore タブでアップロードして復元します(バックアップのアップロード)。
4. ドメインを切り替える
Networking でドメインを設定し、A レコードでサーバーに向けます。ドメインが Vercel のネームサーバーを使っている場合は、Vercel DNS でレコードを変えるか、先にネームサーバーを移してください(ドメインと HTTPS)。