portainer deployment ohne monitoring - smart-village-solutions/sva-studio GitHub Wiki
Hinweis: Der Stack wurde auf Docker Swarm mit Traefik-Ingress umgestellt. Die aktuelle Referenz für den serverbasierten Betrieb ist das Swarm-Deployment-Runbook. Die folgende Anleitung beschreibt den ursprünglichen, nicht-Swarm-basierten Ansatz und dient nur noch als historische Referenz.
Diese Anleitung bringt den aktuellen Stand von sva-studio auf einen Server mit Portainer, zunächst ohne Loki, Prometheus, Grafana oder OTEL-Collector.
Der Stack besteht nur aus:
-
app(TanStack Start / Nitro Node-Server) postgresredis
Für das Deployment liegen die relevanten Dateien unter:
deploy/portainer/docker-compose.ymldeploy/portainer/Dockerfiledeploy/portainer/.env.example
Die Postgres-Initialisierung führt die SQL-Migrationen nur beim ersten Start mit leerem Daten-Volume automatisch aus. Für spätere Updates auf eine bereits bestehende Datenbank müssen neue Migrationen bewusst separat ausgeführt werden.
Für einen ersten Test- oder MVP-Rollout ist das ausreichend und deutlich robuster als ein zusätzlicher One-shot-Migrationscontainer in Portainer.
- Repo nach GitHub pushen.
- In Portainer einen Stack aus dem Git-Repository anlegen.
- Als Compose-Pfad
deploy/portainer/docker-compose.ymlverwenden. - Die Werte aus
deploy/portainer/.env.examplein die Stack-Umgebungsvariablen übernehmen und anpassen.
Pflichtwerte:
POSTGRES_PASSWORDAPP_DB_PASSWORDSVA_PUBLIC_BASE_URL-
SVA_AUTH_ISSUERnur für den historischen Single-Realm- oder lokalen Fallback-Betrieb -
SVA_AUTH_CLIENT_IDnur für den historischen Single-Realm- oder lokalen Fallback-Betrieb SVA_AUTH_CLIENT_SECRETSVA_AUTH_REDIRECT_URISVA_AUTH_POST_LOGOUT_REDIRECT_URISVA_AUTH_STATE_SECRETENCRYPTION_KEYIAM_PII_KEYRING_JSON
Für den ersten Schritt ohne Admin-Features sollten diese Flags auf false bleiben:
IAM_UI_ENABLEDIAM_ADMIN_ENABLEDIAM_BULK_ENABLEDVITE_IAM_UI_ENABLEDVITE_IAM_ADMIN_ENABLEDVITE_IAM_BULK_ENABLED
Damit sind keine Keycloak-Admin-Service-Credentials zwingend notwendig.
Für das heutige Zielmodell mit tenant-spezifischen Realms ist dieses Dokument nicht mehr ausreichend. Produktive oder Acceptance-Instanzen müssen ihre führende Auth-Konfiguration in iam.instances über authRealm und authClientId tragen; die aktuelle Referenz dafür ist das Swarm-Deployment-Runbook.
Beim ersten Deploy auf ein leeres Postgres-Volume passiert automatisch:
- Postgres wird initialisiert.
- Alle SQL-Dateien aus
packages/data/migrations/werden angewendet. - Der dedizierte Runtime-User
APP_DB_USERwird angelegt und aniam_appgebunden. - Danach startet die App.
-
appmuss in Portainer alshealthyerscheinen. -
GET /health/livemuss erfolgreich antworten. -
GET /health/readysollte Redis und Datenbank als bereit melden. -
/auth/loginsollte einen Redirect zum OIDC-Provider liefern.
Für einen reinen App-Update ohne Schemaänderungen reicht ein Redeploy des Stacks.
Wenn neue SQL-Migrationen dazugekommen sind, reicht ein normales Redeploy nicht, weil docker-entrypoint-initdb.d nur beim ersten Initialisieren des Postgres-Volumes ausgeführt wird. Dann gibt es zwei saubere Wege:
- Test-/Staging-System: Postgres-Volume bewusst neu anlegen und Stack frisch deployen.
- Bestehende Datenbank behalten: Migrationen kontrolliert manuell gegen die laufende Datenbank ausführen.
Der hier beschriebene Ansatz mit ENABLE_OTEL=false entspricht nicht mehr dem aktuellen Zielmodell fuer produktive Umgebungen. Nach heutigem Stand gilt:
- Production-Logging laeuft ueber OTEL.
- Console- und Dev-Konsole sind dort keine regulaeren Betriebswege.
- Fehlende OTEL-Readiness gilt in Production als Fehlerzustand.
Die folgende Konstellation ist daher nur noch als historische oder provisorische Bring-up-Referenz zu verstehen, nicht als aktuelle Produktionsfreigabe.
Wenn der Basis-Stack stabil läuft, kann anschließend gezielt ein zweiter Compose-Stack oder eine Erweiterung für OTEL-Collector, Loki, Prometheus und Grafana ergänzt werden, ohne die Basis-Services neu zu schneiden.