feat: Docker-, Kubernetes- und Gitea-Actions-Deployment-Pipeline
Docker Image bauen und veroeffentlichen / build-and-push (push) Waiting to run

Dockerfile (Multi-Stage, "output: standalone"), docker-compose.yml mit
Caddy als einzigem nach aussen offenem Reverse-Proxy (verhindert
X-Forwarded-For-Faelschung fuer das App-eigene Rate-Limiting), Gitea
Actions Workflow der bei jedem Push zwei Image-Tags in die Gitea-
Container-Registry baut (schlankes Laufzeit-Image + ein Migrations-
Image mit Prisma-CLI), sowie rohe Kubernetes-Manifeste (Namespace,
ConfigMap, Secret-Vorlage, Postgres-/MySQL-StatefulSet, Migrations-Job,
App-Deployment, Ingress) fuer den Cluster-Betrieb. Siehe k8s/README.md
fuer den vollstaendigen Einrichtungs-/Deployment-Ablauf.
This commit is contained in:
Nick Szaunig
2026-08-17 14:30:46 +02:00
parent c7927f2883
commit 5889f58da7
15 changed files with 727 additions and 1 deletions
+37
View File
@@ -0,0 +1,37 @@
# Setzt einen bereits im Cluster laufenden Ingress-Controller voraus (z.B.
# ingress-nginx) sowie optional cert-manager fuer automatisches TLS. Host
# unten anpassen (muss zu NEXT_PUBLIC_SITE_URL in 01-configmap.yaml passen).
#
# X-Forwarded-For: ingress-nginx setzt den Header standardmaessig korrekt
# (verwirft einen vom Client mitgeschickten Wert), lib/rate-limit.ts vertraut
# genau darauf — bei einem ANDEREN Ingress-Controller/zusaetzlichen Proxy
# davor unbedingt pruefen, dass er sich genauso verhaelt, siehe Kommentar in
# lib/rate-limit.ts.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wabenhain
namespace: wabenhain
annotations:
# Nur relevant, falls cert-manager installiert ist — sonst diese beiden
# Zeilen und den "tls:"-Block unten entfernen und Host per HTTP betreiben
# oder TLS auf andere Weise terminieren.
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- shop.example.com
secretName: wabenhain-tls
rules:
- host: shop.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wabenhain-app
port:
number: 80