Windmill è una piattaforma open source per sviluppatori che trasforma gli script in webhook, workflow, lavori pianificati e interfacce interne, posizionata contro Retool e Temporal e non contro un hosting per siti statici. L’edizione community è sotto licenza AGPL-3.0, quella enterprise dietro una chiave di licenza.
Dimensionarla non somiglia al dimensionamento di una normale applicazione web, perché l’unità di capacità è il worker, non l’applicazione.
L’architettura che determina le tue specifiche
Il docker-compose.yml ufficiale avvia sette servizi:
| Servizio | Immagine | Ruolo |
|---|---|---|
db | postgres:16 | Database e coda dei lavori |
windmill_server | ghcr.io/windmill-labs/windmill:main | API e interfaccia web, porta 8000 |
windmill_worker | stessa immagine, MODE=worker | Esegue i lavori |
windmill_worker_native | stessa immagine, NATIVE_MODE=true | Solo lavori leggeri |
windmill_indexer | stessa immagine, MODE=indexer | Ricerca full-text sui lavori |
windmill_extra | ghcr.io/windmill-labs/windmill-extra:latest | Language server per l’editor |
caddy | ghcr.io/windmill-labs/caddy-l4:2.11.4-1 | Reverse proxy sulla porta 80 |
Due voci di quella tabella pesano più delle altre.
Non c’è Redis. Windmill usa PostgreSQL come coda. Parecchie guide di terze parti aggiungono un container Redis e una REDIS_URL; il file Compose ufficiale non contiene né l’uno né l’altra, e copiare una guida simile significa far girare un servizio con cui Windmill non parla mai.
I worker sono il centro di costo. Il server resta relativamente inattivo. Quello che paghi davvero è capacità di worker.
RAM e CPU: dimensionare per worker
La regola pratica è un worker per vCPU, 1-2 GB di RAM ciascuno, più margine per Postgres e il server.
| Configurazione | vCPU / RAM | Cosa ottieni |
|---|---|---|
| Prova, un worker | 2 / 2 GB | Funziona, ma un lavoro alla volta e nessun margine per una grossa installazione di dipendenze |
| Stack predefinito, 1-2 worker | 2-4 / 4 GB | Il minimo praticabile per un uso reale |
| Più lavori in parallelo | 4 / 8 GB | L’obiettivo comodo per una piccola squadra |
I worker nativi sono l’eccezione da conoscere: eseguono lavori leggeri con circa 0,1 CPU e 128 MB, ed è per questo che lo stack predefinito ne include uno accanto a un worker standard senza pretendere un altro core.
La variabile che nessuno prevede è l’installazione delle dipendenze. Un lavoro Python che scarica pandas, o uno TypeScript con un lockfile corposo, fa schizzare la memoria ben oltre il valore a regime. Se i lavori falliscono solo alla prima esecuzione e poi passano, stai guardando la cache delle dipendenze costruirsi con troppa poca RAM.
Archiviazione: la crescita è la cache delle dipendenze
Il database resta contenuto a lungo: metadati dei lavori, script, flow e log sono testo. Il volume che cresce è worker_dependency_cache, dove finiscono ogni wheel Python e ogni pacchetto npm importati dai tuoi lavori, così le esecuzioni successive saltano l’installazione.
Parti da 40 GB. Tieni d’occhio il volume della cache più del database quando valuti un ampliamento, e preferisci NVMe o SSD: qui Postgres fa da coda oltre che da archivio ed è sensibile alla latenza di I/O.
Piani VPS che rispettano questi requisiti
| Provider | Piano | vCPU / RAM / Disco | Prezzo | Verdetto | Link |
|---|---|---|---|---|---|
| Contabo | Cloud VPS 4 | 4 / 8 GB / 100 GB SSD | 5,50 EUR/mese netto | Spazio per quattro worker al prezzo di un piano d’ingresso | Contabo |
| Hetzner Cloud | CX23 | 2 / 4 GB / 40 GB NVMe | 5,49 EUR/mese netto | Adatto allo stack predefinito a due worker | Hetzner |
| DigitalOcean | Basic 4 GB | 2 / 4 GB / 80 GB SSD | 24 USD/mese | Stesse specifiche del CX23, quattro volte il prezzo | DigitalOcean |
| Vultr | Regular 4 GB | 2 / 4 GB / 80 GB SSD | 20 USD/mese | La scelta di regioni più ampia | Vultr |
| Linode | Linode 4 GB | 2 / 4 GB / 80 GB SSD | 24 USD/mese | Prestazioni prevedibili, API solida | Linode |
Windmill è una delle poche applicazioni auto-ospitate per cui un piano da 1 GB non è escluso a priori: un singolo worker nativo ci sta davvero. Lì però non puoi far girare un worker standard, il che esclude qualsiasi lavoro Python o TypeScript con dipendenze: è una dimostrazione, non un’installazione.
Crescere
Windmill scala orizzontalmente aggiungendo container worker, non ingrandendo un processo. Per raddoppiare la produttività aggiungi un secondo servizio windmill_worker che punta alla stessa DATABASE_URL e dai alla macchina un altro core.
Questo ha una conseguenza pratica sulla scelta del VPS: qui più core battono core più veloci. I 4 vCPU di Contabo a 5,50 EUR netti comprano parallelismo per quattro worker, mentre il CX23 di Hetzner ne compra due a un prezzo sostanzialmente identico. Se il tuo carico è fatto di molti lavori piccoli invece che di pochi pesanti, quel rapporto è l’intera decisione.
- Osserva con
docker statsquale worker è saturo prima di ampliare. - Raggruppa i worker con i tag, così i lavori pesanti finiscono sulla macchina dimensionata per loro.
- Postgres porta la coda: dagli disco veloce prima che altra RAM.
Per uno sguardo più ampio ai piani disponibili, vedi il nostro confronto VPS completo.
Frequently asked questions
Quanta RAM serve a un'istanza di Windmill auto-ospitata?
Dimensiona per worker anziché per applicazione. La regola pratica è un worker per vCPU con 1-2 GB di RAM ciascuno, oltre a Postgres e al processo server. Un'istanza con un solo worker gira su 2 GB, lo stack Compose predefinito con due worker sta comodo su 4 GB, e 8 GB con 4 vCPU sono l'obiettivo sensato quando più lavori girano in parallelo.
Quanti core CPU dovrei assegnare a Windmill?
Parti da 2 vCPU e aggiungi un core per ogni worker in più, dato che un worker standard esegue un solo lavoro alla volta. I worker nativi sono l'eccezione: gestiscono lavori leggeri con circa 0,1 CPU e 128 MB, per questo lo stack predefinito ne include uno accanto al worker standard senza richiedere un altro core.
Windmill ha bisogno di Redis o di un altro broker di messaggi?
No. Windmill usa PostgreSQL sia come database sia come coda dei lavori. È insolito e vale la pena saperlo, perché molte guide di terze parti aggiungono un servizio Redis che il file Compose ufficiale non contiene. PostgreSQL 14 o successivo è l'unico archivio dati necessario, e aggiungere Redis produce soltanto un container sprecato.