refactor: Kubernetes-Ressourcen und Images heissen artista-filmcamp
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 4m39s
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]>
This commit is contained in:
1 parent
c18c628131
commit
f9349144ea
11 files changed
+73
-73
No files matched your search
+12
-12
@@ -16,8 +16,8 @@ Ein Release entsteht dann so: `git tag v0.1.0 && git push origin v0.1.0`, anschl
|
||||
**Manuell:**
|
||||
|
||||
```bash
|
||||
docker build --target runner -t git.encry.de/nick.rosenloecher/artista-modelcamp:0.1.0 .
|
||||
docker build --target tools -t git.encry.de/nick.rosenloecher/artista-modelcamp-tools:0.1.0 .
|
||||
docker build --target runner -t git.encry.de/nick.rosenloecher/artista-filmcamp:0.1.0 .
|
||||
docker build --target tools -t git.encry.de/nick.rosenloecher/artista-filmcamp-tools:0.1.0 .
|
||||
docker push … # beide Images, immer mit identischem Tag
|
||||
```
|
||||
|
||||
@@ -35,8 +35,8 @@ Der Build braucht Internet für `next/font` (Schriften werden eingebettet), aber
|
||||
5. **Migration** (siehe Abschnitt 3), danach das erste Admin-Konto:
|
||||
```bash
|
||||
kubectl -n artista run admin-create --rm -it --restart=Never --labels=artista/db-client=true \
|
||||
--image=git.encry.de/nick.rosenloecher/artista-modelcamp-tools:0.1.0 \
|
||||
--overrides='{"spec":{"containers":[{"name":"admin-create","image":"git.encry.de/nick.rosenloecher/artista-modelcamp-tools:0.1.0","command":["tsx","scripts/create-admin.ts","--email","[email protected]","--name","Dein Name"],"envFrom":[{"configMapRef":{"name":"artista-config"}},{"secretRef":{"name":"artista-secrets"}}]}]}}'
|
||||
--image=git.encry.de/nick.rosenloecher/artista-filmcamp-tools:0.1.0 \
|
||||
--overrides='{"spec":{"containers":[{"name":"admin-create","image":"git.encry.de/nick.rosenloecher/artista-filmcamp-tools:0.1.0","command":["tsx","scripts/create-admin.ts","--email","[email protected]","--name","Dein Name"],"envFrom":[{"configMapRef":{"name":"artista-filmcamp-config"}},{"secretRef":{"name":"artista-filmcamp-secrets"}}]}]}}'
|
||||
```
|
||||
Das einmalige Passwort wird ausgegeben. Bei der ersten Anmeldung unter `/admin` wird die 2FA eingerichtet.
|
||||
|
||||
@@ -47,10 +47,10 @@ Der Build braucht Internet für `next/font` (Schriften werden eingebettet), aber
|
||||
kubectl apply -k k8s/overlays/production
|
||||
# 2. Migration bewusst starten und abwarten
|
||||
JOB=migrate-$(date +%Y%m%d%H%M)
|
||||
kubectl -n artista create job $JOB --from=cronjob/artista-migrate
|
||||
kubectl -n artista create job $JOB --from=cronjob/artista-filmcamp-migrate
|
||||
kubectl -n artista wait --for=condition=complete job/$JOB --timeout=5m
|
||||
# 3. Rollout beobachten
|
||||
kubectl -n artista rollout status deploy/artista-app
|
||||
kubectl -n artista rollout status deploy/artista-filmcamp-app
|
||||
```
|
||||
|
||||
Migrationen sind vorwärtskompatibel zu schreiben (erst Spalten ergänzen, später entfernen), damit alte und neue Pods während des Rollouts parallel laufen können.
|
||||
@@ -71,7 +71,7 @@ Migrationen sind vorwärtskompatibel zu schreiben (erst Spalten ergänzen, spät
|
||||
|
||||
## 6. Worker
|
||||
|
||||
Der CronJob `artista-worker` läuft alle 10 Minuten und kümmert sich um:
|
||||
Der CronJob `artista-filmcamp-worker` läuft alle 10 Minuten und kümmert sich um:
|
||||
- abgelaufene Reservierungen, vorher mit Rückfrage bei Stripe
|
||||
- hängende Einzüge
|
||||
- fällige Raten
|
||||
@@ -83,18 +83,18 @@ Ein fehlgeschlagener Lauf erscheint als fehlgeschlagener Job (`kubectl -n artist
|
||||
|
||||
## 7. Sicherung und Wiederherstellung
|
||||
|
||||
- **Sicherung:** Der CronJob `artista-db-backup` erstellt täglich um 3:15 Uhr einen Dump im `pg_dump`-Custom-Format nach `artista-db-backup` und bewahrt ihn 30 Tage auf.
|
||||
- **Sicherung:** Der CronJob `artista-filmcamp-db-backup` erstellt täglich um 3:15 Uhr einen Dump im `pg_dump`-Custom-Format nach `artista-filmcamp-db-backup` und bewahrt ihn 30 Tage auf.
|
||||
- **Aus dem Cluster sichern (regelmäßig):**
|
||||
```bash
|
||||
POD=$(kubectl -n artista get pod -l app.kubernetes.io/name=artista-postgres -o name | head -1)
|
||||
POD=$(kubectl -n artista get pod -l app.kubernetes.io/name=artista-filmcamp-postgres -o name | head -1)
|
||||
kubectl -n artista exec $POD -- pg_dump -U artista -d artista --format=custom > artista-$(date +%F).dump
|
||||
```
|
||||
- **Wiederherstellen:**
|
||||
1. App stoppen: `kubectl -n artista scale deploy/artista-app --replicas=0` und den Worker-CronJob pausieren: `kubectl -n artista patch cronjob artista-worker -p '{"spec":{"suspend":true}}'`
|
||||
1. App stoppen: `kubectl -n artista scale deploy/artista-filmcamp-app --replicas=0` und den Worker-CronJob pausieren: `kubectl -n artista patch cronjob artista-filmcamp-worker -p '{"spec":{"suspend":true}}'`
|
||||
2. Einspielen: `kubectl -n artista exec -i $POD -- pg_restore -U artista -d artista --clean --if-exists < artista-YYYY-MM-DD.dump`
|
||||
3. Migration laufen lassen (Abschnitt 3), App wieder hochskalieren, Worker fortsetzen.
|
||||
4. Abgleich: Zahlungen, die nach dem Sicherungszeitpunkt eingingen, im Stripe-Dashboard prüfen. Stripe stellt Webhooks bis zu drei Tage erneut zu (Dashboard → Webhooks → „Erneut senden“).
|
||||
- **Medien:** Das Volume `artista-media` separat sichern, z. B. mit Volume-Snapshots oder der Sicherung des Speichersystems.
|
||||
- **Medien:** Das Volume `artista-filmcamp-media` separat sichern, z. B. mit Volume-Snapshots oder der Sicherung des Speichersystems.
|
||||
- **Wiederherstellung üben:** mindestens einmal vor dem Live-Verkauf in einen Test-Namespace.
|
||||
|
||||
## 8. Stornierung und Erstattung
|
||||
@@ -108,7 +108,7 @@ Die Software trifft keine Storno-Entscheidung, sie setzt sie nur nachvollziehbar
|
||||
|
||||
## 9. Medien
|
||||
|
||||
Dateien (jpg, png, webp, avif, mp4, webm) in das Volume `artista-media` kopieren:
|
||||
Dateien (jpg, png, webp, avif, mp4, webm) in das Volume `artista-filmcamp-media` kopieren:
|
||||
|
||||
```bash
|
||||
kubectl -n artista cp villa-aussen.jpg <app-pod>:/app/media/villa-aussen.jpg # Volume ist im App-Pod read-only → einen Hilfs-Pod mit Schreibzugriff nutzen
|
||||
|
||||
Reference in new issue
Block a user