Hetzner Project — av-tools

Interne Tools von Agentic Ventures (kein Kunden-Bezug). Pattern analog av-shared bei AWS — Multi-Tenant nicht relevant, einfach nur „unsere Werkzeuge”.

FeldWert
Project-Name (Hetzner)tbd — aktuell laeuft das ueber den default HCLOUD_TOKEN, vermutlich erstes/aeltestes Project. Bei Konsole-Check nachpflegen.
Default-Regionnbg1 (Nuernberg)
Erstellt2026-05-15
ZweckInterne Tools (Stirling, ggf. spaeter weitere kleine Services)

Cloud Server

av-tools-shared-01 — Shared Tool-Host (Stirling-PDF + Uptime-Kuma)

Server-Name ist historisch — er hostet seit 2026-05-17 mehrere Services parallel (siehe Pattern-Doku kosten, Abschnitt “Shared CX23”). Bei mehr als 3-4 Services oder Memory-Druck → eigenen av-tools-monitoring-01 oder av-tools-shared-01 anlegen und umsiedeln.

Hardware

FeldWert
Server-ID131113789
Typecx23 (2 vCPU x86, 4 GB RAM, 40 GB Disk) — ~5 €/Monat
Imageubuntu-24.04
Locationnbg1-dc3
IPv446.225.16.231
IPv62a01:4f8:1c18:5e7f::/64
Erstellt2026-05-15
SSH-Keymarvin-av-tools (Hetzner-ID 112321437), lokal: ~/.ssh/hetzner_av_tools
SSH-Aliasssh av-tools-shared (alt: ssh av-tools-stirling faengt’s auch noch ab)
Hostname (auf der Maschine)av-tools-shared-01 (umbenannt 2026-05-17, vorher av-tools-stirling-01)

Services auf diesem Host

ServicePort (intern)Public-URLCompose-PfadAuth
stirling (Stirling-PDF)127.0.0.1:8080pdf.agenticventures.de/opt/stirling/docker-compose.ymlStirling-interner Login (SECURITY_ENABLELOGIN=true); CF Access geplant
uptime-kuma (Status-Monitoring)127.0.0.1:3001uptime.agenticventures.de/opt/uptime-kuma/docker-compose.ymlUptime-Kuma-interner Login (1. UI-Aufruf legt Admin an); CF Access geplant
supertonic (TTS Supertonic 3)127.0.0.1:7788tts.agenticventures.de/opt/supertonic/docker-compose.ymlKeine — Service akzeptiert beliebige Bearer-Tokens. OpenAI-kompatibel: POST /v1/audio/speech. Modell-Cache auf Docker-Volume supertonic_supertonic_cache. Verwendet von vf-chat.agenticventures.de (Open WebUI VF, TTS-Engine openai).

Server-Basis:

  • Docker + Compose (von download.docker.com, nicht Ubuntu-Variante)
  • cloudflared (Cloudflare-APT-Repo) als systemd-Service, terminiert alle Public-URLs ueber Tunnel av-tools (6537ca14-d606-4011-9062-d31d71b73b86)
  • fail2ban, unattended-upgrades, SSH key-only (kein Password, kein root-Password-Login)

Container-Bindings: Alle Container binden auf 127.0.0.1:<port> (kein 0.0.0.0). Public erreichbar ausschliesslich ueber Cloudflare Tunnel.

Daten-Volumes Stirling: /opt/stirling/{data,config,logs,custom-files,pipeline,extra-configs} Daten-Volumes Uptime-Kuma: /opt/uptime-kuma/data

Bootstrap-Skripte (auf Server unter /root/):

  • bootstrap.sh — Idempotenter Initial-Setup-Lauf (System-Update, Docker, Cloudflared, Stirling-Compose). Re-Run nach Reboot oder Image-Update OK.
  • install-tunnel.sh <token> — Installiert Cloudflared als systemd-Service mit dem Tunnel-Token. Einmal-Lauf bei Tunnel-Setup oder bei Token-Rotation.

Lokale Kopie der Skripte: /tmp/stirling-bootstrap/ (nicht versioniert — bei Server-Reset neu von Vault erstellen).

Firewall

av-tools-stirling (ID 10976973)

RegelDirectionProtocolPortSource
SSHintcp220.0.0.0/0, ::/0 (key-only Auth)
ICMPinicmp0.0.0.0/0, ::/0

Kein 80/443 inbound — Stirling ist nur ueber Cloudflare Tunnel erreichbar, Server hat keine offene Web-Surface.

SSH-Keys

NameHetzner-IDLokaler PfadOwner
marvin-av-tools112321437~/.ssh/hetzner_av_toolsMarvin

Cloudflare-Setup

FeldWert
Zoneagenticventures.de
Hostnamepdf.agenticventures.de
Tunnel-Nameav-tools (in Cloudflare Zero Trust → Networks → Tunnels)
Tunnel-ID6537ca14-d606-4011-9062-d31d71b73b86
Tunnel-TypeCloudflared, Cert-basiert (via cloudflared tunnel create, nicht Token)
Tunnel-CredentialsServer: /etc/cloudflared/<tunnel-id>.json (0600 root). Lokal: ~/.cloudflared/<tunnel-id>.json (Backup).
Tunnel-ConfigServer: /etc/cloudflared/config.yml
Public-Hostname-Servicespdf.agenticventures.dehttp://localhost:8080 (Stirling)
uptime.agenticventures.dehttp://localhost:3001 (Uptime-Kuma)
tts.agenticventures.dehttp://localhost:7788 (Supertonic)
DNS-CNAMEsbeide Subdomains → <tunnel-id>.cfargotunnel.com (via cloudflared tunnel route dns)
Access-Applicationtbd — noch nicht angelegt (Stand 2026-05-15: Stirling-interner Login als einzige Auth-Schicht)
Access-Policy (geplant)Allow / Email-Allowlist (hello@marvinkuehlmann.com + johanna@vibe-factory.de — Email verifizieren)
Access-Method (geplant)Email OTP
Session-Duration (geplant)24h

Token-Rotation: wenn Tunnel-Token kompromittiert: in CF Dashboard neuen Token generieren → ./install-tunnel.sh <new-token> auf Server.

Offene Punkte (Stand 2026-05-17)

  • Uptime-Kuma Initial-Admin anlegen — bei erstem Aufruf von uptime.agenticventures.de legt das UI den Admin-User an. Solange das nicht passiert, ist die Instanz fuer jeden, der die URL kennt, hijackbar. Zeitnah erstmaligen Login durchziehen.
  • Uptime-Kuma Monitoring-Targets anlegen — vorgeschlagene erste Liste (im UI eintragen):
    • https://mcp-whatsapp.agenticventures.de/health (HTTP, 60s, expect 200)
    • https://uptime.agenticventures.de/ (Self-Check, 300s)
    • https://pdf.agenticventures.de/ (Stirling)
    • https://agenticventures.de/ (Website)
    • https://marvinkuehlmann.com/ (Personal-Site)
    • VF Open-WebUI-URL (ergaenzen sobald Domain stabil)
    • Icking-AI Fargate-Service (ergaenzen sobald Domain steht)
    • Becker Hetzner-Stack (ergaenzen sobald live)
  • Uptime-Kuma Notification-Channels — Telegram-Bot (Push aufs Handy) + Email hello@marvinkuehlmann.com. Telegram-Setup: BotFather → /newbot → Token in Uptime-Kuma Settings → Notifications. Chat-ID via @userinfobot.
  • Stirling Default-Login aendern — eingebaute Creds admin / stirling-pdf sind noch aktiv. Erst-Login geht aktuell ueber jeden der die URL findet. Im Browser unter pdf.agenticventures.de einloggen → Settings → Account → Password aendern.
  • User fuer Johanna Siepmann (VF) anlegen in Stirling Settings → User Management. Email klaeren (Annahme: johanna@vibe-factory.de).
  • Cloudflare Access davorschalten — beide Subdomains (pdf. + uptime.). Email-OTP-Layer als zweite Auth-Schicht. CF Dashboard → Zero Trust → Access → Applications → Add Self-hosted pro Subdomain, Email-Allowlist hello@marvinkuehlmann.com (+ Johanna fuer Stirling). Bis das passiert: Subdomain-URLs bewusst nicht weitergeben.
  • Mac-DNS-Quirk bei Marvin lokalgetaddrinfo resolved pdf.agenticventures.de nicht (curl/Browser → NXDOMAIN), waehrend dig korrekt 104.21.78.120 / 172.67.220.246 zurueckgibt. Workaround: /etc/hosts-Pin 172.67.220.246 pdf.agenticventures.de. Vom Handy + von anderen Geraeten geht’s. Separater Bug, nichts mit dem Server-Setup zu tun. Gleicher Workaround moeglicherweise fuer uptime.agenticventures.de noetig.

Kosten (Stand 2026-05-15)

PostenEUR/Monat
Cloud Server cx23 (nbg1)~5,00
Public IPv40,60
Traffic (im 20 TB Free-Quota)0
Cloudflare Tunnel + Access (bis 50 User Free)0
Summe~5,60 €/Monat

Runbooks

Stirling-Update

ssh av-tools-stirling
cd /opt/stirling
docker compose pull && docker compose up -d

Uptime-Kuma-Update

ssh av-tools-stirling
cd /opt/uptime-kuma
docker compose pull && docker compose up -d

Neuen Service auf den Shared Host packen

  1. /opt/<service>/docker-compose.yml anlegen, Container auf 127.0.0.1:<freier-port> binden (NICHT 0.0.0.0)
  2. docker compose up -d und Container-Health pruefen
  3. In /etc/cloudflared/config.yml zweite Ingress-Regel ergaenzen:
    - hostname: <name>.agenticventures.de
      service: http://localhost:<port>
    Vor der Catch-All-Regel service: http_status:404 einsortieren.
  4. cloudflared tunnel ingress validatesystemctl restart cloudflared
  5. Lokal auf Marvins Mac: cloudflared tunnel route dns av-tools <name>.agenticventures.de
  6. Smoke-Test: curl -I https://<name>.agenticventures.de/

Server-Reboot

ssh av-tools-stirling reboot
# cloudflared startet automatisch via systemd, Stirling via Docker restart-policy

User in Stirling anlegen (interner Login)

Marvin: einloggen unter pdf.agenticventures.de (nach Cloudflare-Access-OTP) → Admin-Settings → User Management → Add User. Erst-Login mit Default-User admin / stirling-pdfMUSS beim ersten Login geaendert werden.

Access-Allowlist aendern (User dazu / weg)

Cloudflare Dashboard → Zero Trust → Access → Applications → pdf.agenticventures.de → Policies → Edit Allowlist.

Tunnel logs

ssh av-tools-stirling journalctl -u cloudflared -f
  • _index — Hetzner-Capability-Dashboard
  • projects — Project-Inventar (av-tools dort als zweite Zeile fuehren)
  • mcp-hosting-fargate-tunnel — analoger Pattern auf Fargate (zur Inspiration falls je geportet)