Zum Inhalt

Novabrands (OVH Dedicated)

Infrastruktur-Stack fuer eine IT-Beratung (1-5 Personen) auf einem dedizierten OVH-Server in Frankfurt. Eigenstaendig — keine Netzwerkverbindung zum Homelab.

  • Hardware: OVH RISE-S (AMD Ryzen 7 9700X, 8C/16T, 64 GB DDR5, 2x512 GB NVMe RAID-1)
  • Standort: Frankfurt, Deutschland (DSGVO-konform)
  • Domain: *.novabrands.org
  • Repo: novabrands-mgmt
  • Status: Spezifikation abgeschlossen, bereit zur Umsetzung

Noch nicht produktiv

Dieser Stack ist noch nicht deployed. Alle Konfigurationen sind fertig spezifiziert, aber die Umsetzung steht aus.

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
Coder coder.novabrands.org Remote-Entwicklungsumgebungen
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
    |
    +-- coder.novabrands.org -------> Coder coderd :7080
            +-- PostgreSQL 18 (coder-backend)
            +-- coder-socket-proxy (coder-socket-proxy)

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

Netzwerk-Topologie

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

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
coder ghcr.io/coder/coder v2.30.4
coder-db postgres 18.3-alpine
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 ~9,4 GB ~5,3 GB
Server gesamt (64 GB) ~10,9 GB ~5,8 GB
Frei verfuegbar ~53 GB

Secrets-Management

Secrets werden nicht im Repository gespeichert. Die .env.template enthaelt pass://-Referenzen auf Eintraege im Proton Pass Vault "Novabrands Infra". Zur Deployment-Zeit generiert pass-cli inject die echte .env-Datei:

pass-cli inject --in-file .env.template --out-file .env --file-mode 0600

Backup

  • Datenbanken: dump-databases.sh erstellt pg_dump (Custom-Format) fuer alle drei PostgreSQL-Instanzen
  • 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. Secrets generieren
pass-cli inject --in-file .env.template --out-file .env --file-mode 0600

# 3. Stack starten
cd /opt/containers/novabrands-mgmt
docker compose up -d

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

Roadmap

Fuer spaeter geplante Dienste (alle nicht Teil des initialen 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
Lokale Transkription (Whisper.cpp) Bei regelmaessigem Transkriptionsbedarf