Richard Visser

04Case study

Zelf-hostende infrastructuur

Een Hetzner CX33 die self-hosted Supabase, Coolify, Listmonk en Umami draait, plus een zelfgeschreven Hetzner-MCP. Van Docker multi-stage tot Traefik TLS — infra als vakmanschap.

Rol
Opzet + beheer van de volledige self-hosted stack
Mapt op
Cloud-infra · databases · DevOps
  • Hetzner CX33
  • Docker
  • Coolify/Traefik
  • Supabase/Postgres

Waarom zelf hosten

Voor EnableLens en mijn eigen projecten draait alles op eigen infrastructuur — geen dichtgetimmerd PaaS, maar een server die ik zelf beheer. Dat is een bewuste keuze: volledige controle over data en kosten, en de ruimte om te leren hoe de lagen onder een deploy écht werken. Deze portfolio-site deployt straks naar precies deze stack.

De stack

Op één Hetzner CX33 draait een complete, self-hosted omgeving:

  • Supabase — Postgres met Row-Level Security als data-laag onder de EnableLens-applicaties.
  • Coolify — de deploy-laag, met Traefik ervoor voor routing en automatische TLS-certificaten.
  • Listmonk voor e-mail en Umami voor privacy-vriendelijke, cookieloze analytics.

De applicaties zelf draaien als Docker-containers met multi-stage builds — de Next.js-image is een standalone-output, klein en zonder overbodige build-dependencies.

De eigen MCP

Om de infrastructuur vanuit mijn agent-workflows te kunnen aansturen, heb ik een eigen Hetzner-MCP-server in Python geschreven. Zo wordt server-beheer geen losse handmatige stap, maar iets wat de agents veilig en gecontroleerd kunnen raadplegen — infra als onderdeel van hetzelfde geautomatiseerde geheel.

Wat dit bewijst

Dit dekt de eis "cloud-infra · databases · DevOps" met een omgeving die ik van de grond af heb opgezet en draaiend houd: van Docker-build tot TLS-terminatie, van Postgres-schema tot mail- en analytics-stack. Geen dashboard-klikwerk, maar infrastructuur als vakmanschap — en de plek waar dit portfolio zelf komt te staan.