eigene Abbild-Registry auf Hetzner statt Google Artifact Registry
CEO-Entscheid 2026-08-23 (Weg a) widerruft Weg a' vom 2026-08-06: eine
Selbst-Hosting-Loesung darf zum Beziehen ihrer Abbilder nicht von Google
Cloud abhaengen.
Neu: infrastructure/hetzner-registry-docker-images/ nach dem Muster des
npm-Registry-Hosts — registry:3 + Caddy, htpasswd-Zugang, cloud-init als
Quelle der Wahrheit, taegliche Sicherung, RESTORE.md.
Umgestellt: selfhost-release.mjs (Ziel jetzt zweiteilig, Quelle unveraendert
GCP), selfhost-customer.mjs (htpasswd ueber SSH statt IAM-Dienstkonto),
docker-compose.yml (65 Zeilen), SELFHOST-RELEASE-RUNBOOK.md neu geschrieben.
Proben 28 -> 32 gruen; Flip-Probe auf das alte Ziel-Muster faellt genau
einmal. assertSafeHtpasswd weist -c ab (loeschte sonst jeden Zugang) —
eine eigene Probe fing dabei, dass die erste Fassung jeden ENTZUG blockiert
haette.
NICHT ausgerollt: die Anlage der kostenpflichtigen Maschine und der
DNS-A-Eintrag liegen als operator-residual (high) vor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LiqTwHE7HSdHBaWhhZ9jeZ
Selbst-Hosting-Loesung darf zum Beziehen ihrer Abbilder nicht von Google
Cloud abhaengen.
Neu: infrastructure/hetzner-registry-docker-images/ nach dem Muster des
npm-Registry-Hosts — registry:3 + Caddy, htpasswd-Zugang, cloud-init als
Quelle der Wahrheit, taegliche Sicherung, RESTORE.md.
Umgestellt: selfhost-release.mjs (Ziel jetzt zweiteilig, Quelle unveraendert
GCP), selfhost-customer.mjs (htpasswd ueber SSH statt IAM-Dienstkonto),
docker-compose.yml (65 Zeilen), SELFHOST-RELEASE-RUNBOOK.md neu geschrieben.
Proben 28 -> 32 gruen; Flip-Probe auf das alte Ziel-Muster faellt genau
einmal. assertSafeHtpasswd weist -c ab (loeschte sonst jeden Zugang) —
eine eigene Probe fing dabei, dass die erste Fassung jeden ENTZUG blockiert
haette.
NICHT ausgerollt: die Anlage der kostenpflichtigen Maschine und der
DNS-A-Eintrag liegen als operator-residual (high) vor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LiqTwHE7HSdHBaWhhZ9jeZ