Independent testing Updated August 2026 387 self-hosting guides 5 VPS providers tested

guide

Hoe je Windmill Zelf host op een VPS (Complete Gids)

Zet Windmill, het open-source alternatief voor Retool en Temporal, op een VPS met de officiële Compose-stack. Sizing per worker, TLS via Caddy en back-ups.

Windmill zet scripts om in webhooks, workflows, geplande taken en interne interfaces - een open-source alternatief voor Retool en Temporal. Zelf hosten is rechttoe rechtaan, met één addertje dat je vooraf moet kennen: het gebruikt geen Redis, wat een aantal gidsen op het web ook beweert.

Waarom Windmill zelf hosten?

Het cloudabonnement rekent per gebruiker én per uitvoering af. Zelf hosten schrapt beide tellers, wat bij een automatiseringsplatform zwaar weegt: juist de taken die je het liefst periodiek laat lopen, zouden anders voortdurend uitvoeringskosten opstapelen. Bovendien blijven je scripts, inloggegevens en taaklogboeken op je eigen machine, en die scripts bevatten doorgaans API-sleutels voor al het andere dat je beheert.

De community-editie is AGPL-3.0. De enterprise-versie zit achter een licentiesleutel en een andere image-tag; voor het draaien van het platform heb je die niet nodig.

De juiste VPS kiezen

Windmill dimensioneer je per worker, niet per applicatie. De vuistregel is één worker per vCPU met 1-2 GB RAM elk, bovenop Postgres en het serverproces.

AanbiederPakketvCPU / RAM / SchijfPrijsOpmerkingenLink
ContaboCloud VPS 44 / 8 GB / 100 GB SSD5.50 EUR/mnd excl. btwVier kernen betekent vier workers parallelContabo
Hetzner CloudCX232 / 4 GB / 40 GB NVMe5.49 EUR/mnd excl. btwPast bij de standaardstack met twee workersHetzner
DigitalOceanBasic 4 GB2 / 4 GB / 80 GB SSD24 USD/mndDezelfde specificaties als de CX23 tegen vier keer de prijsDigitalOcean
VultrRegular 4 GB2 / 4 GB / 80 GB SSD20 USD/mndDe ruimste keuze aan regio’sVultr
LinodeLinode 4 GB2 / 4 GB / 80 GB SSD24 USD/mndVoorspelbare prestatiesLinode

Omdat de doorvoer meegroeit met het aantal workers, telt hier het aantal kernen zwaarder dan de kloksnelheid. Voor een uitgebreide vergelijking, bezoek onze pagina volledige VPS-vergelijking.

Vereisten

Stap 1: De VPS voorbereiden

Verbind en werk bij:

ssh root@jouw-vps-ip
apt update && apt upgrade -y

Installeer Docker en de Compose-plug-in:

apt install -y docker.io docker-compose-v2
systemctl enable --now docker
docker compose version

Zet de poorten open die Caddy gebruikt:

ufw allow OpenSSH && ufw allow 80 && ufw allow 443
ufw enable

Stap 2: De officiële Compose-stack ophalen

Schrijf voor Windmill geen eigen Compose-bestand. Het project publiceert er een, en dat verbindt de workers, indexer en language servers correct:

mkdir -p ~/windmill && cd ~/windmill
curl -fsSL -o docker-compose.yml https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/windmill-labs/windmill/main/.env
curl -fsSL -o Caddyfile https://raw.githubusercontent.com/windmill-labs/windmill/main/Caddyfile

De stack die je zojuist hebt opgehaald draait zeven diensten:

In die lijst staat geen Redis, en in de jouwe hoort er ook geen te staan.

Stap 3: Wachtwoord en domein instellen

De meegeleverde .env bevat een bewust zwakke standaardwaarde:

DATABASE_URL=postgres://postgres:changeme@db/windmill?sslmode=disable
WM_IMAGE=ghcr.io/windmill-labs/windmill:main

Vervang changeme door een gegenereerd geheim vóór de eerste start, want de database wordt bij precies die start aangemaakt:

openssl rand -hex 24

Stel in hetzelfde bestand BASE_URL in op je domein. Caddy leest die om een certificaat aan te vragen.

Stap 4: Starten

docker compose up -d
docker compose ps

De eerste start haalt meerdere images op en voert de databasemigraties uit, dus gun het een minuut. Open je domein en maak het eerste account aan - dat wordt de superbeheerder van de instantie.

Stap 5: Workers toevoegen wanneer je ze nodig hebt

Dit is wat Windmill onderscheidt van de meeste zelfgehoste toepassingen. Je schaalt niet door één proces groter te maken, maar door workercontainers toe te voegen. Kopieer het blok windmill_worker in de docker-compose.yml, geef het een nieuwe dienstnaam, houd dezelfde DATABASE_URL en MODE=worker aan, en pas toe:

docker compose up -d

De workers stemmen af via Postgres, verder verandert er niets aan de configuratie. Reken op ongeveer één vCPU en 1-2 GB RAM per stuk.

Stap 6: De database back-uppen

Alles wat ertoe doet - scripts, flows, planningen, resources, taakgeschiedenis - zit in Postgres. Het volume met de afhankelijkheidscache bevat afgeleide gegevens en bouwt zichzelf opnieuw op.

docker compose exec db pg_dump -U postgres windmill | gzip > windmill-$(date +%F).sql.gz

Kopieer het van de server af. Let op: Windmill bewaart inloggegevens voor je andere systemen, dus behandel die dump als een geheim en versleutel hem in rust.

Waar mensen vastlopen

Een Redis-gebaseerd Compose-bestand van een blog kopiëren. Windmill heeft er nooit een nodig gehad. De container start en blijft eenvoudigweg stilstaan terwijl jij je afvraagt waarom de wachtrij hem niet gebruikt.

Dimensioneren op de ruststand. Het installeren van afhankelijkheden is de geheugenpiek. Een Python-taak die pandas importeert heeft de eerste keer veel meer RAM nodig dan bij elke run daarna, dus een stack die er stil goed uitziet kan op een koude taak stukslaan.

changeme laten staan. Dat is het Postgres-wachtwoord in de gepubliceerde .env, en het eerste wat een opportunistische scan probeert als je poort 5432 ooit naar buiten openzet.

Windmill beloont een machine met meer kernen eerder dan met snellere, wat de goedkope Europese multicore-pakketten hier ongewoon aantrekkelijk maakt. Dimensioneer op het aantal taken dat je tegelijk wilt draaien, bewaar de Postgres-dump versleuteld elders, en de dienst laat zich makkelijk beheren.

Voor meer zelfhostingprojecten en tips: de lijst awesome-selfhosted of de community r/selfhosted.

Frequently asked questions

Heb ik Redis nodig om Windmill zelf te hosten?

Nee, en hier gaan veel mensen de mist in. Windmill gebruikt PostgreSQL zowel als database als als takenwachtrij, dus het officiële Compose-bestand bevat geen Redis-dienst en geen REDIS_URL. Diverse handleidingen van derden voegen er toch een toe. Heb je een Compose-bestand met een Redis-container gekopieerd, dan draai je een dienst waar Windmill nooit verbinding mee maakt en die je gerust kunt verwijderen.

Hoe voeg ik meer workers toe aan een draaiende Windmill-instantie?

Voeg aan het Compose-bestand nog een windmill_worker-dienst toe die naar dezelfde DATABASE_URL wijst met MODE=worker, en draai daarna docker compose up -d. De workers stemmen af via Postgres, dus verder hoeft er niets herconfigureerd te worden. De praktische grens is je aantal kernen: elke standaardworker voert één taak tegelijk uit en wil ongeveer één vCPU en 1-2 GB RAM.

Hoe zet ik Windmill achter HTTPS?

De stack levert Caddy al mee, dat standaard gewone HTTP op poort 80 serveert. Voor automatische TLS stel je BASE_URL in op je domein en pas je het Caddyfile en de caddy-dienst aan om poort 443 open te zetten, zoals de opmerkingen in de meegeleverde .env beschrijven. Laat DNS naar de server wijzen voordat je start, zodat het certificaat bij de eerste keer opstarten kan worden uitgegeven.