-
Notifications
You must be signed in to change notification settings - Fork 0
Deployment
Es gibt drei Umgebungen; die vollständigen Befehle stehen in RUNBOOK.md im
Repository-Root. Diese Seite fasst die Grundzüge zusammen.
| Dev | Test | Prod | |
|---|---|---|---|
| Wo | dieser Server | eigener Test-Server | eigener Prod-Server |
| Domain | hocx.example.com | test.hocx.ch | hocx.ch |
| Code-Quelle | lokal, build: aus Source |
Docker-Image von GHCR | Docker-Image von GHCR |
- Änderungen werden auf
maingemerged. - Auf GitHub den manuellen Workflow
Build test candidate imagesstarten und dabei in der Actions-UI den gewuenschten Branch/Tag waehlen (typischerweisemain). Der Workflow baut automatisch den neuesten Commit dieses Refs und erzeugt selbst einen eindeutigen Candidate-Tag wietest-20260825-abc1234-r42. - Auf dem Test-Host in
.envHOCX_VERSIONauf genau diesen Candidate-Tag setzen und./scripts/deploy.sh testausfuehren. Das Skript macht automatisch: DB-Backup → Images pullen → Neustart (Alembic migriert automatisch) → Smoke-Checks fuer Backend, Frontend, Abgabebox, Docs und ClamAV. - Direkt danach
./scripts/verify_release.sh testausfuehren. Das prueft die lokalen Services, Alembic-Head und die externen Traefik-Domains. - Wenn Test gruen ist, auf GitHub den manuellen Workflow
Promote tested release imagesstarten:source_tag=<candidate>,release_tag=vX.Y.Z. Dieser Schritt baut nicht neu, sondern setzt den finalen Release-Tag auf dasselbe bereits getestete Image. - Auf dem Prod-Server in
.envHOCX_VERSION=vX.Y.Zsetzen,./scripts/deploy.sh prodund danach./scripts/verify_release.sh prodausfuehren. - Optional danach ein GitHub-Release fuer Changelog/Release Notes erstellen. Das ist ab jetzt rein dokumentarisch und triggert keinen zweiten Image-Build mehr.
Warnung – DNS vor Stack-Start setzen: Traefik holt beim ersten Start sofort ein Let's-Encrypt-Zertifikat. Zeigt die Domain noch nicht auf den Server, zählt ein Fehlversuch gegen Let's Encrypts Rate-Limit (5 Fehlversuche/Domain/Stunde). Bei einer neuen Domain daher immer erst den DNS-Eintrag setzen, dann den Stack starten.
Warnung – riskante Schema-Änderungen über zwei Releases: Spalten umbenennen, löschen oder Typen ändern immer in zwei Schritten ausrollen (Release A: neue Spalte hinzufügen und befüllen; Release B: alte Spalte entfernen). So bleibt jeder Schritt rückwärtskompatibel und ein Rollback ohne Backup-Restore möglich.
Für lokales Entwickeln mit Hot-Reload wird ein eigener Overlay verwendet:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --buildAlternativ stehen die Wrapper-Befehle ./scripts/dev.sh, ./scripts/dev.sh stop,
./scripts/dev.sh down und ./scripts/dev.sh up --profile docs --profile scan zur
Verfügung. Optionale Profile sind scan für ClamAV, docs für die Dokumentation auf
localhost:3002 und edge für lokalen Traefik.
Hinweis: Test und Produktion nutzen denselben Release-Stack. Der dedizierte Test-Host läuft mit denselben Release-Compose-Dateien wie Produktion (
docker-compose.release.yml+ ClamAV + Traefik). Unterschiede ergeben sich nur aus.env,PROJECT_NAME(hocx-testbzw.hocx) und dem gepinntenHOCX_VERSION-Tag.
HOCX_VERSION in .env auf die vorherige Version setzen und erneut deployen. Bei
destruktiven Schema-Änderungen (Spalte gelöscht/Typ geändert) reicht ein
Code-Rollback nicht – zusätzlich muss das vor dem Update gezogene Backup eingespielt
werden.
- Startseite
-
Entwicklerdokumentation
- Entwickler-Onboarding
- Architektur
- Big Picture
- Code-Architektur
- API-Konventionen
- Datenbank und Migrationen
- Platform-Admin-Panel
- Mandanten-Export und -Import
- Testprozess
- Konfiguration
- Debugging und Observability
- Beitragen und Qualität
- Dokumentationspflege
- Deployment-Runbook
- Sicherheit
- Bekannte offene Punkte