Zum Inhalt

Novabrands (Hetzner CX33)

Infrastruktur-Stack fuer eine IT-Beratung (1-5 Personen) auf einem Hetzner Cloud vServer in Nuernberg. Eigenstaendig — keine Netzwerkverbindung zum Homelab.

  • Hardware: Hetzner Cloud CX33 (4 vCPU, 8 GB RAM, 80 GB SSD)
  • Standort: Nuernberg, Deutschland (DSGVO-konform)
  • Domain: *.novabrands.org
  • Repo: novabrands-mgmt
  • Status: Produktiv (Hetzner CX33, Nuernberg)

Services

Service URL Beschreibung
OpenProject openproject.novabrands.org Projektmanagement, Aufgaben, Gantt, Wiki
Nextcloud cloud.novabrands.org Dateispeicher, CalDAV/CardDAV, Talk
Collabora office.novabrands.org Browser-basierte Dokumentenbearbeitung
Traefik Dashboard traefik.novabrands.org Reverse Proxy (intern, Basic Auth)

Architektur

Internet
    |
 Traefik v3 (443/80, Let's Encrypt, Rate-Limiting)
    |
    +-- openproject.novabrands.org --> OpenProject :8080
    |       +-- PostgreSQL 18 (openproject-backend)
    |       +-- Memcached (openproject-backend)
    |
    +-- cloud.novabrands.org -------> Nextcloud :80
    |       +-- PostgreSQL 18 (nextcloud-backend)
    |       +-- Redis 7 (nextcloud-backend)
    |       +-- nextcloud-cron (nextcloud-backend)
    |
    +-- office.novabrands.org ------> Collabora CODE :9980

Traefik liest die Konfiguration aus Docker Labels und kommuniziert mit dem Docker-Daemon ausschliesslich ueber einen Read-Only Socket-Proxy (tecnativa/docker-socket-proxy).

Netzwerk-Topologie

Netzwerk Typ Container
proxy extern traefik, openproject, nextcloud, collabora
socket-proxy intern socket-proxy, traefik
openproject-backend extern openproject, openproject-db, openproject-cache
nextcloud-backend extern nextcloud, nextcloud-db, nextcloud-redis, nextcloud-cron

Image-Versionen

Container Image Version
traefik traefik v3.6.9
openproject openproject/openproject 17.2.1
openproject-db postgres 18.3-alpine
openproject-cache memcached 1.6.41-alpine
nextcloud nextcloud 32.0.6-apache
nextcloud-db postgres 18.3-alpine
nextcloud-redis redis 7.4.8-alpine
collabora collabora/code 25.04.9.3.1
socket-proxy tecnativa/docker-socket-proxy 0.3.0

Alle Images sind auf exakte Patch-Versionen gepinnt. Updates kommen ueber Renovate oder manuell nach Pruefung der Release-Notes.

Ressourcen-Limits (gesamt)

Limit Reservation
Stack gesamt ~5,4 GB ~2,9 GB
Server gesamt (8 GB) ~5,4 GB ~2,9 GB
Frei verfuegbar ~2,6 GB

Secrets-Management

Secrets werden nicht im Repository gespeichert. Klartext-Config liegt in stack.env (committed). Echte Secrets werden ueber Infisical (Pfad: /novabrands-mgmt, Env: prod) verwaltet und zur Laufzeit injiziert:

infisical run --env=prod --path=/novabrands-mgmt -- docker compose up -d

Die Migration von Proton Pass zu Infisical erfolgte zusammen mit dem Umzug auf Hetzner CX33 (siehe novabrands-mgmt Commit 27875eb).

Backup

  • Datenbanken: dump-databases.sh erstellt pg_dump (Custom-Format) fuer beide PostgreSQL-Instanzen (OpenProject, Nextcloud)
  • Volumes: Borgmatic sichert DB-Dumps + Nextcloud-Dateien auf eine Hetzner StorageBox (SSH/Borg)
  • RPO: < 24 Stunden | RTO: < 4 Stunden

Deployment

# 1. Server provisionieren
./setup.sh

# 2. Stack mit Infisical-Secrets starten
cd /opt/containers/novabrands-mgmt
infisical run --env=prod --path=/novabrands-mgmt -- docker compose up -d

# 3. Post-Deployment-Schritte (OAuth, Apps, Optimierungen)
# Siehe SPEC.md Abschnitt 20

Roadmap

Fuer spaeter geplante Dienste (alle nicht Teil des aktuellen Stacks):

Dienst Zeitpunkt
Jitsi Meet Wenn Nextcloud Talk fuer Videokonferenzen nicht ausreicht
Mattermost Wenn Talk als Chat-Loesung nicht ausreicht
Authelia (SSO) Ab > 5 Nutzern oder Kundenmandaten fuer MFA