[{"data":1,"prerenderedAt":206},["ShallowReactive",2],{"seo-verification":3,"blog-instalar-windmill-en-un-vps-ma-es":6,"promo-bar-likely":205},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-instalar-windmill-en-un-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":148,"ctaBody":149,"ctaButton":150,"ctaUrl":151,"relatedPosts":152},27,"instalar-windmill-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"installer-windmill-vps","installing-windmill-on-a-vps-self-hosted-automation","تثبيت-windmill-على-خادم-vps-أتمتة-ذاتية-الاستضافة","Instalar Windmill en un VPS: automatización self-hosted","Instale Windmill en su VPS: convierta sus scripts Python, TypeScript y Bash en workflows y UI internas, self-hosted mediante Docker.",13,1,false,"2026-05-24T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},2,"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Finstaller-windmill-vps-poster.svg",{"categorySlug":33,"appSlug":34},"automatizacion","windmill","Windmill es una plataforma open source que convierte código (Python, TypeScript, Go, Bash, SQL) en workflows, API e interfaces internas. Pensada para desarrolladores, combina la flexibilidad del código con la rapidez del no-code. Autoalojada en un VPS, se convierte en su motor de automatización y en su app builder interno, sin depender de un SaaS.",[37,41,52,55,62,87,90,99,102,106,109,117,146],{"type":38,"title":39,"body":40},"h2","Por qué autoalojar Windmill en un VPS","Windmill se ejecuta de forma continua en su servidor y expone cada uno de sus scripts como un endpoint REST autenticado por token, una tarea programada o una interfaz autogenerada. A diferencia de una función serverless, no hay arranque en frío ni límite de ejecución impuesto por un tercero. Sus scripts Python, TypeScript o Bash acceden directamente a las bases de datos y a los servicios internos de su VPS, sin atravesar una pasarela cloud. El backend está escrito en Rust: servidores de API sin estado y workers que extraen los jobs de una cola almacenada en PostgreSQL, lo que permite añadir workers sin tocar el resto.\n\nLa elección depende sobre todo de su forma de trabajar. Si lo que necesita es conectar SaaS entre sí en un lienzo visual, \u003Ca href=\"\u002Fes\u002Fblog\u002Finstalar-n8n-en-vps-con-docker\">n8n\u003C\u002Fa> sigue siendo más directo; para procesos de negocio muy largos con garantía de reanudación, \u003Ca href=\"\u002Fes\u002Fblog\u002Finstalar-temporal-en-un-vps\">Temporal\u003C\u002Fa> está hecho para eso. Windmill apunta a los equipos que ya escriben código y quieren hacerlo ejecutable, programable y utilizable por no desarrolladores en minutos. En cuanto a la licencia, el núcleo es AGPLv3 y la imagen Community Edition es gratuita, con cuotas y funciones reservadas a la edición Enterprise; revenderla u ofrecerla como servicio gestionado a sus clientes exige una licencia comercial.",{"type":42,"title":43,"items":44},"ul","Beneficios concretos del autoalojamiento",[45,46,47,48,49,50,51],"Ninguna facturación por ejecución: miles de jobs al día sin factura de computación en la nube.","Acceso directo a las bases de datos y servicios internos del VPS, sin túnel.","Secretos y claves API almacenados cifrados en Windmill y que nunca salen de su servidor.","Formularios de entrada y endpoints REST generados automáticamente para cada script, a partir de la firma de su función `main`.","Workers adicionales que se pueden añadir en caliente para absorber los picos de carga.","Varios workspaces aislados en una misma instancia: uno por equipo, por proyecto o por entorno.","Versionado: cada despliegue de un script se conserva, y Git Sync envía el workspace a un repositorio Git (incluido en Community Edition para workspaces de 2 usuarios como máximo).",{"type":38,"title":53,"body":54},"Requisitos técnicos","Windmill necesita como mínimo 2 vCPU y 4 GB de RAM. El stack oficial arranca PostgreSQL 18, el servidor, tres workers generalistas limitados a 2 GB de memoria cada uno, un worker nativo para los jobs ligeros, el servicio `windmill_extra` (autocompletado LSP y depurador del editor) y un Caddy al frente: con 4 GB, reduzca por tanto el número de workers. Cuente con 20 GB de disco para la base de datos, los logs y la caché de dependencias de los workers, que crece con cada paquete pip o npm utilizado. Basta con Ubuntu 22.04\u002F24.04 o Debian 12 con Docker Engine y el plugin Docker Compose v2, más un nombre de dominio que apunte al VPS para el certificado TLS. No se necesita GPU. Si prevé ejecutar workers Python pesados (ML, pandas sobre grandes conjuntos de datos), opte por al menos 4 vCPU y 8 GB de RAM.",{"type":42,"title":56,"items":57},"Dimensionar el VPS según el uso",[58,59,60,61],"**La regla del editor**: aproximadamente 1 worker por vCPU y de 1 a 2 GB de RAM por worker. Un job que supera el límite de memoria de su worker (2048 MB por defecto) se termina con el código de salida 137.","**Uso individual o prueba**: 2 vCPU, 4 GB de RAM y 20 GB de disco, con un solo worker generalista además del worker nativo. Suficiente para scripts programados y algunos webhooks.","**Equipo pequeño**: 4 vCPU, 8 GB de RAM y 40 GB de disco. Los tres workers del archivo oficial y PostgreSQL caben en el mismo host sin saturar la memoria.","**Varios equipos o jobs Python pesados**: 8 vCPU, 16 GB de RAM y 80 GB de disco para seis a ocho workers. En ese punto, una base PostgreSQL separada simplifica las copias de seguridad y las actualizaciones.",{"type":63,"title":64,"steps":65},"steps","Desplegar Windmill con Docker Compose",[66,69,72,75,78,81,84],{"title":67,"body":68},"Descargar los archivos oficiales","Conéctese por SSH a su VPS y descargue los tres archivos de referencia publicados en el repositorio de Windmill: el `docker-compose.yml`, el `Caddyfile` del reverse proxy y el `.env`:\n\n```bash\nmkdir -p \u002Fopt\u002Fwindmill && cd \u002Fopt\u002Fwindmill\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fwindmill-labs\u002Fwindmill\u002Fmain\u002Fdocker-compose.yml -o docker-compose.yml\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fwindmill-labs\u002Fwindmill\u002Fmain\u002FCaddyfile -o Caddyfile\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fwindmill-labs\u002Fwindmill\u002Fmain\u002F.env -o .env\n```\n\nNo hace falta clonar todo el repositorio. Estos archivos siguen la rama `main`: reléalos antes de cada actualización, porque el stack evoluciona (paso a PostgreSQL 18, servicio `windmill_extra`…).",{"title":70,"body":71},"Rellenar el archivo .env","El `.env` solo contiene dos variables. Sustituya la contraseña por defecto de PostgreSQL y fije la imagen en una versión publicada en lugar de `main` (1.864.1 a 06\u002F11\u002F2026, que debe comprobar en la página de releases de GitHub):\n\n```bash\nDATABASE_URL=postgres:\u002F\u002Fpostgres:MOT_DE_PASSE_FORT@db\u002Fwindmill?sslmode=disable\nWM_IMAGE=ghcr.io\u002Fwindmill-labs\u002Fwindmill:1.864.1\n```\n\nCopie la misma contraseña en `POSTGRES_PASSWORD`, bajo el servicio `db` del `docker-compose.yml`. El host `db` es el nombre del servicio PostgreSQL dentro del stack: no lo sustituya por `localhost`. Para usar una base existente, apunte `DATABASE_URL` hacia ella y ponga el servicio `db` en `replicas: 0`.",{"title":73,"body":74},"Arrancar el stack","Lance el conjunto y siga el arranque del servidor:\n\n```bash\ndocker compose up -d\ndocker compose ps\ndocker compose logs -f windmill_server\n```\n\n`docker compose ps` debe listar `db`, `windmill_server`, tres réplicas de `windmill_worker`, `windmill_worker_native`, `windmill_extra` y `caddy`; el indexador de búsqueda de texto completo (`windmill_indexer`) se queda en cero réplicas, porque es una función Enterprise. El servidor espera a que PostgreSQL supere su healthcheck y luego aplica él mismo las migraciones de esquema. Escucha en el puerto 8000 de la red Docker, sin publicarse en el host: es Caddy quien recibe el tráfico.",{"title":76,"body":77},"Configurar el reverse proxy y el TLS","Lo más sencillo es dejar que el Caddy incluido obtenga el certificado Let's Encrypt. En el servicio `caddy` del `docker-compose.yml`, descomente el puerto 443 y sustituya `BASE_URL=\":80\"` por su dominio; después vuelva a lanzar `docker compose up -d`:\n\n```yaml\n  caddy:\n    ports:\n      - 80:80\n      - 25:25\n      - 443:443\n    environment:\n      - BASE_URL=windmill.example.com\n```\n\nMantenga abierto el puerto 80 para la validación. Si un nginx ya sirve otros sitios en el VPS, elimine el servicio `caddy`, publique `127.0.0.1:8000:8000` en `windmill_server` y `127.0.0.1:3000:3000` en `windmill_extra`, y reproduzca el enrutamiento del `Caddyfile`: las rutas `\u002Fws\u002F`, `\u002Fws_mp\u002F` y `\u002Fws_debug\u002F` van a `windmill_extra`, y todo lo demás al servidor.\n\n```nginx\nlocation ~ ^\u002Fws(_mp|_debug)?\u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:3000;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n    proxy_set_header Host $host;\n}\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8000;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n    proxy_set_header Host $host;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n}\n```\n\nLas cabeceras `Upgrade` y `Connection` son imprescindibles: el editor usa WebSockets para el autocompletado y la depuración. El certificado se obtiene después con `certbot --nginx -d windmill.example.com`.",{"title":79,"body":80},"Conectarse y asegurar","Abra `https:\u002F\u002Fwindmill.example.com` e inicie sesión con la cuenta superadmin por defecto, `admin@windmill.dev` \u002F `changeme`. El asistente del primer arranque propone sustituirla por su propia cuenta: hágalo, porque si se salta el paso las credenciales por defecto siguen activas, y es el fallo más habitual en las instancias Windmill expuestas públicamente. Después, en **Instance settings**, fije la Base URL en la dirección pública en `https:\u002F\u002F`: Windmill la usa para construir las URL de los webhooks y los enlaces de retorno de los flows. Por último, cree su primer workspace con un identificador corto (`prod`, `equipo-datos`).",{"title":82,"body":83},"Ajustar el número de workers","El archivo oficial arranca tres réplicas de `windmill_worker`, cada una limitada a 2048 MB. En un VPS de 4 GB, baje a uno o dos; en una máquina mayor, suba a un worker por vCPU:\n\n```bash\ndocker compose up -d --scale windmill_worker=2\ndocker compose ps windmill_worker\n```\n\nPara que el ajuste sea permanente, modifique `deploy.replicas` del servicio en el `docker-compose.yml`. El servidor no necesita reiniciarse: los workers se registran solos y aparecen en la página **Workers** de la interfaz, con su grupo (`default` o `native`).",{"title":85,"body":86},"Actualizar Windmill","Cambie la etiqueta en `WM_IMAGE` tras leer las notas de versión y después:\n\n```bash\ndocker compose pull\ndocker compose up -d\ndocker image prune\n```\n\nEl `pull` descarga las nuevas imágenes mientras los contenedores antiguos siguen en marcha; al reiniciar, el servidor migra la base por sí solo y los workers terminan sus jobs en curso dentro del plazo de parada de Docker (30 segundos). Haga una copia de seguridad de la base justo antes, y no lance `docker image prune -a` salvo si el VPS no aloja nada más: el comando también borra las imágenes de los demás proyectos.",{"type":38,"title":88,"body":89},"Configuración después de la instalación","Una vez la instancia en línea, seis ajustes deciden cómo se ejecutarán sus scripts en producción. Todos se hacen desde la interfaz, workspace por workspace.",{"type":42,"title":91,"items":92},"Los ajustes esenciales",[93,94,95,96,97,98],"**Workspaces**: un workspace aísla scripts, flows, secretos y miembros. Cree uno por equipo o por entorno en lugar de mezclarlo todo, y reserve el rol superadmin a la administración de la instancia.","**Variables y secretos**: todas las variables se cifran con una clave simétrica propia del workspace; las marcadas como secretas dejan de mostrarse en la interfaz una vez introducidas. Es el lugar de los tokens de API y las contraseñas, nunca el código del script.","**Recursos**: objetos JSON tipados (conexión PostgreSQL, cuenta SMTP, credenciales OAuth). Un parámetro tipado `postgresql` en un script solo propone entonces los recursos de ese tipo en el formulario generado.","**Programaciones**: cada script o flow acepta una o varias programaciones en formato cron de cinco campos, con un campo de segundos opcional al principio. El gestor de errores de programación es una función Enterprise; en Community Edition, vigile las ejecuciones fallidas desde la lista de runs.","**Webhooks**: un script se llama de forma asíncrona con `\u002Fapi\u002Fw\u002F\u003Cworkspace>\u002Fjobs\u002Frun\u002Fp\u002F\u003Cruta>` (respuesta: el identificador del job) o síncrona con `\u002Fapi\u002Fw\u002F\u003Cworkspace>\u002Fjobs\u002Frun_wait_result\u002Fp\u002F\u003Cruta>` (respuesta: el resultado). Autentique con la cabecera `Authorization: Bearer \u003Ctoken>` en lugar de `?token=`, que acaba en los registros de acceso.","**Git Sync**: en los ajustes del workspace, vincule un repositorio para enviar a él scripts, flows y recursos en cada despliegue. Gratuito en Community Edition hasta 2 usuarios por workspace; el despliegue automático desde Git está reservado a la edición Enterprise.",{"type":38,"title":100,"body":101},"Ejemplo: un script Python de principio a fin","Este script consulta una API, conserva los elementos activos y los inserta en PostgreSQL mediante un recurso de Windmill. Cree un script Python, pegue el código y lánzelo desde el editor:\n\n```python\n# requirements:\n# httpx\n# psycopg2-binary\nfrom typing import TypedDict\n\nimport httpx\nimport psycopg2\n\n\nclass postgresql(TypedDict):\n    host: str\n    port: int\n    user: str\n    dbname: str\n    sslmode: str\n    password: str\n\n\ndef main(api_url: str, db: postgresql) -> dict:\n    resp = httpx.get(api_url, timeout=10)\n    resp.raise_for_status()\n    rows = [r for r in resp.json() if r.get(\"active\")]\n    conn = psycopg2.connect(\n        host=db[\"host\"], port=db[\"port\"], user=db[\"user\"],\n        password=db[\"password\"], dbname=db[\"dbname\"], sslmode=db[\"sslmode\"],\n    )\n    with conn, conn.cursor() as cur:\n        cur.executemany(\n            \"INSERT INTO items (id, name) VALUES (%(id)s, %(name)s) ON CONFLICT DO NOTHING\",\n            rows,\n        )\n    conn.close()\n    return {\"candidates\": len(rows), \"source\": api_url}\n```\n\nLos comentarios `# requirements:` sustituyen la deducción automática de dependencias a partir de los imports: útil aquí, porque el import `psycopg2` se publica bajo el paquete `psycopg2-binary`. Windmill resuelve esos paquetes, escribe un lockfile y los guarda en caché en el worker, de modo que una misma versión del script se ejecuta siempre con las mismas dependencias. La clase `postgresql`, con el nombre del tipo de recurso, hace aparecer un selector de recursos en el formulario. Una vez desplegado bajo la ruta `f\u002Fetl\u002Fimport_items`, el script se llama desde cualquier herramienta:\n\n```bash\ncurl -X POST \"https:\u002F\u002Fwindmill.example.com\u002Fapi\u002Fw\u002Fprod\u002Fjobs\u002Frun_wait_result\u002Fp\u002Ff\u002Fetl\u002Fimport_items\" \\\n  -H \"Authorization: Bearer $WM_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"api_url\": \"https:\u002F\u002Fapi.example.com\u002Fitems\"}'\n```",{"type":103,"title":104,"body":105},"tip","Endurecimiento de la instancia","No publique nunca los puertos 8000 y 3000 en la interfaz pública: solo el reverse proxy debe alcanzarlos, en local. Haga copias de seguridad de la base con `docker compose exec -T db pg_dumpall -U postgres | gzip > \u002Fbackups\u002Fwindmill-$(date +%F).sql.gz`: el volcado debe cubrir todo el clúster, no solo la base `windmill`, porque Windmill crea bases anexas y vincula sus políticas de seguridad a roles de nivel clúster. Ese volcado contiene sus secretos cifrados: guárdelo fuera del VPS y protéjalo como un secreto. Monte el socket de Docker en los workers solo si confía en todos los usuarios de la instancia, ya que da a los scripts el control del host. Por último, deje `REQUIRE_SIGNED_DEBUG_REQUESTS=true` en `windmill_extra`: desactivarlo en una instancia accesible desde Internet expone un depurador capaz de ejecutar código sin autenticación.",{"type":38,"title":107,"body":108},"Resolución de problemas: los errores de un primer despliegue","La mayoría de los incidentes vienen de la base de datos, de la memoria de los workers o del reverse proxy. Los síntomas y sus correcciones:",{"type":42,"title":110,"items":111},"Síntomas y correcciones",[112,113,114,115,116],"**El contenedor `db` se detiene justo después de una actualización**: el volumen lo creó PostgreSQL 16 y la imagen ha pasado a 18, que se niega a leerlo. Siga el procedimiento de migración de la documentación (volcado completo y restauración), o fije `postgres:16` con su antiguo punto de montaje: la versión 16 sigue mantenida hasta noviembre de 2028.","**Job interrumpido con el código 137**: ha superado el límite de memoria de su worker. Aumente `resources.limits.memory` del servicio `windmill_worker`, o reduzca el tamaño de los datos que el script carga en memoria.","**Servidor o workers incapaces de alcanzar la base**: `DATABASE_URL` apunta a `localhost` en lugar del servicio `db`, o la contraseña difiere de `POSTGRES_PASSWORD`. Corrija el `.env` y después ejecute `docker compose up -d` para recrear los contenedores.","**`ModuleNotFoundError` o instalación de dependencias fallida**: el worker descarga los paquetes en la primera ejecución y debe alcanzar `pypi.org` y `files.pythonhosted.org` por HTTPS saliente. Detrás de un proxy corporativo, las variables `PY_TRUSTED_HOST` y `PY_INDEX_CERT` gestionan la confianza; un índice privado se declara en los Instance settings (edición Enterprise).","**Editor sin autocompletado, depurador mudo**: el reverse proxy no enruta `\u002Fws\u002F`, `\u002Fws_mp\u002F` y `\u002Fws_debug\u002F` hacia `windmill_extra`, o elimina las cabeceras `Upgrade` y `Connection`. Retome el enrutamiento del `Caddyfile` oficial.",{"type":118,"title":119,"headers":120,"rows":125},"comparison","Windmill, n8n o Temporal",[121,122,123,124],"Criterio","Windmill","n8n","Temporal",[126,131,136,141],[127,128,129,130],"Escritura de los workflows","Scripts Python, TypeScript, Go, Bash, SQL… ensamblados en flows","Lienzo de nodos; nodo Code en JavaScript o Python","Código de aplicación vía SDK (Go, Java, Python, TypeScript, .NET, PHP, Ruby, Rust)",[132,133,134,135],"Licencia","AGPLv3 para el núcleo; Community Edition gratuita con cuotas, funciones Enterprise bajo licencia","Sustainable Use License (fair-code), archivos `.ee` bajo licencia comercial","MIT para el servidor",[137,138,139,140],"Interfaz","Editor web, formularios y apps internas generados","Editor visual de nodos","Interfaz web de observación; el código se escribe fuera de la herramienta",[142,143,144,145],"Para quién","Equipos que escriben código y quieren exponerlo rápido","Integraciones visuales entre SaaS","Procesos largos con fuertes exigencias de durabilidad",{"type":103,"body":147},"**Instalarlo con un solo clic desde el Marketplace de ServOrbit.** Si prefiere evitar la configuración manual, el Marketplace de ServOrbit aprovisiona Windmill automáticamente — servidor, dos workers, PostgreSQL 16, reverse proxy nginx y certificado Let's Encrypt — en unos minutos. La sección «Primer acceso» de su área de cliente indica la URL y las credenciales generadas. La ficha de Windmill, accesible desde el botón al final de este artículo, le permite empezar.","Despliegue Windmill con un clic en su VPS ServOrbit","El Marketplace de ServOrbit aprovisiona automáticamente Windmill con PostgreSQL 16, dos workers y un reverse proxy — sus scripts pasan a producción en unos minutos, sin una sola línea de configuración.","Ver la ficha de Windmill","\u002Fapplications\u002Fautomatizacion\u002Fwindmill",[153,171,188],{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":162,"views":163,"isPinned":19,"noindex":19,"publishedAt":164,"updatedAt":165,"category":166,"categories":167,"featuredImage":29,"bgImage":30,"posterImage":169,"relatedSolution":170},3,"instalar-n8n-en-vps-con-docker",{"fr":157,"en":158,"ar":159,"es":155},"installer-n8n-vps","install-n8n-on-vps-with-docker-complete-2026-guide","تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026","Instalar n8n en un VPS con Docker: guía completa 2026","Despliegue n8n en VPS con Docker, reverse proxy y HTTPS. Crash V8, 502 nginx, migración de npm a Docker y seguridad de ejecuciones persistidas (advisory agosto 2026).",19,4,"2026-06-05T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[168],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":33,"appSlug":123},{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":163,"views":23,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":29,"bgImage":30,"posterImage":185,"relatedSolution":186},26,"instalar-activepieces-en-un-vps",{"fr":175,"en":176,"ar":177,"es":173},"installer-activepieces-vps","installing-activepieces-on-a-vps-self-hosted-automation","تثبيت-activepieces-على-خادم-vps-أتمتة-ذاتية-الاستضافة","Instalar Activepieces en un VPS: automatización self-hosted","Despliegue Activepieces en su VPS: automatización no-code self-hosted, datos privados, integraciones ilimitadas y despliegue Docker en 15 minutos.","2026-05-25T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-activepieces-vps-poster.svg",{"categorySlug":33,"appSlug":187},"activepieces",{"id":189,"slug":190,"slugs":191,"title":195,"excerpt":196,"readTime":163,"views":18,"isPinned":19,"noindex":19,"publishedAt":197,"updatedAt":198,"category":199,"categories":200,"featuredImage":29,"bgImage":30,"posterImage":202,"relatedSolution":203},24,"instalar-node-red-en-un-vps",{"fr":192,"en":193,"ar":194,"es":190},"installer-node-red-vps","installing-node-red-on-a-vps-self-hosted-automation","تثبيت-node-red-على-خادم-vps-أتمتة-ذاتية-الاستضافة","Instalar Node-RED en un VPS: automatización self-hosted","Instale Node-RED en un VPS para automatizar sus flujos de trabajo flow-based, conectar sus API y dispositivos IoT, todo self-hosted y seguro.","2026-05-27T00:00:00+00:00","2026-11-04T16:30:24+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[201],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-node-red-vps-poster.svg",{"categorySlug":33,"appSlug":204},"node-red",true,1794270614439]