Zelf hosten van Nextcloud: Geen Big Tech, maar eigen regie

1. De noodzaak van eigen regie en de keuze voor Kubernetes

Techreuzen hebben tegenwoordig een enorme greep op onze data en privacy. Wanneer je diensten van grote cloudproviders gebruikt, is het vaak volstrekt onduidelijk waar je gegevens fysiek worden opgeslagen, onder welk juridisch regime ze vallen en wie er precies toegang toe heeft. Je geeft de controle volledig uit handen.

Om die regie terug te pakken, kun je gebruikmaken van Nextcloud. Dit is hét open-source alternatief waarmee je al je documenten, bestanden en communicatie in eigen hand houdt. Het grote voordeel: je kunt dit volledig op eigen hardware draaien, zodat je precies weet waar je data zich bevindt.

Waarom kies je in zo'n scenario specifiek voor Kubernetes in plaats van een simpel Docker-scriptje op één server? Omdat je al snel merkt dat een serieuze set aan componenten (bestandsopslaan, database, caching, beveiliging, monitoring) niet op één kwetsbaar punt moet leunen. Kubernetes zorgt voor automatisering op schaal: het verdeelt de belasting, herstelt zichzelf automatisch als er een onderdeel wegvalt (self-healing) en maakt het mogelijk om modulaire diensten strak van elkaar gescheiden te beheren zonder downtime.

2. Actieve Nextcloud Modules

In mijn setup draait Nextcloud niet als een geïsoleerde applicatie, maar is het gekoppeld aan verschillende gespecialiseerde modules om functionaliteit en veiligheid te waarborgen:

3. Architectuur en Infrastructuur

De onderliggende infrastructuur draait op een Proxmox-omgeving, waarin het Kubernetes-cluster (aangestuurd via Rancher) wordt gecombineerd met dedicated virtuele machines voor specifieke taken. Het inkomende internetverkeer passeert eerst een strikte firewall, waarna MetalLB en Traefik het verkeer veilig naar de juiste componenten binnen het cluster routeren.

graph TD classDef external fill:#0d1117,stroke:#58a6ff,stroke-width:2px,stroke-dasharray: 5 5,color:#c9d1d9; classDef network fill:#0d1117,stroke:#00ff66,stroke-width:2px,color:#c9d1d9; classDef core fill:#0d1117,stroke:#f1c40f,stroke-width:2px,color:#c9d1d9; classDef ops fill:#161b22,stroke:#ff69b4,stroke-width:2px,color:#c9d1d9; classDef api fill:#0d1117,stroke:#8e44ad,stroke-width:2px,color:#c9d1d9; Internet((Internet)) subgraph Proxmox ["Proxmox Virtualization"] subgraph Rancher Cluster ["Rancher Kubernetes Cluster"] K8sAPI{{Kubernetes API}}:::api subgraph Netwerk & Ingress MLB[MetalLB Load Balancer]:::network Traefik[Traefik Ingress]:::network CM[Cert-Manager]:::network end subgraph Core Applicaties KC[Keycloak IdP]:::core NC[Nextcloud Enterprise]:::core NCT[Nextcloud Talk + HPB]:::core AV[ClamAV]:::core end subgraph GitOps & Observability Argo[ArgoCD]:::ops Mon[Grafana, Loki, Kuma]:::ops end end subgraph VMs ["Dedicated VMs"] DB[(MariaDB)]:::external Git[Bitbucket]:::external FW[Firewall]:::external end end Internet -->|HTTPS| FW FW --> MLB MLB --> Traefik CM -.->|Auto SSL| Traefik Traefik --> NC Traefik --> NCT Traefik --> KC NC -->|Authentication| KC NC -->|Read/Write| DB NC -->|Scan uploads| AV Argo -.->|Pull Config| Git Argo ==>|Sync State| K8sAPI Mon -.->|Log/Metrics| K8sAPI

4. Ontwerpkeuzes en motivatie

Bij het opzetten van deze omgeving zijn bewuste architectuurkeuzes gemaakt:

De database buiten het cluster

Hoewel Kubernetes flexibel is, heb ik ervoor gekozen om de MariaDB database op een dedicated virtuele machine te draaien in plaats van binnen het cluster. Dit maakt het beheer van stateful data een stuk betrouwbaarder. Op hypervisor-niveau (Proxmox) kan ik hierdoor eenvoudig snapshots en back-ups maken en terugzetten, volledig afgeschermd achter de firewall.

Geautomatiseerd beheer via GitOps

Er wordt niets handmatig geconfigureerd op de productiesystemen. De volledige configuratie is vastgelegd als code in een eigen Bitbucket-omgeving. ArgoCD leest deze repository uit en synchroniseert de werkelijke status van het cluster automatisch met de gewenste status. Dit garandeert reproduceerbaarheid en voorkomt menselijke fouten.

Veiligheid en netwerkbeheersing

Door gebruik te maken van Cert-Manager voor automatische SSL-certificaten, Traefik als Ingress-controller en een strikte scheiding van netwerkcomponenten, is de omgeving optimaal beveiligd tegen ongeautoriseerde toegang van buitenaf, zonder concessies te doen aan de performance.