Hetzner Projects — Inventar

Pro Kunde eigenes Hetzner Project — Mandanten-Trennungs-Konstrukt analog AWS-Sub-Account (siehe aws-multi-account-strategie Doktrin, gilt 1:1 für Hetzner).

Account-Setup

Klärungs-Status (Stand 2026-05-13): offen. Entscheidung Account-Pfad A/B/C steht aus, Details siehe account. Erste Klärung vor Unit 1 vom plan.

Sobald geklärt:

FeldWert
Account-Nametbd (nach Marvin-Decision)
Account-Emailtbd (hello@marvinkuehlmann.com bei UG-Account, privat@ bei Migration-Variante)
Account-OwnerMarvin Kühlmann
Default-Regioneu-central (Frankfurt / Nürnberg / Falkenstein)

Projects (aktiv)

ProjectStatusKundeRegionBestandDetail
av-mayday (vermutlich, je nach Account-Klärung)livemaydaytbdVPS + Coolify + Postgres + R2tbd — siehe Kunden-File, Migration ins Vault offen
av-tools (Default-Project unter aktuellem HCLOUD_TOKEN — Name in Konsole verifizieren)live (seit 2026-05-15)intern (kein Kunde)nbg11× cx23 (Stirling PDF) + Firewall + SSH-Keyav-tools

Projects (geplant / in Anlage)

ProjectGeplanter StatusKundeSprintBestandDetail
av-<industriekunde-slug>tbd Anlage Unit 2tbd Lead-Briefing offennach Account-Klärung + Lead-Briefingwird Unit 2-7 angelegt: 2× Cloud Server (CCX23 + CCX13), Volume, Network, Firewall, 2× Object Storage Bucketav-<slug>.md wird angelegt nach Project-Provisioning

Project-Anlage — Step-by-Step

Schritt-für-Schritt für den nächsten av-<kunde>:

  1. Hetzner Cloud Console öffnen → Project-Auswahl-Dropdown oben links → „Add Project”
  2. Project-Name: av-<kunde-slug> (kebab-case ASCII, keine Umlaute — siehe naming-konvention)
  3. Optional: Project-Description (Kunde-Name + AV-Internal-Kennung)
  4. Im neuen Project: Security → API Tokens → Generate API Token → Read + Write Scope, Name marvin-operations
  5. Token in 1Password speichern unter Hetzner / av-<kunde-slug> / api-token-operations
  6. Lokale ~/.config/hcloud/cli.toml ergänzen:
    hcloud context create av-<kunde-slug>
    # → fragt nach Token, einfügen aus 1Password
  7. Verifizieren: hcloud --context av-<kunde-slug> server list (sollte leer aber ohne Fehler antworten)
  8. Project-File anlegen: intern/capabilities/hetzner/av-<kunde-slug>.md nach Vorbild av-becker mit Header-Tabelle (Project-Name, Region, Erstellt, Kunde, Projekt-Wikilinks) + leere Sub-H3-Sektionen pro Service-Kategorie (Cloud Server, Volume, Network, Firewall, Object Storage, sonstige)
  9. In diese Tabelle oben Project-Eintrag ergänzen
  10. Cost-Limit setzen (Hetzner Console → Project → Settings → Cost Limit): Soft 80% Budget, Hard 100% Budget (optional Server-Stop), Email-Verteiler hello@marvinkuehlmann.com
  11. Erste Resources anlegen (Servers, Volumes etc.) — siehe plan Unit 2

API-Token-Konvention

ZweckNameScopeWo gespeichert
Marvin-Operationsmarvin-operationsRead + Write1Password Hetzner / <project> / api-token-operations
CI/CD (wenn Sprint einen separaten Workflow hat)ci-cdRead + Write1Password Hetzner / <project> / api-token-ci
Terraform-State (wenn aktiviert — in 1. MVP-Iteration deferred)terraformRead + Write1Password + GitHub-Actions-Secrets

Rotation: alle 6 Monate als Default. Bei Verdacht oder Mitarbeiter-Austritt sofort.

Best-Practice: ein Token pro Project + Zweck, nicht ein Master-Token für alles.

Cross-Project-Access

Hetzner unterstützt kein Cross-Project-IAM wie AWS-AssumeRole. Wenn Workloads über mehrere Projects laufen müssen (z.B. Marvin-Operations-Skripte gegen alle AV-Projects), brauchen sie eigene Tokens pro Project.

Workaround in Tooling: lazyants-MCP kann mehrere Tokens als ENV-Var-Suffix laden (HETZNER_API_TOKEN_AV_PROD, HETZNER_API_TOKEN_AV_ICKING etc.) — wenn relevant in eigener Iteration zu konfigurieren.