# 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//`: ``` /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 - **SSH:** `ssh ai-apps` (User root, Key-basiert) - **Portainer:** https://containers.sdda.eu (admin) - **Traefik Dashboard:** https://traefik.sdda.eu ## OpenProject-Referenz - **M7.1** (#1119) — Forgejo Deployment: https://openproject.sdda.eu/work_packages/1119 - **M7** (#1118) — Operations & Documentation Foundation (Parent Phase)