electric-horses-infra/docs/architecture/ai-apps-stacks.md
Benjamin Weinlich 723ee00388 docs(architecture): add ai-apps stack inventory snapshot
Captures the current state of all Docker stacks running on ai-apps
(Hetzner cx22, 10.0.0.8) as of 2026-04-11. Includes resource budget,
DNS records, Traefik integration pattern, and backup situation.

This is a point-in-time snapshot; update when new stacks are added.

Refs OP#1118
2026-04-11 22:19:25 +02:00

3.8 KiB

ai-apps — Service Stack Inventory

Stand: 2026-04-11 Host: Hetzner cx22 (8 GB RAM, 2 vCPU shared, 75 GB Disk) Netzwerke: Public 91.98.226.44, Privat 10.0.0.8 OS: Debian / Docker 29.x + Compose v5 Swap: 2 GB (/swapfile in fstab)

Service-Übersicht

Stack Containers Exposed Domain(s) DB Memory (peak)
shared traefik, portainer 80, 443 traefik.sdda.eu, containers.sdda.eu ~200 MB
n8n n8n, n8n-db — (via Traefik) n8n.sdda.eu Postgres 16 ~400 MB
locosoft-hilfe-system locosoft-backend, locosoft-frontend, locosoft-db, locosoft-redis, chromadb locosoft.sdda.eu, chromadb.sdda.eu Postgres 16 + Redis + ChromaDB ~1.5 GB
eh-search eh-search, eh-search-redis 10.0.0.8:8200 (privat) via Pegasus nginx /api/search Redis ~250 MB
loco-replica loco-replica-db 10.0.0.8:5433 (privat) Postgres 17 ~300 MB
electric-horses-audits eh-audits — (n8n-triggered) ~200 MB
forgejo ★NEU★ forgejo, forgejo-db 222 (SSH), via Traefik code.sdda.eu Postgres 16 ~800 MB

Gesamt-Schätzwert: ~3.5 GB Peak, gemessener Durchschnitt ~1.9 GB + Cache.

Traefik (shared)

  • Version: 3.6.2
  • ACME Resolver: letsencrypt (HTTP-Challenge, Email info@sdda.eu)
  • Dynamic Config: /opt/shared/traefik/dynamic/ (File Provider für Middlewares: authentik.yml, authentik-outpost.yml)
  • Docker Network: traefik-public (external, alle Web-Services hängen dort)
  • ACME Store: /opt/shared/traefik/acme.json

Authentik Integration

  • Authentik-Server: separater Host authentik-sso (138.199.202.82 / 10.0.0.7), NICHT auf ai-apps
  • ForwardAuth-Apps (existing): locosoft-forward-auth, n8n-forward-auth (beide Proxy Provider, Embedded Outpost)
  • Native OIDC-Apps (neu ab 2026-04-11): forgejo (OAuth2/OpenID Provider, siehe ../Forgejo/adr/0003-*.md)

Stack-Organisation

Jeder Stack lebt in eigenem Verzeichnis unter /opt/ai-apps/<stack>/:

/opt/ai-apps/
├── electric-horses-audits/
├── eh-search/
├── forgejo/        ← NEW 2026-04-11
├── locosoft-hilfe-system/
├── loco-replica/
├── mobile-refdata/   ← scripts only
└── n8n/

/opt/shared/          ← Traefik + Portainer
/opt/backups/         ← centralised backup target

Pattern: Jeder Stack hat eine eigene docker-compose.yml und .env, eigene interne Netzwerke, gemeinsames traefik-public für Web-Exposure.

Ressourcen-Bewertung (2026-04-11)

  • RAM: 7.6 GB total, 1.9 GB wirklich in use, 5.7 GB available (inkl. Cache), 250 MB free, 2 GB Swap aktiv
  • Disk: 20 GB frei von 75 GB (73% belegt)
  • Load: ~0.1 (idle)
  • Fazit: Forgejo passt noch rein, aber der Spielraum für zukünftige Services (z.B. Forgejo Actions, Monitoring, Semantic Search Index) ist begrenzt. Bei >85% RAM-Auslastung: Upgrade auf cx32 (16 GB, +4 €/Monat).

DNS Einträge unter sdda.eu die auf ai-apps zeigen (91.98.226.44)

  • ai.sdda.eu (Alias)
  • containers.sdda.eu (Portainer)
  • traefik.sdda.eu (Traefik Dashboard)
  • chromadb.sdda.eu
  • locosoft.sdda.eu
  • n8n.sdda.eu
  • code.sdda.eu ← Forgejo (NEU)

Backups (Stand 2026-04-11)

  • forgejo: Cron 03:00 → /opt/backups/forgejo/, Retention 14 Tage (seit M7.1)
  • andere Stacks: Keine zentrale Backup-Infrastruktur. Hetzner Cloud Snapshots manuell. Rclone → Nextcloud noch nicht eingerichtet (geplant M7.5).

Zugriff

OpenProject-Referenz