Das Design ist in Abschnitt 5 von docs/architecture/23-ops.md beschrieben. Vercel betreibt nur den Web-Tier. Alles Weitere läuft auf einem ergänzenden Host, den Sie selbst betreiben; dieser ist zwingend erforderlich.
Status in dieser Version
Die Konfiguration ist vorhanden (apps/web/vercel.json, das Nitro-Preset vercel und die Startprüfungen). Vercel benötigt gemeinsam genutzten Dateispeicher (QUIRE_STORAGE_DRIVER=s3 oder azure), einen Realtime-Treiber, der über Funktionsinstanzen hinweg funktioniert (QUIRE_REALTIME_DRIVER=sse oder centrifugo), und einen HTTP-E-Mail-Anbieter. Fehlt eine dieser Voraussetzungen, verweigert der Web-Tier den Start und nennt jede fehlende Einstellung im Protokoll.
Ergänzender Host: Fly, Railway, ECS oder ein eigener Docker-Host mit docker/compose.yaml
Postgres
Extern, hinter einem Transaktions-Pooler: Neon, Supabase oder RDS mit PgBouncer
Dateien
S3 oder R2. Es gibt keinen dauerhaften Datenträger
Hintergrundjobs
Werden mit pg-boss innerhalb der Anfrage-Transaktion eingereiht und vom ergänzenden Worker ausgeführt. Mit QUIRE_QUEUE_DRIVER=vercel auf dem ergänzenden Worker laufen einfache Jobs (ungeordnete Benachrichtigungs- und Webhook-Zustellungen) über Vercel Queues (VERCEL_QUEUE_REGION, VERCEL_QUEUE_TOKEN), sodass Postgres mit Pooling nicht dafür abgefragt werden muss
Wiederkehrende Jobs
Der ergänzende Scheduler. Es gibt keine Vercel-Cron-Route, da eine Cron-Aufgabe, die Arbeit innerhalb einer Funktion erledigt, das Zeitlimit überschreitet
Tracing
OpenTelemetry an Ihren Collector, OTEL_EXPORTER_OTLP_ENDPOINT
Was dieses Ziel nicht unterstützt
Der Web-Tier prüft diese Einschränkungen beim Start und verweigert den Start mit einer Liste aller Probleme, statt erst dann zu scheitern, wenn die erste E-Mail nicht gesendet werden kann:
Kein SMTP. Vercel blockiert ausgehendes SMTP. Setzen Sie QUIRE_EMAIL_PROVIDER_CONFIG auf einen HTTP-Anbieter (Postmark, SES, Mailgun, SendGrid oder Resend). QUIRE_SMTP_URL wird abgelehnt.
Kein lokaler Datenträger.QUIRE_STORAGE_DRIVER=local wird abgelehnt.
Kein gemeinsam genutzter Speicher zwischen Aufrufen.QUIRE_REALTIME_DRIVER=inprocess wird abgelehnt. Server-Sent Events sind auf das Funktionszeitlimit begrenzt; der Client verbindet sich mit einem Cursor erneut, sodass kein Ereignis verloren geht, aber Präsenz ist nicht verfügbar.
Angeheftete Mandantendatenbanken sind auf etwa acht beschränkt, weil jede davon einen weiteren Verbindungspool in einer Umgebung bedeutet, die Pools nicht gemeinsam nutzen kann.
Bereitstellung
Erstellen Sie aus dem Repository ein Vercel-Projekt mit Root Directoryapps/web. apps/web/vercel.json legt Installations- und Build-Befehle fest (NITRO_PRESET=vercel) und liefert /sw.js ohne Cache aus.
Legen Sie die Umgebungsvariablen fest. Übernehmen Sie mindestens folgende Werte aus docker/.env.example: QUIRE_DEPLOY_TARGET=vercel, QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_SECRET_KEY, QUIRE_MASTER_KEY, DATABASE_URL (Adresse des Poolers), QUIRE_REPORT_DATABASE_URL, QUIRE_AUDIT_DATABASE_URL, QUIRE_DATABASE_ID, QUIRE_EMAIL_PROVIDER_CONFIG, QUIRE_MAIL_FROM, die Speichereinstellungen sowie QUIRE_COLLAB_URL und QUIRE_COLLAB_SIGNING_KEY mit Verweis auf den Collab-Dienst des ergänzenden Hosts.
QUIRE_REPORT_DATABASE_URL gehört zur physischen Datenbank, die durch DATABASE_URL bezeichnet wird. Fügen Sie für jede weitere registrierte Datenbank deren eigene quire_report-Verbindungs-URL sowohl in der Web- als auch in der Worker-Umgebung hinzu. Registrieren Sie anschließend den Namen ihrer Umgebungsvariable als env:NAME in der Plattformkonsole. Fehlt die Report-URL einer Datenbank, werden Analytics-Aufrufe geschlossen abgelehnt.
Führen Sie auf dem ergänzenden Host docker/compose.yaml ohne den Dienst web und mit derselben docker/.env aus:
Migrationen laufen dort, bevor jede Vercel-Bereitstellung freigegeben wird.
Stellen Sie die Anwendung bereit. Bei einer abgelehnten Konfiguration beginnt das Funktionsprotokoll mit „The web tier did not start on vercel“ und nennt jede zu ändernde Einstellung.
Aktualisierung
Führen Sie zuerst die Migrationen auf dem ergänzenden Host aus, geben Sie dann die neue Vercel-Bereitstellung frei und rollen Sie zuletzt die Worker des ergänzenden Hosts aus – in der Reihenfolge aus upgrade.md. Ein sofortiges Vercel-Rollback setzt den Code zurück und ist innerhalb einer Version immer sicher.