設計は docs/architecture/23-ops.md のセクション 5 にあります。Vercel で動くのは Web 層だけです。それ以外は運用者が管理する連携ホストで実行し、必須です。
このリリースの状態
設定は用意されています (apps/web/vercel.json、vercel Nitro プリセット、起動時チェック)。Vercel では共有ファイルストレージ (QUIRE_STORAGE_DRIVER=s3 または azure)、関数インスタンス間で動作するリアルタイムドライバー (QUIRE_REALTIME_DRIVER=sse または centrifugo)、HTTP メールプロバイダーが必要です。設定がない場合、Web 層は起動を拒否し、ログに不足している各設定名を表示します。
各コンポーネント
| コンポーネント | 実行場所 |
|---|---|
web |
Vercel Functions、Bun runtime: ページ、REST、MCP、LTI、受信 webhook |
worker、scheduler、collab、content |
Fly、Railway、ECS、または docker/compose.yaml を使う独自 Docker ホストなどの連携ホスト |
| Postgres | トランザクションプーラーの背後にある外部サービス: Neon、Supabase、PgBouncer を使う RDS |
| ファイル | S3 または R2。永続ディスクはありません |
| バックグラウンドジョブ | リクエストのトランザクション内で pg-boss に登録し、連携 worker が実行します。連携 worker で QUIRE_QUEUE_DRIVER=vercel にすると、軽量ジョブ (順序を問わない通知と webhook 配信) は Vercel Queues (VERCEL_QUEUE_REGION、VERCEL_QUEUE_TOKEN) 経由になり、プール済み Postgres をポーリングしません |
| 定期ジョブ | 連携 scheduler。関数内で処理するとタイムアウトするため、Vercel Cron route は使いません |
| トレース | OpenTelemetry を OTEL_EXPORTER_OTLP_ENDPOINT で指定したコレクターに送信 |
この環境でできないこと
後でメールが送れないなどの問題になる前に、Web 層は起動時にすべて確認し、問題点を明記して起動を拒否します。
- SMTP は使えません。 Vercel は送信 SMTP をブロックします。
QUIRE_EMAIL_PROVIDER_CONFIGに Postmark、SES、Mailgun、SendGrid、Resend などの HTTP プロバイダーを設定します。QUIRE_SMTP_URLは拒否されます。 - ローカルディスクは使えません。
QUIRE_STORAGE_DRIVER=localは拒否されます。 - 呼び出し間でメモリーを共有できません。
QUIRE_REALTIME_DRIVER=inprocessは拒否されます。Server-sent events は関数のタイムアウトで制限されます。クライアントはカーソルを使って再接続するためイベントは失われませんが、プレゼンスは利用できません。 - 固定テナントデータベースの数は約 8 個までです。 プールを共有できない環境で、それぞれが別の接続プールを必要とするためです。
デプロイ
- リポジトリから Vercel プロジェクトを作り、Root Directory を
apps/webにします。apps/web/vercel.jsonではインストールとビルドのコマンド (NITRO_PRESET=vercel) を設定し、/sw.jsをキャッシュせずに配信します。 - 環境変数を設定します。少なくとも
docker/.env.exampleのQUIRE_DEPLOY_TARGET=vercel、QUIRE_APP_ORIGIN、QUIRE_CONTENT_ORIGIN、QUIRE_PLATFORM_DOMAINS、QUIRE_SECRET_KEY、QUIRE_MASTER_KEY、DATABASE_URL(プーラーのアドレス)、QUIRE_REPORT_DATABASE_URL、QUIRE_AUDIT_DATABASE_URL、QUIRE_DATABASE_ID、QUIRE_EMAIL_PROVIDER_CONFIG、QUIRE_MAIL_FROM、ストレージ設定、連携ホストの collab サービスを指すQUIRE_COLLAB_URLとQUIRE_COLLAB_SIGNING_KEYを設定します。QUIRE_REPORT_DATABASE_URLはDATABASE_URLが示す物理データベース用です。登録済みの追加 DB ごとに、Web と worker の環境へ専用quire_report接続 URL を追加し、プラットフォームコンソールに環境変数名をenv:NAMEとして登録します。DB のレポート URL がない場合、分析機能は安全のため動きません。 - 連携ホストで
docker/compose.yamlのwebサービスを除いて、同じdocker/.envを使います。 Vercel デプロイを公開する前に、そこでマイグレーションを実行します。docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content - デプロイします。設定が拒否される場合、関数ログは 「Web 層が Vercel で起動しませんでした」 で始まり、変更が必要な設定を列挙します。
アップグレード
まず連携ホストでマイグレーションし、次に新しい Vercel デプロイを公開し、最後に連携ホストの worker を更新します。順序は upgrade.md を参照してください。Vercel の即時ロールバックはコードのロールバックで、リリース内なら常に安全です。