Der Weg vom Job-Container zur oeffentlichen Domain ist auf dem VPS zu:
Gitea laeuft auf demselben Host, das Paket geht an die oeffentliche IP
und findet nicht zurueck (NAT-Hairpin). Der Umweg ueber host-gateway
scheitert zusaetzlich an der Firewall (curl: Connection timed out).
actions/checkout bekommt daher github-server-url auf die interne Adresse.
Der Job-Container haengt im Netz gitea-ci und erreicht Gitea dort unter
seinem Containernamen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bestehende App plus Gitea-Actions-Pipeline: Tag v* loest Build, Tests
und Container-Neustart auf dem VPS aus.
- .gitea/workflows/deploy.yml: npm ci/build/test als Gate, danach
docker compose up -d --build. Die .env wird aus dem Repo-Secret DOTENV
erzeugt, damit auf dem Host keine Secret-Datei gepflegt werden muss.
- docker-compose.yml: fester Projektname (der CI-Job hat ein anderes
Arbeitsverzeichnis als der Host), Image mit Versionstag fuer Rollback,
fester Volume-Name.
- README: Deployment- und Rollback-Abschnitt, Token-Rotation angepasst.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>