Windmill is een open-source ontwikkelaarsplatform dat scripts omzet in webhooks, workflows, geplande taken en interne interfaces - gepositioneerd tegenover Retool en Temporal, niet tegenover een hoster van statische sites. De community-editie valt onder AGPL-3.0, de enterprise-versie zit achter een licentiesleutel.
Het dimensioneren verloopt anders dan bij een gewone webapp, omdat de eenheid van capaciteit de worker is en niet de applicatie.
De architectuur die je specificaties bepaalt
De officiële docker-compose.yml start zeven diensten:
| Dienst | Image | Rol |
|---|---|---|
db | postgres:16 | Database én takenwachtrij |
windmill_server | ghcr.io/windmill-labs/windmill:main | API en webinterface, poort 8000 |
windmill_worker | zelfde image, MODE=worker | Voert taken uit |
windmill_worker_native | zelfde image, NATIVE_MODE=true | Uitsluitend lichte taken |
windmill_indexer | zelfde image, MODE=indexer | Volledige tekstzoekfunctie over taken |
windmill_extra | ghcr.io/windmill-labs/windmill-extra:latest | Language servers voor de editor |
caddy | ghcr.io/windmill-labs/caddy-l4:2.11.4-1 | Reverse proxy op poort 80 |
Twee dingen in die tabel wegen zwaarder dan de rest.
Er is geen Redis. Windmill gebruikt PostgreSQL als wachtrij. Talloze handleidingen van derden voegen een Redis-container en een REDIS_URL toe; het officiële Compose-bestand bevat geen van beide, en wie zo’n handleiding kopieert draait een dienst waar Windmill nooit mee praat.
De workers zijn de kostenpost. De server staat betrekkelijk stil. Waar je werkelijk voor betaalt, is workercapaciteit.
RAM en CPU: dimensioneren per worker
De praktische regel is één worker per vCPU, 1-2 GB RAM elk, plus marge voor Postgres en de server.
| Opstelling | vCPU / RAM | Wat het je oplevert |
|---|---|---|
| Proef, één worker | 2 / 2 GB | Werkt, maar één taak tegelijk en geen ruimte voor een grote afhankelijkheidsinstallatie |
| Standaardstack, 1-2 workers | 2-4 / 4 GB | Het praktische minimum voor echt gebruik |
| Meerdere gelijktijdige taken | 4 / 8 GB | Het comfortabele doel voor een klein team |
Native workers zijn de uitzondering die je moet kennen: ze voeren lichte taken uit met ongeveer 0,1 CPU en 128 MB, en daarom kan de standaardstack er een meeleveren naast een gewone worker zonder een extra kern te eisen.
De variabele die niemand inschat, is het installeren van afhankelijkheden. Een Python-taak die pandas ophaalt, of een TypeScript-taak met een omvangrijk lockbestand, jaagt het geheugengebruik ver boven de rustwaarde. Als taken alleen bij de eerste run mislukken en daarna wel slagen, kijk je naar een afhankelijkheidscache die met te weinig RAM wordt opgebouwd.
Opslag: de afhankelijkheidscache is de groei
De database blijft lang bescheiden - taakmetadata, scripts, flows en logboeken zijn tekst. Het volume dat groeit is worker_dependency_cache, waar elke Python-wheel en elk npm-pakket dat je taken importeren bewaard blijft, zodat latere runs de installatie overslaan.
Begin met 40 GB. Houd het cachevolume in de gaten in plaats van de database als je overweegt op te schalen, en kies bij voorkeur NVMe of SSD: Postgres doet hier naast opslag ook wachtrijdienst en is gevoelig voor I/O-latentie.
VPS-pakketten die aan deze vereisten voldoen
| Aanbieder | Pakket | vCPU / RAM / Schijf | Prijs | Oordeel | Link |
|---|---|---|---|---|---|
| Contabo | Cloud VPS 4 | 4 / 8 GB / 100 GB SSD | 5.50 EUR/mnd excl. btw | Ruimte voor vier workers voor de prijs van een instappakket | Contabo |
| Hetzner Cloud | CX23 | 2 / 4 GB / 40 GB NVMe | 5.49 EUR/mnd excl. btw | Geschikt voor de standaardstack met twee workers | Hetzner |
| DigitalOcean | Basic 4 GB | 2 / 4 GB / 80 GB SSD | 24 USD/mnd | Dezelfde specificaties als de CX23, vier keer de prijs | DigitalOcean |
| Vultr | Regular 4 GB | 2 / 4 GB / 80 GB SSD | 20 USD/mnd | De ruimste keuze aan regio’s | Vultr |
| Linode | Linode 4 GB | 2 / 4 GB / 80 GB SSD | 24 USD/mnd | Voorspelbare prestaties, sterke API | Linode |
Windmill is een van de weinige zelfgehoste toepassingen waarbij een pakket van 1 GB niet meteen afvalt: één native worker past er werkelijk in. Een gewone worker draait daar echter niet, wat elke Python- of TypeScript-taak met afhankelijkheden uitsluit. Dat is een demonstratie, geen installatie.
Opschalen
Windmill schaalt horizontaal door workercontainers toe te voegen, niet door één proces groter te maken. Voor dubbele doorvoer voeg je een tweede windmill_worker-dienst toe die naar dezelfde DATABASE_URL wijst, en geef je de machine er een kern bij.
Dat heeft een praktisch gevolg voor je VPS-keuze: hier winnen meer kernen het van snellere kernen. De 4 vCPU van Contabo voor 5.50 EUR excl. btw kopen parallellisme voor vier workers, waar de CX23 van Hetzner er voor vrijwel dezelfde prijs twee koopt. Bestaat je werklast uit veel kleine taken in plaats van enkele zware, dan is die verhouding de hele beslissing.
- Kijk met
docker statswelke worker verzadigd is voordat je opschaalt. - Groepeer workers met tags, zodat zware taken landen op de machine die daarvoor gedimensioneerd is.
- Postgres draagt de wachtrij: geef die eerder snelle schijf dan meer RAM.
Voor een breder overzicht van de beschikbare pakketten, zie onze volledige VPS-vergelijking.
Frequently asked questions
Hoeveel RAM heeft een zelfgehoste Windmill-instantie nodig?
Dimensioneer per worker in plaats van per applicatie. De vuistregel is één worker per vCPU met 1-2 GB RAM elk, bovenop Postgres en het serverproces. Een instantie met één worker draait op 2 GB, de standaard Compose-stack met twee workers zit ruim op 4 GB, en 8 GB met 4 vCPU is het verstandige doel zodra meerdere taken tegelijk lopen.
Hoeveel CPU-kernen moet ik aan Windmill toewijzen?
Begin met 2 vCPU en tel er een kern bij voor elke extra worker, want een standaardworker voert één taak tegelijk uit. Native workers zijn de uitzondering: die handelen lichte taken af met ongeveer 0,1 CPU en 128 MB, waardoor de standaardstack er een meelevert naast de gewone worker zonder een extra kern te vragen.
Heeft Windmill Redis of een andere message broker nodig?
Nee. Windmill gebruikt PostgreSQL zowel als database als als takenwachtrij. Dat is ongebruikelijk en goed om te weten, want veel handleidingen van derden voegen een Redis-dienst toe die het officiële Compose-bestand niet bevat. PostgreSQL 14 of nieuwer is de enige benodigde gegevensopslag, en Redis toevoegen levert alleen een nutteloze container op.