コンテンツへスキップ

Vercel 上の Web 層

Vercel と連携 worker で Quire の Web 層を実行します。

Markdown で表示

設計は 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 個までです。 プールを共有できない環境で、それぞれが別の接続プールを必要とするためです。

デプロイ

  1. リポジトリから Vercel プロジェクトを作り、Root Directory を apps/web にします。apps/web/vercel.json ではインストールとビルドのコマンド (NITRO_PRESET=vercel) を設定し、/sw.js をキャッシュせずに配信します。
  2. 環境変数を設定します。少なくとも 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 がない場合、分析機能は安全のため動きません。
  3. 連携ホストで docker/compose.yaml の web サービスを除いて、同じ docker/.env を使います。
    docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
    Vercel デプロイを公開する前に、そこでマイグレーションを実行します。
  4. デプロイします。設定が拒否される場合、関数ログは 「Web 層が Vercel で起動しませんでした」 で始まり、変更が必要な設定を列挙します。

アップグレード

まず連携ホストでマイグレーションし、次に新しい Vercel デプロイを公開し、最後に連携ホストの worker を更新します。順序は upgrade.md を参照してください。Vercel の即時ロールバックはコードのロールバックで、リリース内なら常に安全です。

ナビゲーション

入力して検索…

↑↓ 移動↵ 選択Esc 閉じる