Eine Seite mit Gitea CI und ArgoCD ausliefern
Die Deploy-Pipeline hinter dieser Seite: einmal bauen, aus Git synchronisieren, zwei Domains auf einen Service routen.
Diese Seite läuft auf einem selbstgehosteten Kubernetes-Cluster. Das Deployment ist bewusst langweilig — langweilig ist genau das, was man um 2 Uhr nachts will.
Die Pipeline
Ein Push auf main startet einen Gitea-Actions-Workflow:
- Abhängigkeiten installieren, die Next.js-App bauen
- ein Standalone-Container-Image bauen
- es mit
sha-<short>undlatesttaggen, in die Registry pushen
Auf dem Cluster wird kein Image gebaut. Das Build-Artefakt ist immutable und über den Commit content-adressiert.
Die Synchronisation
ArgoCD beobachtet das k8s/-Verzeichnis in diesem Repo. Ändert sich das
Deployment-Manifest — oder ein Mensch erhöht den Image-Tag — gleicht ArgoCD den
Cluster an Git an. selfHeal macht manuellen Drift rückgängig, prune entfernt
gelöschte Ressourcen.
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
Zwei Domains, ein Service
Traefik terminiert TLS für beide Domains taha.moujtahid.com und
taha.mjthd.com, mit Zertifikaten von cert-manager gegen Let's Encrypt. Beide
Hosts zeigen auf denselben ClusterIP-Service — es läuft genau eine App.
Das Ergebnis: Code schreiben, pushen, und die Änderung ist in ein paar Minuten live — mit einem Zertifikat, das sich selbst erneuert.