Pruebas independientes Actualizado agosto 2026 387 guías de autoalojamiento 5 proveedores VPS probados

guide

Cómo Auto-Hospedar Windmill en un VPS (Guía Completa)

Despliega Windmill, la alternativa open source a Retool y Temporal, en un VPS con la pila Compose oficial. Dimensionado por worker, TLS con Caddy y copias de seguridad.

Windmill convierte scripts en webhooks, flujos de trabajo, tareas programadas e interfaces internas: una alternativa open source a Retool y Temporal. Auto-hospedarlo es sencillo, con una trampa que conviene conocer antes de empezar: no usa Redis, digan lo que digan unas cuantas guías en la web.

¿Por qué auto-hospedar Windmill?

El plan en la nube factura por usuario y por ejecución. Auto-hospedar elimina ambos contadores, algo que importa en una plataforma de automatización: las tareas que más te interesa ejecutar de forma periódica son justo las que acumularían cargos por ejecución. Además mantiene tus scripts, credenciales y registros de tareas en tu propia máquina, y esos scripts suelen guardar claves de API de todo lo demás que administras.

La edición comunitaria es AGPL-3.0. La empresarial está detrás de una clave de licencia y otra etiqueta de imagen; no la necesitas para operar la plataforma.

Elegir el VPS adecuado

Windmill se dimensiona por worker, no por aplicación. La regla práctica es un worker por vCPU con 1-2 GB de RAM cada uno, además de Postgres y el proceso servidor.

ProveedorPlanvCPU / RAM / DiscoPrecioNotasEnlace
ContaboCloud VPS 44 / 8 GB / 100 GB SSD5.50 EUR/mes sin IVACuatro núcleos significan cuatro workers en paraleloContabo
Hetzner CloudCX232 / 4 GB / 40 GB NVMe5.49 EUR/mes sin IVAEncaja con la pila por defecto de dos workersHetzner
DigitalOceanBasic 4 GB2 / 4 GB / 80 GB SSD24 USD/mesMismas especificaciones que el CX23 a cuatro veces el precioDigitalOcean
VultrRegular 4 GB2 / 4 GB / 80 GB SSD20 USD/mesLa mayor elección de regionesVultr
LinodeLinode 4 GB2 / 4 GB / 80 GB SSD24 USD/mesRendimiento predecibleLinode

Como el rendimiento crece con el número de workers, aquí importa más el número de núcleos que la frecuencia. Para una comparación detallada, visita nuestra página de comparativa completa de VPS.

Requisitos previos

Paso 1: Preparar el VPS

Conéctate y actualiza:

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

Instala Docker y el complemento Compose:

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

Abre los puertos que usará Caddy:

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

Paso 2: Descargar la pila Compose oficial

No escribas a mano un fichero Compose para Windmill. El proyecto publica uno y conecta correctamente los workers, el indexador y los servidores de lenguaje:

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

La pila que acabas de descargar ejecuta siete servicios:

En esa lista no hay Redis, y en la tuya tampoco debería haberlo.

Paso 3: Fijar contraseña y dominio

El .env incluido trae un valor por defecto deliberadamente débil:

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

Cambia changeme por un secreto generado antes del primer arranque, ya que la base de datos se crea en ese arranque:

openssl rand -hex 24

Define BASE_URL con tu dominio en el mismo fichero. Caddy lo lee para solicitar un certificado.

Paso 4: Arrancar

docker compose up -d
docker compose ps

El primer arranque descarga varias imágenes y ejecuta las migraciones de la base de datos, así que dale un minuto. Abre tu dominio y crea la primera cuenta: pasa a ser la superadministradora de la instancia.

Paso 5: Añadir workers según los necesites

Esta es la parte que diferencia a Windmill de la mayoría de aplicaciones auto-hospedadas. No escalas haciendo más grande un proceso, sino añadiendo contenedores worker. Copia el bloque windmill_worker del docker-compose.yml, dale un nombre de servicio nuevo, mantén la misma DATABASE_URL y MODE=worker, y aplica:

docker compose up -d

Los workers se coordinan a través de Postgres, así que no cambia ninguna otra configuración. Reserva alrededor de un vCPU y 1-2 GB de RAM para cada uno.

Paso 6: Respaldar la base de datos

Todo lo que importa (scripts, flujos, programaciones, recursos, historial de tareas) vive en Postgres. El volumen de caché de dependencias son datos derivados y se reconstruye solo.

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

Cópialo fuera del servidor. Ten en cuenta que Windmill almacena credenciales de tus otros sistemas, así que trata ese volcado como un secreto y cífralo en reposo.

Dónde tropieza la gente

Copiar de un blog un fichero Compose basado en Redis. Windmill nunca lo ha necesitado. El contenedor arrancará y se quedará ocioso mientras te preguntas por qué la cola no lo usa.

Dimensionar sobre el estado en reposo. La instalación de dependencias es el pico de memoria. Una tarea de Python que importa pandas necesita bastante más RAM la primera vez que se ejecuta que en las siguientes, así que una pila que parece correcta en reposo puede fallar en una tarea en frío.

Dejar changeme tal cual. Es la contraseña de Postgres en el .env publicado y lo primero que prueba un escaneo oportunista si alguna vez expones el puerto 5432.

Windmill premia una máquina con más núcleos antes que con núcleos más rápidos, lo que vuelve especialmente interesantes aquí a los planes europeos multinúcleo baratos. Dimensiona según cuántas tareas quieras ejecutar a la vez, guarda el volcado de Postgres cifrado en otro sitio y el servicio dará pocos disgustos.

Para más proyectos y consejos de auto-hospedaje, recorre la lista awesome-selfhosted o la comunidad r/selfhosted.

Frequently asked questions

¿Necesito Redis para auto-hospedar Windmill?

No, y aquí tropieza mucha gente. Windmill usa PostgreSQL como base de datos y como cola de tareas, por lo que el fichero Compose oficial no contiene servicio Redis ni variable REDIS_URL. Varias guías de terceros añaden uno igualmente. Si copiaste un fichero Compose con un contenedor Redis, estás ejecutando un servicio al que Windmill nunca se conecta y puedes eliminarlo sin riesgo.

¿Cómo añado más workers a una instancia de Windmill en marcha?

Añade al fichero Compose otro servicio windmill_worker apuntando a la misma DATABASE_URL con MODE=worker y ejecuta docker compose up -d. Los workers se coordinan a través de Postgres, así que no hay que reconfigurar nada más. El límite práctico es tu número de núcleos: cada worker estándar ejecuta una tarea a la vez y quiere en torno a un vCPU y 1-2 GB de RAM.

¿Cómo pongo Windmill detrás de HTTPS?

La pila ya incluye Caddy, que por defecto sirve HTTP simple en el puerto 80. Para obtener TLS automático, define BASE_URL con tu dominio y edita el Caddyfile y el servicio caddy para exponer el 443, tal como describen los comentarios del .env incluido. Apunta el DNS al servidor antes de arrancarlo para que el certificado se emita en el primer inicio.