Zum Hauptinhalt springen

Go-Live: DNS, Render, Vercel & United Domains

Automatisierung für Custom Domains — ohne Datenverlust (nur additive DB-Felder und optionale API-Schritte).

Voraussetzungen (IT)

Dashboard-Umgebung (Render/Produktion):

VariableZweck
RENDER_API_KEY + RENDER_FRONTEND_SERVICE_IDCockpit-Template auf Render
VERCEL_API_TOKENoptional VERCEL_TEAM_ID
UD_RESELLING_LOGIN + UD_RESELLING_PASSWORDDNS bei United Domains / domainreselling.de
COCKPIT_DISABLE_DNS_PROVIDER_WRITE=1Notfall: UD nur lesen, kein UpdateDNSZone

Migration: packages/database/migrations/20260531120000_add_hosting_dns_vercel_ud_SAFE.sql

v0 Team-Template (empfohlen)

Einmalig: Golden Project + v0 Team-Template + Vercel Shared Env (COCKPIT_DASHBOARD_URL, REVALIDATION_SECRET, COCKPIT_FRONTEND_CHANNEL).
Pro Center: nur COCKPIT_REGISTER_TOKEN + COCKPIT_CENTER_SLUG — Cockpit prüft, dass Token und Slug zusammenpassen.

→ Schritt-für-Schritt: v0 Team-Template einrichten

Center ↔ Vercel-Projekt

ModusSpeicherortWann
Dedicated (1 Center = 1 Projekt)ShoppingCenter.vercelProjectIdStandard v0 pro Center
Shared (Multi-Center, ein Layout)Organization.vercelSharedProjectId + vercelProjectMode=sharedTeil G / ein Vercel-Projekt

Automatisch beim Deploy-Register:

  • Vercel Env: VERCEL_PROJECT_ID, optional COCKPIT_VERCEL_PROJECT_MODE=shared
  • Route POST /api/cockpit-register → Cockpit speichert vercelProjectId in Meta und am Center

Manuell: Website-Management → Frontend-Kanäle (v0) oder Tab Center → Website → Aktivierung (Block „Go-Live“).

Preview vs. Live (Website-URLs)

FeldZweckUD / Go-Live
websitePublicUrlStagingv0 Preview (*.vercel.app)Nein — nur Revalidate & Verbindungstest
websitePublicUrlProductionLive-Origin (Custom Domain auf Vercel)Ja — wird nach Go-Live oft automatisch gesetzt
websitePublicUrlLegacy (Production → Staging)Abwärtskompatibel

Deploy-Register: Body environment: preview | production (Vercel: VERCEL_ENV wird mitgeschickt).
Migration: 20260601120000_add_website_url_staging_production_SAFE.sql (bestehende websitePublicUrl wird aufgeteilt, nicht gelöscht).

Center-Detail (Karte „Website-Technologie“), Vorschau- und SEO-Reiter: Links zur Live-Website nutzen dieselbe Logik — Production-URL aus Cockpit (websitePublicUrlProduction, Custom Domain oder Legacy websitePublicUrl). Ohne Eintrag: https://{center-slug}.cockpit-os.de (nicht mehr mallos-center-website.onrender.com/{slug}).

Ablauf Go-Live

  1. Custom Domain(s) im Tab Aktivierung eintragen und speichern.
  2. Hosting wählen: Cockpit-Template (Render) oder v0/Vercel; bei Vercel Projekt-ID / Modus setzen.
  3. DNS-Vorschau (Dry-Run) — zeigt geplante Schritte ohne Änderung.
  4. Go-Live ausführen — registriert Domain bei Render/Vercel, setzt DNS bei UD (addrr), prüft Status.

API (Session):

  • GET /api/centers/{centerId}/dns-status
  • POST /api/centers/{centerId}/go-live-domain — Body: { "dryRun": false, "applyUdDns": true }

AgencyOS / MCP:

  • cockpit_agencyos_dns_status
  • cockpit_agencyos_go_live_domain
  • cockpit_agencyos_register_frontend_deployment (mit vercelProjectId, vercelProjectMode)

Org Shared-Projekt (Super-Admin):

  • PATCH /api/organizations/{slug}/hosting{ "vercelSharedProjectId": "prj_…" } (slug oder Org-UUID)

Redaktion: Website live (v0 + MCP)

  1. Domain im Cockpit unter Center → Website → Aktivierung eintragen.

  2. In v0 bauen; wenn fertig im Chat (mit Cockpit-MCP):

    „Die Website ist fertig und soll live gehen. Domain: example.de — bitte UD prüfen und live schalten.“

  3. Assistent ruft cockpit_agencyos_publish_website_live auf (dryRun: true, dann false).

Im Dashboard unter Frontend-Kanäle (v0) gibt es den kopierbaren Chat-Text und einen kompakten Status (UD/DNS).

Verbindungsübersicht (Dashboard)

Im Tab Center → Website → Aktivierung und unter Website-Management → Frontend-Kanäle (v0) zeigt die Verbindungsübersicht auf einen Blick:

  • Cockpit-Website aktiv, Layout-Template, Cockpit-Preview
  • Custom Domain / DNS / SSL (Live)
  • Hosting Render vs. Vercel, Preview-URL, Live-URL
  • Auto-Update (Revalidate) nach Publish

Button Testen prüft Erreichbarkeit und Revalidate — ohne Datenbankänderung.

Abschnitt „DNS: wohin zeigt die Domain?“ (read-only, GET …/dns-status):

QuelleWas ausgelesen wird
ÖffentlichDNS-Lookup + HTTPS — zeigt z. B. auf Render oder Vercel
Vercel-APIDomain am Projekt? verified?
UD ResellingQueryDNSZoneRRList — Ist-Records vs. Soll (Render/Vercel)

Voraussetzung IT: VERCEL_API_TOKEN, UD_RESELLING_LOGIN / UD_RESELLING_PASSWORD auf dem Dashboard (Render).

Revalidate: Render (Multi-Center) vs. dedizierte v0-Live-Domain

Das Dashboard invalidiert parallel alle konfigurierten Ziele (CENTER_WEBSITE_URL + Staging/Production-URL des Centers).

ZielPfad-ModusBeispiel
Cockpit Center-Website auf Render (mallos-center-website…)/{centerSlug}/…/allen-center-trier/shops
Eigene v0/Vercel-Live-Domain (nur ein Center, Root-Routing)/shops, /news, …/shops auf alleencenter.com

Wenn die Live-Domain keine Route POST /api/revalidate mit gleichem REVALIDATION_SECRET hat, wird dieses Ziel im Log als übersprungen gemeldet — die Render-Instanz wird trotzdem aktualisiert. Für Auto-Update auf der echten Domain: Cockpit-Revalidate-Route aus dem Monorepo (apps/center-website/app/api/revalidate/route.ts) in das v0-Projekt übernehmen und Secret auf Vercel setzen.

Hinweise

  • UD-API setzt nur Records, wenn die DNS-Zone bei UD existiert (Nameserver der Domain bei UD).
  • Domains bei anderen Providern: weiterhin manuelle Anleitung im Aktivierung-Tab.
  • Apex-Domains (.de): oft A-Record statt CNAME `@ — Vercel/Render-Vorgaben aus API übernehmen.

Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /dashboard/go-live-dns-vercel-ud