Some checks failed
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Failing after 43s
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Failing after 41s
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Failing after 1m59s
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Failing after 43s
Added a detailed session log explaining the replacement of `socat` with `iptables` DNAT for internal Gitea registry access in the pipeline. Updated `.gitea/workflows/docker-publish.yaml` to reflect the new approach, eliminating the need for additional packages on minimal runners.
2.9 KiB
2.9 KiB
| type | status | owner | date |
|---|---|---|---|
| journal | ACTIVE | Lead Architect | 2026-03-06 |
Session Log — Pipeline Fix v3: socat nicht verfügbar → iptables DNAT
Datum: 06.03.2026
Agent: 👷 Backend Developer
Thema: CI/CD Pipeline — socat nicht auf Runner verfügbar
Problem
Fix v2 verwendete socat als TCP-Proxy (Port 80 → Gitea:3000).
Der Gitea-Runner (VM 102, Debian minimal) hat kein socat installiert und das Paket ist im lokalen APT-Repo nicht auffindbar:
E: Unable to locate package socat
Lösung: iptables DNAT
iptables ist auf jedem Linux-System ohne Extra-Paket verfügbar.
DNAT (Destination NAT) leitet Verbindungen auf Kernel-Ebene um — kein Userspace-Proxy nötig.
- name: Registry intern auflösen (Pangolin-Bypass)
run: |
echo "10.0.0.22 git.mo-code.at" | sudo tee -a /etc/hosts
sudo iptables -t nat -A OUTPUT -p tcp -d 10.0.0.22 --dport 80 -j DNAT --to-destination 10.0.0.22:3000
sudo iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.22 --dport 3000 -j MASQUERADE
echo "✓ DNAT aktiv: git.mo-code.at:80 → 10.0.0.22:3000"
Traffic-Weg:
BuildKit → http://git.mo-code.at:80
→ /etc/hosts: 10.0.0.22:80
→ iptables DNAT: 10.0.0.22:80 → 10.0.0.22:3000
→ Gitea (HTTP, kein TLS nötig)
Warum iptables besser als socat
| Eigenschaft | socat | iptables DNAT |
|---|---|---|
| Verfügbarkeit | ❌ Paket fehlt | ✅ immer vorhanden |
| Paket-Installation | nötig | nicht nötig |
| Arbeitsebene | Userspace | Kernel (schneller) |
| Abhängigkeiten | APT-Repo nötig | keine |
Netzwerk-Übersicht Zora
| Host | IP | Protokoll |
|---|---|---|
| Runner (VM 102) | 10.0.0.23 | — |
| Gitea (CT 101) | 10.0.0.22 | HTTP :3000 |
| Pangolin (CT 100) | 10.0.0.21 | HTTPS für git.mo-code.at |
Fix-Verlauf dieser Pipeline-Debugging-Session
| Version | Symptom | Fix | Ergebnis |
|---|---|---|---|
| v1 | 502 Bad Gateway (Pangolin) | /etc/hosts + provenance:false |
Port 443 refused |
| v2 | connection refused Port 443 | socat :80 → :3000 | socat nicht da |
| v3 | socat nicht verfügbar | iptables DNAT | ✅ erwartet grün |
Gelernt
- Minimale Runner-Images haben oft kein
socat— APT-Repos auf Air-Gapped Systemen sind limitiert iptablesDNAT ist die robustere Lösung: kein Extra-Paket, Kernel-Level, überall verfügbarOUTPUT-Chain für lokal initiierte Verbindungen,POSTROUTING+ MASQUERADE für korrekte Source-Adresse