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):
| Variable | Zweck |
|---|---|
RENDER_API_KEY + RENDER_FRONTEND_SERVICE_ID | Cockpit-Template auf Render |
VERCEL_API_TOKEN | optional VERCEL_TEAM_ID |
UD_RESELLING_LOGIN + UD_RESELLING_PASSWORD | DNS bei United Domains / domainreselling.de |
COCKPIT_DISABLE_DNS_PROVIDER_WRITE=1 | Notfall: 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
| Modus | Speicherort | Wann |
|---|---|---|
| Dedicated (1 Center = 1 Projekt) | ShoppingCenter.vercelProjectId | Standard v0 pro Center |
| Shared (Multi-Center, ein Layout) | Organization.vercelSharedProjectId + vercelProjectMode=shared | Teil G / ein Vercel-Projekt |
Automatisch beim Deploy-Register:
- Vercel Env:
VERCEL_PROJECT_ID, optionalCOCKPIT_VERCEL_PROJECT_MODE=shared - Route
POST /api/cockpit-register→ Cockpit speichertvercelProjectIdin Meta und am Center
Manuell: Website-Management → Frontend-Kanäle (v0) oder Tab Center → Website → Aktivierung (Block „Go-Live“).
Preview vs. Live (Website-URLs)
| Feld | Zweck | UD / Go-Live |
|---|---|---|
websitePublicUrlStaging | v0 Preview (*.vercel.app) | Nein — nur Revalidate & Verbindungstest |
websitePublicUrlProduction | Live-Origin (Custom Domain auf Vercel) | Ja — wird nach Go-Live oft automatisch gesetzt |
websitePublicUrl | Legacy (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
- Custom Domain(s) im Tab Aktivierung eintragen und speichern.
- Hosting wählen: Cockpit-Template (Render) oder v0/Vercel; bei Vercel Projekt-ID / Modus setzen.
- DNS-Vorschau (Dry-Run) — zeigt geplante Schritte ohne Änderung.
- Go-Live ausführen — registriert Domain bei Render/Vercel, setzt DNS bei UD (
addrr), prüft Status.
API (Session):
GET /api/centers/{centerId}/dns-statusPOST /api/centers/{centerId}/go-live-domain— Body:{ "dryRun": false, "applyUdDns": true }
AgencyOS / MCP:
cockpit_agencyos_dns_statuscockpit_agencyos_go_live_domaincockpit_agencyos_register_frontend_deployment(mitvercelProjectId,vercelProjectMode)
Org Shared-Projekt (Super-Admin):
PATCH /api/organizations/{slug}/hosting—{ "vercelSharedProjectId": "prj_…" }(slug oder Org-UUID)
Redaktion: Website live (v0 + MCP)
-
Domain im Cockpit unter Center → Website → Aktivierung eintragen.
-
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.“
-
Assistent ruft
cockpit_agencyos_publish_website_liveauf (dryRun: true, dannfalse).
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):
| Quelle | Was ausgelesen wird |
|---|---|
| Öffentlich | DNS-Lookup + HTTPS — zeigt z. B. auf Render oder Vercel |
| Vercel-API | Domain am Projekt? verified? |
| UD Reselling | QueryDNSZoneRRList — 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).
| Ziel | Pfad-Modus | Beispiel |
|---|---|---|
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