Apps self-hosten op een VPS: architectuur, RAM-verbruik en waar te beginnen
Beslissingsgids voor het self-hosten van apps op een VPS met Docker. Echte geheugenverbruikgegevens voor 10+ apps, combinaties voor 4 GB en 8 GB plannen, en een framework om je eerste app te kiezen.
Je hebt een VPS. Misschien heb je die net gekregen, of misschien draai je er al een paar dingen op en wil je meer. Hoe dan ook, de vraag is dezelfde: wat kan ik erop draaien, en past het?
Deze gids beantwoordt dat. Hij behandelt de architectuur van een self-hosted app-stack, geeft echte geheugenverbruikgetallen gemeten op een 4 vCPU/8 GB VPS, en biedt een beslissingsmatrix om je eerste (of volgende) app te kiezen. Geen lijstjes met app-namen. Geen theoretische schattingen. Data en een plan.
Vereisten: Deze gids gaat ervan uit dat je Docker en een reverse proxy al draaiende hebt. Zo niet, begin met Docker in productie op een VPS: wat er misgaat en hoe je het oplost om Docker, Docker Compose en Caddy of Traefik te installeren op Debian 12 of Ubuntu 24.04. Voor Docker Compose-basiskennis, zie [-> docker-compose-multi-service-vps].
Waarom self-hosten op een VPS in plaats van een homelab?
Een VPS geeft je always-on hosting met een publiek IPv4-adres, geen CGNAT, geen elektriciteitsrekening en geen hardware om te onderhouden. Door de provider beheerde snapshots regelen disaster recovery. Een 4 vCPU/8 GB VPS draait 5-8 Docker-apps comfortabel voor een paar euro per maand. Je thuisinternet valt uit; je VPS niet.
| Factor | VPS | Homelab |
|---|---|---|
| Publiek IP | Inbegrepen, statisch | Vaak achter CGNAT. Vereist tunnel-workarounds. |
| Uptime | 99,9%+ SLA, redundante stroomvoorziening | Afhankelijk van je ISP en stroomnet |
| Bandbreedte | Symmetrisch, doorgaans 1 Gbps+ | Asymmetrisch. Upload is de bottleneck. |
| Hardware-onderhoud | Probleem van de provider | Jouw probleem. Schijfstoringen, ventilatorgeluid, warmte. |
| Elektriciteit | Inbegrepen in de prijs | 20-60 EUR/jaar voor een kleine server die 24/7 draait |
| Snapshots/backups | Eén klik, beheerd door de provider | Je bouwt en test de backup-pipeline zelf |
| Initiële kosten | Vanaf ~4 EUR/maand | 200-500+ EUR voor een Mini PC of NAS |
| Fysieke toegang | Geen. Alleen SSH. | Volledige toegang. Handig voor USB-apparaten, ZFS-arrays. |
Een homelab is zinvol als je lokale opslag nodig hebt (ZFS-arrays, NAS), USB-hardware (Zigbee-sticks, SDR-dongles) of bare-metal beheer wilt leren. Voor al het andere is een VPS eenvoudiger en goedkoper om mee te beginnen.
De meeste residentiële ISP's gebruiken nu Carrier-Grade NAT, wat betekent dat je een publiek IP deelt met tientallen andere klanten. Je kunt geen port-forwarding doen. Je kunt geen inkomende verbindingen ontvangen. Je self-hosted apps zijn onzichtbaar op het internet. Workarounds bestaan (Cloudflare Tunnels, WireGuard-relays via een VPS), maar ze voegen complexiteit toe en een afhankelijkheid van een externe dienst. Een VPS omzeilt het probleem volledig: je krijgt een dedicated publiek IPv4, je beheert DNS, en inkomend verkeer werkt gewoon.
Als je beide wilt, gebruik dan een VPS als je publieke edge en een WireGuard-tunnel terug naar je homelab voor privédiensten. Maar voor de meeste self-hosted apps is een VPS alleen voldoende.
Hoe ziet een self-hosted app-stack eruit?
Een self-hosted stack op een VPS volgt een gelaagde architectuur: een reverse proxy staat ervoor en routeert HTTPS-verkeer naar applicatiecontainers. Elke app verbindt met zijn eigen database (of gebruikt ingebouwd SQLite). Een backuplaag maakt snapshots volgens een planning.
Internet
│
▼
┌─────────────────────────────┐
│ Reverse Proxy (Caddy) │ Port 443 ← only public port
│ TLS termination + routing │
└──────┬──────┬──────┬────────┘
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│App 1│ │App 2│ │App 3│ Docker containers
└──┬──┘ └──┬──┘ └──┬──┘
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│ DB │ │ DB │ │SQLite│ PostgreSQL, Redis, or embedded
└─────┘ └─────┘ └─────┘
│
▼
┌─────────────────┐
│ Backup Layer │ Restic, borgmatic, or provider snapshots
│ (scheduled) │
└─────────────────┘
Belangrijke beslissingen:
- Reverse proxy: Caddy voorziet TLS-certificaten automatisch zonder configuratie. Traefik integreert met Docker-labels voor auto-discovery. Beide werken. Caddy is eenvoudiger voor beginners.
- Database: Veel lichtgewicht apps (Vaultwarden, Uptime Kuma, Beszel) gebruiken ingebouwd SQLite. Geen aparte databasecontainer nodig. Zwaardere apps (Immich, Plausible, Gitea) hebben PostgreSQL nodig.
- Backup: Provider-snapshots dekken de volledige schijf. Voor backups op app-niveau gebruik je Restic of borgmatic naar een offsite doel (S3-compatibele opslag of een tweede VPS).
- Netwerk: Alle app-containers zitten op een intern Docker-netwerk. Alleen de reverse proxy stelt poorten 80 en 443 bloot. Apps binden nooit rechtstreeks aan publieke interfaces.
Deze architectuur wordt in detail behandeld op Docker in productie op een VPS: wat er misgaat en hoe je het oplost.
Hoeveel RAM gebruiken self-hosted apps werkelijk?
Minder dan je denkt. De meeste populaire self-hosted apps gebruiken in rust minder dan 200 MB. De uitzonderingen zijn apps met machine learning-functionaliteit (Immich) of ingebouwde analytics-engines (Plausible met ClickHouse).
De getallen hieronder zijn RSS-geheugen in rust/licht gebruik uit docker stats, gemeten op een Virtua Cloud 4 vCPU/8 GB VPS met Debian 12. De piekwaarden vertegenwoordigen typische pieken tijdens actief gebruik (foto-upload, document-OCR, workflow-uitvoering).
| App | Wat het vervangt | RAM in rust | RAM piek | Opslag/maand | Database |
|---|---|---|---|---|---|
| Vaultwarden | Bitwarden, 1Password | ~25 MB | ~50 MB | Minimaal | SQLite |
| Uptime Kuma | UptimeRobot, Pingdom | ~100 MB | ~170 MB | Minimaal | SQLite |
| Beszel | Datadog (basis) | ~50 MB | ~80 MB | Minimaal | Ingebouwd |
| Gitea | GitHub (privé repo's) | ~150 MB | ~300 MB | ~50 MB/repo | PostgreSQL of SQLite |
| n8n | Zapier, Make | ~100 MB | ~500 MB+ | Varieert per workflow | PostgreSQL |
| Paperless-ngx | Dossierkast | ~300 MB | ~1 GB | ~5 MB/document | PostgreSQL + Redis |
| Nextcloud | Google Drive, Dropbox | ~250 MB | ~512 MB | Varieert per bestanden | PostgreSQL + Redis |
| Coolify | Vercel, Railway | ~500 MB | ~1,2 GB | Varieert per deploys | PostgreSQL (meegeleverd) |
| Plausible | Google Analytics | ~400 MB | ~1,5 GB | ~100 MB/1M pageviews | PostgreSQL + ClickHouse |
| Immich | Google Photos | ~800 MB | ~2,5 GB | ~3 GB/1000 foto's | PostgreSQL + Redis |
Enkele opmerkingen bij deze getallen:
- Immich met machine learning (gezichts-/objectdetectie) ingeschakeld heeft 4-6 GB totaal nodig. De bovenstaande getallen zijn met ML ingeschakeld maar in rust. Tijdens een grote foto-import verwacht je 3-4 GB. Je kunt ML uitschakelen om naar ~400 MB te zakken, maar dan verlies je slim zoeken en gezichtsherkenning.
- Plausible: RAM hangt af van het verkeersvolume. ClickHouse houdt van geheugen. Voor een site met minder dan 100.000 pageviews/maand kloppen de bovenstaande getallen. Sites met veel verkeer hebben meer nodig.
- n8n is in rust licht, maar complexe workflows met grote JSON-payloads of AI-integraties pieken flink. AI-agent workflows kunnen 200 MB+ per uitvoering verbruiken.
- Paperless-ngx piekt tijdens OCR. Stel
PAPERLESS_WEBSERVER_WORKERS=1in via Docker om ~150 MB te besparen als je de enige gebruiker bent.
Welke app moet ik als eerste self-hosten op mijn VPS?
Begin met Vaultwarden. Het gebruikt 25 MB RAM, is in minder dan 10 minuten gedeployed, vervangt een betaalde wachtwoordmanager die je dagelijks gebruikt, en dwingt je om TLS correct in te stellen. Die TLS-setup (reverse proxy + DNS + certificaten) is de basis die elke andere self-hosted app nodig heeft. Eén app, drie voordelen: privacy, kostenbesparing en herbruikbare infrastructuur.
| App | Privacy-impact | Setup-complexiteit | SaaS die het vervangt | Min. RAM |
|---|---|---|---|---|
| Vaultwarden | Zeer hoog (wachtwoorden) | Laag (10 min) | Bitwarden/1Password | 128 MB |
| Immich | Hoog (persoonlijke foto's) | Gemiddeld (30 min) | Google Photos | 2 GB (4 GB met ML) |
| Paperless-ngx | Hoog (documenten, ID's) | Gemiddeld (20 min) | Dossierkast + scanner-apps | 512 MB |
| Plausible | Gemiddeld (bezoekersanalytics) | Gemiddeld-hoog (25 min) | Google Analytics | 1 GB |
| Uptime Kuma + Beszel | Laag (infra-monitoring) | Laag (10 min) | UptimeRobot + Datadog | 256 MB |
| Gitea | Gemiddeld (broncode) | Laag (15 min) | GitHub privé repo's | 256 MB |
| n8n | Gemiddeld (workflowdata) | Gemiddeld (20 min) | Zapier, Make | 512 MB |
| Coolify | Laag (deployment-tool) | Gemiddeld (20 min) | Vercel, Railway | 1 GB |
Privacy-impact is de sterkste reden om te self-hosten. Je wachtwoorden, foto's en gescande documenten zijn de meest gevoelige data die je dagelijks verwerkt. Deze hosten op de server van iemand anders betekent vertrouwen op hun beveiliging, hun jurisdictie en hun bedrijfscontinuïteit. Op je eigen VPS in Europa blijven die gegevens onder jouw controle en onder de AVG.
Setup-complexiteit houdt rekening met de volledige stack: app-container, database, reverse proxy-configuratie en eerste backup. "Laag" betekent een enkel docker compose up -d na het schrijven van één Compose-bestand. "Gemiddeld" voegt een database en storage volume-configuratie toe. "Gemiddeld-hoog" omvat meerdere afhankelijke diensten (ClickHouse voor Plausible, ML-containers voor Immich).
Tutorials voor elke app vind je via de links aan het einde van deze gids.
Wat kan ik draaien op een 4 GB VPS vs. een 8 GB VPS?
Een 4 GB VPS draait een solide persoonlijke stack. Een 8 GB VPS verwerkt alles wat een solo-ontwikkelaar of klein team nodig heeft. De getallen hieronder houden rekening met de reverse proxy (~30 MB), Docker-overhead en het besturingssysteem zelf (~300-400 MB in gebruik).
4 GB VPS (~3,2 GB beschikbaar voor apps)
| Stackcombinatie | Totaal RAM in rust | Ruimte over |
|---|---|---|
| Vaultwarden + Uptime Kuma + Beszel + Gitea | ~325 MB | ~2,9 GB |
| Vaultwarden + Paperless-ngx + Uptime Kuma | ~425 MB | ~2,8 GB |
| Vaultwarden + n8n + Beszel + Gitea | ~325 MB | ~2,9 GB |
| Vaultwarden + Nextcloud + Uptime Kuma | ~375 MB | ~2,8 GB |
Deze combinaties laten ruim voldoende ruimte over voor piekgebruik. Zelfs wanneer Paperless-ngx stijgt naar 1 GB tijdens OCR, is er nog ruimte. Vermijd Immich met ML of Plausible op 4 GB, tenzij het de enige app is.
8 GB VPS (~7 GB beschikbaar voor apps)
| Stackcombinatie | Totaal RAM in rust | Ruimte over |
|---|---|---|
| Vaultwarden + Immich + Uptime Kuma + Beszel | ~975 MB | ~6 GB |
| Vaultwarden + Plausible + Gitea + Paperless-ngx + Beszel | ~925 MB | ~6 GB |
| Vaultwarden + Coolify + Uptime Kuma + n8n | ~725 MB | ~6,3 GB |
| Alle lichtgewicht (Vaultwarden + Gitea + Uptime Kuma + Beszel + n8n + Paperless-ngx) | ~725 MB | ~6,3 GB |
Met 8 GB kun je Immich met ML comfortabel naast drie of vier lichtgewicht apps draaien. Je kunt ook Plausible met ClickHouse draaien zonder je zorgen te maken over geheugendruk. Dit is de sweet spot voor een persoonlijke self-hosting setup.
RAM in rust is waar je op plant, maar pieken zijn wat je server laat crashen. Paperless-ngx piekt tijdens OCR. Immich piekt tijdens foto-imports met ML-classificatie. n8n piekt bij het uitvoeren van workflows met grote payloads. De kolom ruimte over hierboven is je vangnet. Als de ruimte over onder 1 GB daalt, riskeer je dat de Linux OOM killer een container beëindigt op het slechtst mogelijke moment. Houd minstens 1,5 GB ruimte over voor elke stack die Immich of Plausible bevat.
Voor een Virtua Cloud VPS met 4 vCPU en 8 GB RAM op NVMe-opslag, bekijk de huidige plannen. De locatie Frankfurt plaatst je data in de EU onder Duits gegevensbeschermingsrecht.
Welke self-hosted apps hebben Europese hosting nodig?
Elke app die persoonlijke gegevens opslaat, profiteert van Europese hosting onder de AVG. Maar sommige apps verwerken gegevens die de jurisdictievraag urgent maken.
Hoge prioriteit voor EU-hosting:
- Vaultwarden slaat elk wachtwoord op dat je bezit. Een lek hier is catastrofaal. Europese hosting betekent dat AVG-meldingsplichten bij datalekken van toepassing zijn.
- Immich bevat persoonlijke foto's, vaak met gezichten van familieleden. Gezichtsherkenningsdata zijn biometrische gegevens onder AVG Artikel 9. Bijzondere categorie. Extra bescherming.
- Paperless-ngx slaat gescande identiteitsbewijzen, belastingdocumenten en contracten op. Enkele van de meest gevoelige persoonlijke gegevens die je hebt.
Gemiddelde prioriteit:
- Plausible verzamelt bezoekersanalytics. Het is privacy-first by design (geen cookies, geen persoonlijke gegevens), maar de data behoort nog steeds toe aan je websitebezoekers.
- Gitea kan propriëtaire broncode bevatten. Geen persoonlijke gegevens per se, maar intellectueel eigendom dat je wilt beschermen.
- n8n-workflows verwerken vaak data uit meerdere diensten. De automatiseringslaag ziet alles.
Lagere prioriteit:
- Uptime Kuma / Beszel slaan monitoringdata op. Geen persoonlijke gegevens tenzij je endpoints monitort die deze bevatten.
- Coolify is een deployment-tool. Het verwerkt je code maar slaat geen eindgebruikerdata op.
Als je een Europees bedrijf bent of gegevens van EU-burgers verwerkt, vereenvoudigt het hosten van deze apps op een VPS in Duitsland (of een ander EU-land) je AVG-compliance. Je beheert de data. Je weet waar die is. Je kiest wie er toegang toe heeft.
Hoe houd ik mijn self-hosted apps veilig en up-to-date?
Self-hosting betekent dat jij de systeembeheerder bent. Dat is de prijs voor controle. Hier zijn de niet-onderhandelbare praktijken:
Firewall eerst. Voordat je een app deployt, configureer ufw om alleen SSH (poort 22) en HTTPS (poort 443) toe te staan. Blokkeer al het andere. Dit wordt behandeld in Docker in productie op een VPS: wat er misgaat en hoe je het oplost.
TLS overal. Je reverse proxy (Caddy of Traefik) verzorgt TLS-terminatie. Elke app krijgt HTTPS. Geen uitzonderingen. Caddy voorziet automatisch Let's Encrypt-certificaten.
Updates. Controleer wekelijks op container-image updates. Haal nieuwe images op, hermaak containers:
docker compose pull
docker compose up -d
Voor kritieke beveiligingsupdates (Vaultwarden, elke internetgerichte app), abonneer je op de GitHub-releases van het project of de RSS-feed. Vaultwarden releases en Immich releases zijn goede voorbeelden.
Backups. Test ze. Een backup die je nooit hebt hersteld is geen backup. Gebruik provider-snapshots voor volledig schijfherstel en Restic of borgmatic voor offsite backups op app-niveau. Plan ze met cron of een systemd timer. Verifieer ze maandelijks.
Secretsbeheer. Schrijf nooit wachtwoorden rechtstreeks in docker-compose.yml. Gebruik een .env-bestand met chmod 600:
openssl rand -base64 32 > /dev/null # example: generate a strong password
# docker-compose.yml
services:
app:
env_file: .env
# .env (chmod 600, owned by root)
DB_PASSWORD=<generated-password>
SECRET_KEY=<generated-key>
Monitoring. Draai Uptime Kuma voor externe endpoint-checks en Beszel voor container-level metrieken (CPU, RAM, schijf per container). Beide zijn lichtgewicht en geven je zichtbaarheid voordat problemen uitgroeien tot storingen. Zie Uptime Kuma en Beszel zelf hosten op een VPS met Docker Compose.
Logbewustzijn. Weet waar je logs zijn. Docker-containers loggen standaard naar stdout. Bekijk ze met:
docker compose logs -f --tail=50 <service-name>
Voor diensten op systeemniveau (de reverse proxy als die native draait, SSH, firewall), gebruik journalctl:
journalctl -u caddy -f
Als iets kapotgaat, zijn logs je eerste stop. Niet Stack Overflow. Niet Reddit. Logs.
Wat nu?
Elke app in de bovenstaande beslissingsmatrix heeft een eigen tutorial met volledige Docker Compose-configuraties, reverse proxy-setup, backups en hardening:
| App | Tutorial |
|---|---|
| Vaultwarden (wachtwoorden) | Vaultwarden zelf hosten op een VPS met Docker Compose |
| Immich (foto's) | Immich zelf hosten op een VPS met Docker Compose |
| Plausible (analytics) | Plausible Analytics zelf hosten op een VPS met Docker Compose |
| Uptime Kuma + Beszel (monitoring) | Uptime Kuma en Beszel zelf hosten op een VPS met Docker Compose |
| Coolify vs Dokploy (PaaS) | Coolify vs Dokploy: welk self-hosted PaaS voor je VPS? |
| Paperless-ngx (documenten) | Paperless-ngx zelf hosten op een VPS met Docker Compose |
| Gitea (Git-hosting) | Gitea zelf hosten op een VPS met Docker Compose |
Als je Docker en een reverse proxy nog niet hebt ingesteld, begin hier: Docker in productie op een VPS: wat er misgaat en hoe je het oplost. Die gids behandelt Debian 12 en Ubuntu 24.04, installeert Docker met Compose, configureert Caddy als reverse proxy met automatisch TLS, stelt een firewall in en maakt een non-root deploy-gebruiker aan. Alles in deze gids bouwt voort op die basis.
Copyright 2026 Virtua.Cloud. Alle rechten voorbehouden. Deze inhoud is een origineel werk van het Virtua.Cloud-team. Reproductie, herpublicatie of herdistributie zonder schriftelijke toestemming is verboden.
Klaar om het zelf te proberen?
Deploy uw eigen server in seconden. Linux, Windows of FreeBSD. →