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:
Backup¶
- Datenbanken:
dump-databases.sherstelltpg_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 |