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:
Die Migration von Proton Pass zu Infisical erfolgte zusammen mit dem Umzug auf Hetzner CX33 (siehe novabrands-mgmt Commit 27875eb).
Backup¶
- Datenbanken:
dump-databases.sherstelltpg_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 |