Commit Graph
20 Commits
Author SHA1 Message Date
Nick SzaunigandClaude Opus 5.5 b4eafbe433 feat: Google-Rezensionen ueber Places API (New) abrufen
Muster wie Wabenhain (Feldmaske, 1 h Cache, 5 s Timeout, Schluessel im
Header). Ohne Konfiguration oder bei Fehler null, keine Ersatz-Stimmen.
Keine Profilbilder (kein IP-Transfer der Besucherinnen an Google),
Quellenlinks nur als https. Neue Variablen GOOGLE_PLACES_API_KEY und
GOOGLE_PLACE_ID in .env.example und Secret-Vorlage.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 17:30:30 +02:00
Nick SzaunigandClaude Opus 5.5 66247cfbf9 fix(security): NetworkPolicy vor der App wieder aktiv (Traefik in kube-system)
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m53s
Traefik laeuft im Cluster in kube-system ohne Host-Netzwerk (geprueft).
Die App ist damit nur noch fuer Traefik-Pods aus kube-system erreichbar
(Namespace + Label), was die Umgehung der Login-/2FA-Rate-Limits per
gefaelschtem X-Real-Ip aus anderen Pods verhindert.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 11:34:36 +02:00
Nick SzaunigandClaude Opus 5.5 67cdddc33f docs: Betriebsdoku auf neue k8s-Dateinamen und Pod-Security-Stufe
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m57s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 11:26:29 +02:00
Nick SzaunigandClaude Opus 5.5 a0ba921d19 refactor(k8s): Aufbau wie Wabenhain/ApiCore, Zertifikat funktionsfaehig
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 3m2s
- Dateinamen nach Wabenhain-Schema (01-configmap, 02-secret,
  03-storage, 04-postgres, 05-app-deployment, 06-ingress,
  07-worker-cronjob, 08-networkpolicy); Secret-Vorlage als
  02-secret.yaml.example, echte 02-secret.yaml gitignored.
- Namespace: Pod Security "baseline" erzwungen, "restricted" als warn/audit.
  "restricted" kann den HTTP-01-Solver-Pod von cert-manager abweisen und
  damit die Zertifikatsausstellung blockieren.
- NetworkPolicy nur noch fuer PostgreSQL; keine Policy vor der App (wie
  Wabenhain/ApiCore), da sie bei Traefik im Host-Netzwerk die Seite sperrt.
- README: kompletter Neuaufbau inkl. Freigabe der Retain-PVs nach
  "kubectl delete namespace", Zertifikats-Diagnose.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 11:26:13 +02:00
Nick SzaunigandClaude Opus 5.5 d813d56514 fix(security): NetworkPolicy der App an Namespace und Label binden
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m52s
Nur Label-Abgleich ueber alle Namespaces liess jeden Pod mit Label
app.kubernetes.io/name=traefik zu. Jetzt muss zusaetzlich der Namespace
traefik oder kube-system sein (Namespace-Namen sind nicht faelschbar).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 11:02:22 +02:00
Nick SzaunigandClaude Opus 5.5 9c7d2d02a2 docs(k8s): Deployment Schritt fuer Schritt wie bei Wabenhain
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m53s
Voraussetzungen pruefen (Traefik, cert-manager, csi-driver-smb),
Einzel-Applies in Reihenfolge mit kubectl wait auf Postgres,
Fehlersuche fuer Migration, App und Zertifikat.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 06:33:47 +02:00
Nick SzaunigandClaude Opus 5.5 cddc36bee8 feat(k8s): Ingress, Zertifikat und Netzwerk nach Muster Wabenhain/ApiCore
- Ingress: HTTP->HTTPS-Middleware redirect-to-https wieder am Ingress
  (wie Wabenhain), Service-Port als Nummer, cert-manager letsencrypt-prod.
- NetworkPolicy: Traefik ueber das Pod-Label (traefik/rke2-traefik) in
  jedem Namespace erkannt statt fester Namespace "traefik" - verhindert,
  dass die Seite unerreichbar wird, wenn Traefik z. B. in kube-system laeuft.
- README: Voraussetzungen pruefen und Deployment Schritt fuer Schritt
  (kubectl wait auf Postgres) wie bei Wabenhain.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 06:33:22 +02:00
Nick SzaunigandClaude Opus 5.5 b9d6f089c9 fix(docker): Prisma-Schema-Engine und OpenSSL im Tools-Image
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 4m31s
Der Migrations-initContainer scheiterte: "pnpm install --ignore-scripts"
ueberspringt das postinstall von @prisma/engines, das die Schema-Engine
fuer "prisma migrate deploy" herunterlaedt. Der Builder holt das jetzt mit
"pnpm rebuild @prisma/engines prisma" nach. Zusaetzlich openssl in der
Basisstufe, weil die Engine unter Alpine libssl braucht.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 02:28:51 +02:00
Nick SzaunigandClaude Opus 5.5 32a5b8eb9d fix(security): Haertung der minimalen k8s-Manifeste wiederhergestellt
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m24s
Befunde des Commit-Security-Reviews: automountServiceAccountToken: false
fuer Postgres, App und Worker; Speicherlimits fuer Migrations-initContainer
und Worker; Laufzeitgrenze (activeDeadlineSeconds) fuer den Worker;
Groessenlimits fuer die emptyDir-Volumes.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 01:15:55 +02:00
Nick SzaunigandClaude Opus 5.5 91791b791f refactor(k8s): minimale, flache Manifeste zum Kopieren
Kustomize-Struktur (base/overlays) entfernt. Stattdessen nummerierte
Einzeldateien, ausrollbar mit "kubectl apply -f k8s/":
00-namespace, 01-config, 02-storage (SMB-PVs/PVCs Postgres + Medien),
03-postgres (StatefulSet + Service), 04-app (Deployment mit
Migrations-initContainer + Service), 05-ingress, 06-worker,
07-networkpolicy. Secrets als secrets.yaml.example (echte secrets.yaml
ist gitignored). Images mit Tag latest aus der Gitea-Pipeline.
Kurzanleitung in k8s/README.md, Betriebsdoku angepasst.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 01:12:26 +02:00
Nick SzaunigandClaude Opus 5.5 c84eb1e740 refactor(k8s): schlanker Umfang, Postgres und Medien auf SMB
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m17s
Auf Wunsch des Betreibers auf das Noetige reduziert: StatefulSet
PostgreSQL, Services, Ingress, App-Deployment, zwei SMB-PersistentVolumes
(Postgres-Daten, Medien). Beibehalten nach Absprache: Worker-CronJob
(Folgeraten, Reservierungsfreigabe, Mail-Wiederholung), ConfigMap und die
NetworkPolicies (Sicherheitsbefund Rate-Limit-Umgehung).

- Migration als initContainer im App-Deployment statt eigenem Job
- Entfernt: Backup-CronJob/-Volume (NAS sichert die Freigabe),
  Migrations-CronJob, PodDisruptionBudget, HTTP-Redirect-Ingress und
  Middleware, Namespace-Objekt (einmalig von Hand anzulegen)
- PostgreSQL auf SMB als bewusste, dokumentierte Ausnahme mit
  hard, cache=strict, SMB 3.1.1 + seal, uid 70 / 0700

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:36:30 +02:00
Nick SzaunigandClaude Opus 5.5 974c403a8b docs: SMB-Verschluesselung und Rechte der Volumes beschrieben
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m39s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:14:58 +02:00
Nick SzaunigandClaude Opus 5.5 7a60af9cd4 fix(security): SMB-Volumes verschluesselt und minimal berechtigt
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m40s
Befunde des Commit-Security-Reviews behoben:
- Klartextuebertragung: vers=3.1.1 mit "seal" (SMB3-Verschluesselung)
  fuer Medien- und Backup-Volume.
- Rueckschritt Zugriffskontrolle: Backup-PV/PVC wieder ReadWriteOnce statt
  ReadWriteMany (nur der Backup-Job haengt es ein).
- Zu weite Rechte: Medien-Volume nur lesbar (dir_mode 0550, file_mode
  0440); geschrieben wird ausschliesslich ueber das NAS.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:14:44 +02:00
Nick SzaunigandClaude Opus 5.5 a7c11ccbd0 docs: Einrichtung der SMB-Volumes im Betriebshandbuch
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m50s
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:11:20 +02:00
Nick SzaunigandClaude Opus 5.5 24939b58d5 feat: SMB-PersistentVolumes fuer Medien und Datenbank-Sicherungen
Statische PVs ueber csi-driver-smb (smb.csi.k8s.io), fest an die PVCs
artista-modelcamp-media (App liest, uid 1001) und
artista-modelcamp-db-backup (pg_dump-Job, uid 70, 0700/0600) gebunden,
reclaimPolicy Retain. Zugang ueber Secret artista-modelcamp-smb.
Das PostgreSQL-Datenverzeichnis bleibt bewusst auf Blockspeicher
(SMB erfuellt dessen Sperr- und fsync-Anforderungen nicht, Briefing §13);
die Datenbank landet ueber die taeglichen Dumps trotzdem auf dem NAS.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 20:11:04 +02:00
Nick SzaunigandClaude Opus 5.5 95e3733ab8 refactor: Kubernetes-Ressourcen und Images heissen artista-modelcamp
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m19s
Alle Ressourcen tragen den Praefix artista-modelcamp- im Namespace
artista; Images <owner>/artista-modelcamp und
<owner>/artista-modelcamp-tools. DATABASE_URL-Host, Backup-Host,
Traefik-Middleware-Referenz und Betriebsdoku entsprechend angepasst.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 14:38:37 +02:00
Nick SzaunigandClaude Opus 5.5 f9349144ea refactor: Kubernetes-Ressourcen und Images heissen artista-filmcamp
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 4m39s
Alle Ressourcen tragen den Praefix artista-filmcamp- (Deployment,
Service, StatefulSet, CronJobs, PVCs, ConfigMap, Secret, Ingress,
NetworkPolicies, Middleware) und liegen im Namespace artista. Die Images
heissen wieder <owner>/artista-filmcamp und <owner>/artista-filmcamp-tools,
passend zum Repo. DATABASE_URL-Host, Backup-Host und Betriebsdoku
entsprechend angepasst.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 14:15:12 +02:00
Nick SzaunigandClaude Opus 5.5 c18c628131 fix: Image-Namen auf artista-modelcamp statt Repo-Namen "Filmcamp"
Die Pipeline leitete den Image-Namen vom Repo "Artista-Filmcamp" ab. Das
Produkt ist das ARTISTA MODELCAMP 2027: Images heissen jetzt fest
<owner>/artista-modelcamp und <owner>/artista-modelcamp-tools, passend zu
Overlay und Betriebsdoku.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 13:26:29 +02:00
Nick SzaunigandClaude Opus 5.5 771eeee887 fix: Admin-Routen nicht vorab rendern (Docker-Build ohne Secrets)
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 4m25s
next build versuchte /admin statisch zu rendern. currentAdmin() rief dabei
getAuth() vor headers() auf und scheiterte ohne BETTER_AUTH_SECRET im
Build-Container. Jetzt werden zuerst die Request-Header gelesen, wodurch
alle Admin-Routen dynamisch sind und Auth erst zur Laufzeit geladen wird.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-27 12:42:25 +02:00
Nick Szaunig 59bb5a38a3 first commit
Docker-Images bauen und veroeffentlichen / build-and-push (push) Failing after 1m32s
2026-09-27 06:06:56 +02:00