Reorganised deployment scripts and added rollback functionality. Updated documentation and workflow for container image builds.
Test and publish container images / test (push) Successful in 2m50s
Test and publish container images / publish (push) Failing after 54s

This commit is contained in:
BuTzZ
2026-07-25 12:36:35 +02:00
parent 12eee8d211
commit c9a20aacd7
17 changed files with 642 additions and 73 deletions
+24 -9
View File
@@ -68,9 +68,17 @@ Die produktive Infrastruktur besteht aus einem Hetzner-Server, einer festen
IPv4, Firewall und einem persistenten Volume. Der Docker-Stack enthält nur die
App, Nginx/Certbot und den Wartungscontainer für Deutschland- und
Niederlande-Routendaten; Kartenkacheln werden nicht selbst gehostet.
Gitea Actions testet jeden Stand und veröffentlicht App und
Routingdaten-Builder für Commits auf `main` als Container-Images. Der
Produktionsserver klont keinen Quellcode und baut keine Anwendung.
Die beiden lokalen, von Git ignorierten Konfigurationsdateien sind bereits
angelegt:
Die beiden lokalen, von Git ignorierten Konfigurationsdateien werden aus ihren
Vorlagen angelegt:
```bash
cp infra/opentofu/terraform.tfvars.example infra/opentofu/terraform.tfvars
cp deploy/.env.production.example deploy/.env.production
```
- `infra/opentofu/terraform.tfvars`: hier den Hetzner-Cloud-Read/Write-Token
eintragen und `admin_cidrs` bei Bedarf auf die aktuelle öffentliche IP
@@ -89,19 +97,26 @@ tofu output server_ipv4
cd ../..
```
Sobald `server_ipv4` ausgegeben wurde, kann der manuelle DNS-A-Record
Vor dem ersten Deployment müssen Gitea Actions, ein Docker-fähiger Runner sowie
die Action-Secrets `REGISTRY_USERNAME` und `REGISTRY_TOKEN` eingerichtet sein.
Der Token benötigt Schreibzugriff auf Packages. Sobald `server_ipv4` ausgegeben
wurde, kann der manuelle DNS-A-Record
`watermaps.incoso.eu` auf diese IPv4 gesetzt werden. Das erste Deployment darf
bereits vor der DNS-Propagation laufen:
bereits vor der DNS-Propagation laufen, sobald die Action die Images des
aktuellen Commits veröffentlicht hat:
```bash
./deploy/scripts/upload-and-deploy.sh \
WATERMAPS_REGISTRY_USERNAME=kevin_janssen \
WATERMAPS_REGISTRY_TOKEN='<read-only-package-token>' \
./deploy/scripts/upload-and-deploy.sh \
--identity ~/.ssh/watermaps_hetzner_ed25519
```
Dabei werden die vollständigen Geofabrik-Extrakte für Deutschland und die
Niederlande auf dem persistenten Server-Volume geladen und der lokale
Routingindex erstellt. Vor dem SSL-Livegang liefert Port 80 außer
ACME-Challenges nur 404.
Der Registry-Token wird nur an `docker login --password-stdin` übertragen und
nicht Teil der Projektkonfiguration. Das Skript überträgt ausschließlich die
Deployment-Dateien. Der Server zieht die commitgenauen Images, fixiert deren
Digests und lädt beim ersten Start die Geofabrik-Extrakte auf das persistente
Volume. Vor dem SSL-Livegang liefert Port 80 außer ACME-Challenges nur 404.
Erst wenn der DNS-A-Record propagiert ist, wird HTTPS mit dem finalen manuellen
Befehl aktiviert: