Deployment und Freigabe
DiGeKo benötigt keine bestimmte Hostingplattform. App und CMS sind getrennte Node.js-Dienste und können auf einer VM, in Containern oder auf einer Application Platform betrieben werden.
Voraussetzungen für eine eigene Produktion
- zwei HTTPS-Adressen: eine für die öffentliche App und eine für das CMS
- Node.js 24 und pnpm für die App
- Node.js 20 bis 22 und npm für das CMS
- eine MySQL-Datenbank
- einen S3-kompatiblen Medienspeicher; lokaler Upload ist im
NODE_ENV=productionabsichtlich gesperrt - einen vollständig konfigurierten TTS-Anbieter
- persistente Backups von Datenbank und Medien
App bereitstellen
- App-Repository klonen und den gewünschten Commit oder Tag auschecken.
- mindestens
NEXT_PUBLIC_CMS_URLundNEXT_PUBLIC_INFO_CATEGORY_DOCUMENT_IDsetzen; Preview-Variablen nur bei Bedarf ergänzen. pnpm install --frozen-lockfileundpnpm buildausführen.- den Build mit
pnpm starthinter einem HTTPS-Reverse-Proxy starten.
Öffentliche NEXT_PUBLIC_*-Werte werden in den Build eingebettet. Nach einer
Änderung ist deshalb ein neuer App-Build erforderlich.
CMS bereitstellen
- CMS-Repository klonen und den gewünschten Commit oder Tag auschecken.
- Strapi-Secrets, MySQL, S3, Preview und TTS über Umgebungsvariablen konfigurieren.
npm ci,npm run buildund anschließendnpm run startausführen.- optional den veröffentlichten Ausgangsdatenstand in eine frische Instanz importieren.
- Healthcheck, CMS-Anmeldung, Preview, Medienupload, TTS und App-Abruf prüfen.
Docs bereitstellen
- Docs-Repository klonen und den gewünschten Commit oder Tag auschecken.
NEXT_PUBLIC_DOCS_ENVundNEXT_PUBLIC_SITE_URLpassend zur Zielumgebung setzen.pnpm install --frozen-lockfileundpnpm buildausführen.- den Standalone-Build mit
pnpm starthinter einem HTTPS-Reverse-Proxy starten. - direkten Seitenaufruf, Navigation, Suche und Robots-Metadaten prüfen.
Umgebungsvariablen nachschlagen →
Öffentlichen Datenexport importieren →
Projektbetrieb mit Coolify
Die offiziellen DiGeKo-Umgebungen werden derzeit durch Coolify aus den
jeweiligen GitLab-Repositories gebaut. Die Docs-Ressourcen verwenden den
Build Pack Nixpacks. Nixpacks erkennt die package.json-Scripts und
erzeugt den Buildcontainer; ein Dockerfile im Repository ist dafür nicht
erforderlich. Ein Wechsel zum Dockerfile-Build-Pack wäre eine bewusste,
separate Betriebsentscheidung.
Konkrete Staging-Adressen, Deployment-Auslöser, Ressourcenkennungen, Konfigurationswerte und Eskalationskontakte stehen ausschließlich im internen Betriebshandbuch. Sie sind für Mitwirkende und für den Betrieb einer eigenen Installation nicht erforderlich.
GitLab CI prüft den Quellstand. Coolify steuert Build, Runtime-Variablen und Deployment der freigegebenen Branches.
Rollen
- Mitentwickler:innen liefern kleine, prüfbare Merge Requests, führen die relevanten Tests aus und dokumentieren Auswirkungen auf App, CMS und Docs.
- Maintainer:innen/Projektverantwortliche prüfen Merge Request und CI, nehmen das Ergebnis auf
Staging ab, entscheiden über die Freigabe nach
main, beobachten das Deployment und führen die nachgelagerte Smoke-Prüfung durch. Bei einem Fehler entscheiden sie über Abbruch, erneutes Deployment oder Rollback.
Konkrete Personen, Vertretungen und Kontaktwege werden nur im internen Betriebshandbuch gepflegt.
Reguläre Freigabe
- Mitentwickler:innen stellen abgeschlossene Änderungen im Status Abnahme
mit einem Merge Request nach
devbereit. - Maintainer:innen nehmen sie ab, mergen nach
devund verschieben die Issues nach Release. - App, CMS und Docs auf Staging bauen und die integrierten automatischen und manuellen Prüfungen durchführen.
- Zum vorgesehenen Release-Zeitpunkt Merge Requests von
devnachmainerstellen. - Bei gekoppelten Änderungen zuerst CMS, dann App, zuletzt Docs deployen.
- Produktions-Smoke-Test durchführen und veröffentlichte Issues schließen.
- Projekt-Release mit den tatsächlich eingesetzten Komponentenständen dokumentieren.
Docs werden zuletzt veröffentlicht, damit digeko.de keine noch nicht
produktive Funktion beschreibt.
Zusammenspiel von App und CMS
App und CMS bilden je Zielumgebung ein festes Paar. Die App lädt veröffentlichte
Inhalte aus dem über CMS_URL beziehungsweise NEXT_PUBLIC_CMS_URL
zugeordneten CMS. Für die Vorschau verweist das CMS über
PREVIEW_FRONTEND_URL zurück auf die zugehörige App. Konfigurationen von
Staging und Produktion dürfen nicht miteinander gekreuzt werden.
Content Preview und Sicherheitsgrenze →
Healthcheck und Smoke-Prüfung
Ein technischer Healthcheck prüft ohne Anmeldung, ob der jeweilige Prozess über HTTPS erreichbar ist und mit dem erwarteten erfolgreichen HTTP-Status oder einer vorgesehenen Weiterleitung antwortet. Er ersetzt keine fachliche Smoke-Prüfung.
Nach jedem Deployment werden mindestens diese Punkte geprüft:
| System | Kurze Smoke-Prüfung |
|---|---|
| App | Startseite öffnen, Kategorie und Story aufrufen, Sprache wechseln und kontrollieren, ob Inhalte und Medien geladen werden. |
| CMS | Admin-Anmeldung öffnen und über die öffentliche API prüfen, dass veröffentlichte Inhalte, aber keine Entwürfe ausgeliefert werden. |
| Preview | Einen gespeicherten Entwurf aus dem zugehörigen CMS in der App öffnen und die Vorschau wieder verlassen. |
| Docs | Startseite und einen direkten Unterseiten-Link öffnen sowie Navigation und Suche stichprobenartig prüfen. |
Bei Änderungen an Medien, TTS, Datenmodell oder Deploymentkonfiguration werden die betroffenen Pfade zusätzlich geprüft. Wiederkehrende Laufzeitfehler in den Logs, fehlerhafte Abhängigkeiten oder nicht passende Komponentenstände machen das Deployment nicht freigabefähig.
Branch-Schutz
main und dev werden gegen direkte Pushes und Force Push geschützt. Änderungen
laufen über Merge Requests und benötigen eine grüne relevante CI. Produktion
wird ausschließlich aus main, Staging ausschließlich aus dev gebaut.
Hotfix
Ein Produktions-Hotfix zweigt von main ab, wird nach Prüfung dorthin
zurückgeführt und anschließend auch nach dev übernommen. Betroffene
Dokumentation folgt demselben Weg.
Rollback
Ein Code-Rollback verwendet den letzten nachweislich funktionierenden Commit, Tag oder dokumentierten Release-Stand:
- fehlerhaften Stand und beobachtete Auswirkungen festhalten;
- letzten funktionierenden Stand mit unveränderter Zielkonfiguration erneut bauen und bereitstellen;
- bei gekoppelten Änderungen die Reihenfolge CMS, App und zuletzt Docs beachten;
- Healthcheck und Smoke-Prüfung vollständig wiederholen;
- Korrektur anschließend wieder in die regulären Branches übernehmen.
Ein Code-Rollback setzt weder Inhalte noch Datenbank, Medien oder Konfigurationszustände zurück. Schema- und Datenänderungen benötigen deshalb vor der Freigabe einen getrennten Rückweg. Die konkrete Sicherung und Wiederherstellung der offiziellen Umgebungen ist Teil des internen Betriebshandbuchs und wird nicht öffentlich beschrieben.