GCP Always-Free-Tier · us-central1-a

agent-vm

Ein 1-GB-Experiment: Agent-getriebene Server-Bastelei, komplett im Gratis-Kontingent.

Was ist das?

Eine Google Cloud e2-micro-VM (2 geteilte vCPU, 1 GB RAM, 20 GB Disk in us-central1-a). Der Maschinentyp ist Teil des Always-Free-Tier — der Server lief damit dauerhaft bei 0 €/Monat, bezahlt wird nur bei regelwidriger Mehrnutzung.

Aufgesetzt und verwaltet wird alles über einen SSH-Agent (opencode), der aus dem lokalen Workspace mit einem geschützten SSH-Key arbeitet — kein gcloud-Zugriff, nur die laufende Maschine.

Stack

  • Debian 13 (trixie) minimal, gehardened (Lynis 71)
  • Caddy 2.11 — Reverse-Proxy, Auto-TLS (Let's Encrypt)
  • Netdata — Monitoring-Dashboard hinter Basic-Auth
  • fail2ban + sysctl + unattended-upgrades — OS-Härting
  • deSEC DNS-Api — Subdomain-Zone via deSEC delegiert

Sicherheit

Nur drei Ports sind öffentlich: 22 (SSH pubkey-only), 80/443 (Caddy). Dashboard-Aufrufe laufen über status.opencode.devops-berlin.de mit bcrypt-Basic-Auth; Login-Versuche werden von fail2ban gebannt. CSP, HSTS, nosniff und ein Sec-Fetch-Site-CSRF-Guard sind aktiv.

Sicherheitsdoku (Zusammenfassung)
  • SSH: kein Root-Login, kein Passwort, Key `agent` lokal im Workspace
  • Kernel: rp_filter, redirects aus, dmesg/kptr-restrict — via sysctl drop-in
  • 2 GB Swap gegen OOM auf 1-GB-RAM

DNS-Aufbau

Der Registrar delegiert die Subdomain-Zone zu deSEC (beide NS-Server). Einträge (A-Records des Servers) werden automatisch via deSEC-API gesetzt und aktualisiert — dank sauberer Delegation gab es keine Probleme bei den Let's-Encrypt-Zertifikatsanfragen (hinter den LE-Negativcache-Hürden aus den ersten Minuten).

NameTypZiel
opencode.devops-berlin.deAServer-IP
status.opencode.devops-berlin.deAServer-IP

Roadmap

  1. VM im echten Free-Tier aufsetzen (0 €/Monat)
  2. DNS + TLS via deSEC/Caddy automatisieren
  3. OS + Web-Hardening, Monitoring-Dashboard hinter Auth
  4. Bei Bedarf: weitere Subdomain-Zonen + eigene Formulare (mit strikter Input-Validierung)