[{"data":1,"prerenderedAt":207},["ShallowReactive",2],{"seo-verification":3,"blog-instalar-apache-airflow-en-un-vps-ma-es":6,"promo-bar-likely":206},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-instalar-apache-airflow-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},31,"instalar-apache-airflow-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"installer-apache-airflow-vps","installing-apache-airflow-on-a-vps-self-hosted-automation","تثبيت-apache-airflow-على-خادم-vps-أتمتة-ذاتية-الاستضافة","Instalar Apache Airflow en VPS: Docker Compose y PostgreSQL","Instala Apache Airflow en VPS con Docker Compose: PostgreSQL como backend, CeleryExecutor para escalar y gestión de secretos cifrados.",12,1,false,"2026-05-20T00:00:00+00:00","2026-11-04T16:30:25+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-apache-airflow-vps-poster.svg",{"categorySlug":33,"appSlug":34},"automatizacion","airflow","Apache Airflow es el estándar open source para orquestar pipelines de datos, flujos de trabajo ETL y tareas de ML en Python. Alojado de forma autónoma en un VPS, te libera del coste de un servicio gestionado (Cloud Composer, MWAA) manteniendo el control total sobre tus datos y dependencias. Esta guía cubre todo desde cero hasta una configuración lista para producción: PostgreSQL como base de datos de metadatos, CeleryExecutor para distribución de tareas, secretos y conexiones cifrados, y los reflejos correctos para depurar rápidamente.",[37,41,51,54,57,79,82,85,88,100,103,137,141],{"type":38,"title":39,"body":40},"h2","Por qué alojar Apache Airflow en tu propio VPS","Los orquestadores en la nube como Cloud Composer (Google) o MWAA (Amazon) incluyen Airflow como servicio gestionado, pero cobran el entorno por hora, independientemente de tu carga real. El alojamiento autónomo en un VPS significa que solo pagas el servidor, y tus DAGs se ejecutan cerca de tus fuentes de datos internas sin tránsito de red externo. La libertad va más allá: eliges la versión de Airflow, los providers de Python, las conexiones a bases de datos y el ejecutor. Para pipelines con datos sensibles o entornos regulados, mantenerse on-premise con un VPS dedicado no es una opción sino un requisito.",{"type":42,"title":43,"items":44},"ul","Qué orquesta Airflow en la práctica",[45,46,47,48,49,50],"**Pipelines de datos y ETL** — extraer desde APIs o bases de datos, transformar y cargar en un data warehouse.","**Flujos de trabajo de ML** — entrenamiento de modelos, evaluación, despliegue automatizado con dependencias entre pasos.","**Tareas programadas complejas** — backfills, catchups, reintentos configurables por tarea.","**Integraciones con terceros** — más de 80 providers oficiales: PostgreSQL, MySQL, S3, BigQuery, dbt, Spark, Kubernetes, HTTP.","**Pipelines de informes** — generación automática de informes periódicos y entrega por correo o Slack.","**Orquestación de microservicios** — lanzar trabajos remotos vía API y esperar su resultado antes de continuar.",{"type":38,"title":52,"body":53},"Requisitos del VPS y stack técnico","Airflow es el stack más exigente en recursos de esta categoría en modo CeleryExecutor, ya que ejecuta varios servicios en paralelo. **Para producción**: mínimo 4 vCPU y 8 GB de RAM. **Para desarrollo o pruebas**: 2 vCPU y 4 GB de RAM son suficientes en LocalExecutor. Prevé 40 GB de disco SSD para logs y metadatos. Requisitos de software: Docker 24+ y Docker Compose v2, Ubuntu 22.04 LTS o Debian 12, y un nombre de dominio apuntando a tu VPS para el reverse proxy HTTPS.",{"type":38,"title":55,"body":56},"Arquitectura Docker Compose de Airflow","El archivo `docker-compose.yaml` oficial de Airflow despliega seis servicios que forman una arquitectura completa. El **webserver** sirve la interfaz gráfica en el puerto 8080. El **scheduler** es el núcleo del sistema: analiza los DAGs y programa las tareas. El **worker** ejecuta las tareas asignadas. El **triggerer** gestiona las tareas diferibles. **PostgreSQL** es la base de datos de metadatos. **Redis** sirve como broker de mensajes entre el scheduler y los workers de Celery.",{"type":58,"title":59,"steps":60},"steps","Desplegar Airflow 3.x con Docker Compose",[61,64,67,70,73,76],{"title":62,"body":63},"Obtener el docker-compose oficial y crear directorios","Crea el directorio de trabajo, descarga el archivo de referencia y prepara las carpetas:\n```bash\nmkdir -p \u002Fopt\u002Fairflow && cd \u002Fopt\u002Fairflow\ncurl -LfO 'https:\u002F\u002Fairflow.apache.org\u002Fdocs\u002Fapache-airflow\u002Fstable\u002Fdocker-compose.yaml'\nmkdir -p .\u002Fdags .\u002Flogs .\u002Fplugins .\u002Fconfig\n```",{"title":65,"body":66},"Configurar el archivo .env (UID, PostgreSQL, clave secreta)","Crea `\u002Fopt\u002Fairflow\u002F.env` con las variables esenciales:\n```bash\necho \"AIRFLOW_UID=$(id -u)\" > .env\necho \"AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2:\u002F\u002Fairflow:airflow@postgres\u002Fairflow\" >> .env\necho \"AIRFLOW__CORE__FERNET_KEY=$(python3 -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())')\" >> .env\n```\n`FERNET_KEY` cifra las conexiones y variables — **genérala una sola vez y guarda una copia de seguridad**.",{"title":68,"body":69},"Inicializar la base de datos","Aplica las migraciones y crea la primera cuenta de administrador:\n```bash\ndocker compose up airflow-init\n```\nEspera el código de salida `0` — cualquier otro código indica un problema de conexión a PostgreSQL.",{"title":71,"body":72},"Iniciar todos los servicios","Lanza el stack completo en segundo plano:\n```bash\ndocker compose up -d\ndocker compose ps\n```\nTodos los contenedores deben alcanzar el estado `healthy` en uno a tres minutos.",{"title":74,"body":75},"Crear una cuenta de administrador personalizada","Crea tu cuenta permanente:\n```bash\ndocker compose exec airflow-webserver airflow users create \\\n  --username admin --firstname Nombre --lastname Apellido \\\n  --role Admin --email admin@tudominio.com \\\n  --password TuContraseñaSegura\n```",{"title":77,"body":78},"Exponer Airflow detrás de un reverse proxy con SSL","Nunca expongas el puerto 8080 directamente. Con Caddy:\n```bash\napt install -y caddy\ncat > \u002Fetc\u002Fcaddy\u002FCaddyfile \u003C\u003C 'EOF'\nairflow.tudominio.com {\n    reverse_proxy localhost:8080\n}\nEOF\nsystemctl reload caddy && ufw deny 8080\n```",{"type":38,"title":80,"body":81},"Configurar PostgreSQL como backend de metadatos","**Nunca uses SQLite en producción con Airflow en Docker.** SQLite no está diseñado para accesos concurrentes múltiples: el scheduler, el webserver y los workers acceden a la base de datos simultáneamente, y SQLite en volúmenes Docker tiene limitaciones de bloqueo que causan corrupción y pérdida de datos. Verifica que tu `.env` fuerza explícitamente la conexión a PostgreSQL:\n```\nAIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2:\u002F\u002Fairflow:airflow@postgres\u002Fairflow\n```\nHaz copias de seguridad regularmente: `docker compose exec postgres pg_dump -U airflow airflow > backup_$(date +%Y%m%d).sql`.",{"type":38,"title":83,"body":84},"Pasar al CeleryExecutor para múltiples workers","El **LocalExecutor** ejecuta tareas como subprocesos del scheduler — simple pero limitado a un solo nodo. El **CeleryExecutor** desacopla la ejecución: el scheduler empuja tareas a una cola Redis, y uno o más workers las consumen de forma independiente. Para escalar horizontalmente:\n```bash\ndocker compose up -d --scale airflow-worker=3\n```\nEsto inicia tres workers consumiendo la misma cola Redis en paralelo.",{"type":38,"title":86,"body":87},"Gestionar conexiones y variables secretas","Airflow cifra las conexiones y variables sensibles en la base de datos usando `FERNET_KEY`. **Vía UI**: Admin → Connections → Add Connection. **Vía variables de entorno**: una variable prefijada con `AIRFLOW_CONN_` anula cualquier conexión almacenada en la base de datos:\n```\nAIRFLOW_CONN_MY_POSTGRES=postgresql:\u002F\u002Fuser:password@host:5432\u002Fdbname\n```\n**Secret Backend**: para entornos Kubernetes o cloud, configura el proveedor de secretos apropiado (AWS Secrets Manager, HashiCorp Vault).",{"type":58,"title":89,"steps":90},"Crear y probar tu primer DAG Python",[91,94,97],{"title":92,"body":93},"Crear el archivo DAG en la carpeta \u002Fdags","Crea `\u002Fopt\u002Fairflow\u002Fdags\u002Fmi_primer_dag.py`:\n```python\nfrom airflow.sdk import DAG, task\nfrom datetime import datetime\n\nwith DAG(\n    dag_id='mi_primer_dag',\n    schedule='@daily',\n    start_date=datetime(2025, 1, 1),\n    catchup=False,\n) as dag:\n\n    @task\n    def extraer(): return {'filas': 42}\n\n    @task\n    def transformar(datos): return datos['filas'] * 2\n\n    @task\n    def cargar(resultado): print(f'Resultado: {resultado}')\n\n    cargar(transformar(extraer()))\n```",{"title":95,"body":96},"Verificar que el scheduler analiza el DAG sin errores","Verifica manualmente:\n```bash\ndocker compose exec airflow-scheduler airflow dags list | grep mi_primer_dag\n```\nSi el DAG no aparece tras 30 segundos, busca errores de análisis:\n```bash\ndocker compose logs airflow-scheduler | grep -i 'error\\|exception' | tail -20\n```",{"title":98,"body":99},"Lanzar una ejecución manual e inspeccionar logs","En la UI de Airflow, navega a DAGs, encuentra `mi_primer_dag`, actívalo y haz clic en ▶ Trigger DAG. Desde el terminal:\n```bash\ndocker compose exec airflow-scheduler airflow dags trigger mi_primer_dag\n```",{"type":38,"title":101,"body":102},"Securizar tu instalación Airflow","Una instalación Airflow expone potencialmente conexiones de bases de datos, variables y logs de ejecución. **Deshabilitar DAGs de ejemplo**:\n```\nAIRFLOW__CORE__LOAD_EXAMPLES=False\n```\n**Firewall en puerto 8080**: `ufw deny 8080`. **Autenticación**: configura LDAP u OAuth2 para organizaciones. **Rotación de secretos**: usa `airflow db rotate-fernet-key` si necesitas cambiar `FERNET_KEY`.",{"type":104,"title":105,"headers":106,"rows":111},"comparison","LocalExecutor vs CeleryExecutor vs KubernetesExecutor",[107,108,109,110],"Criterio","LocalExecutor","CeleryExecutor","KubernetesExecutor",[112,117,122,127,132],[113,114,115,116],"Recursos necesarios","2 vCPU \u002F 4 GB RAM","4 vCPU \u002F 8 GB RAM + Redis","Clúster Kubernetes requerido",[118,119,120,121],"Paralelismo","Limitado a CPUs del scheduler","Horizontal — workers según necesidad","Un pod por tarea — casi ilimitado",[123,124,125,126],"Aislamiento de tareas","Subprocesos compartidos","Workers separados, misma imagen","Pod aislado por tarea",[128,129,130,131],"Complejidad operacional","Simple — sin Redis","Moderada — Redis que mantener","Alta — Kubernetes requerido",[133,134,135,136],"Caso de uso ideal","Dev, pruebas, pipelines ligeros","Producción VPS, carga variable","Cloud-native, aislamiento fuerte",{"type":138,"title":139,"body":140},"tip","Actualizar Airflow sin interrupción","Para una actualización rolling sin interrumpir los DAGs en curso:\n```bash\ndocker compose stop airflow-webserver airflow-scheduler\ndocker compose pull\ndocker compose up -d airflow-webserver airflow-scheduler\ndocker compose exec airflow-scheduler airflow db upgrade\ndocker compose up -d\n```\nSiempre conserva una copia de seguridad reciente de PostgreSQL antes de cualquier actualización de versión.",{"type":38,"title":142,"body":143,"cta_url":144,"cta_title":145,"cta_body":146,"cta_button":147},"Depurar y leer los logs de Airflow","**Logs de tareas**: cada tarea escribe en `.\u002Flogs\u002Fdag_id\u002Frun_id\u002Ftask_id\u002F`. **Logs del scheduler**: los más importantes para diagnosticar DAGs que no se lanzan:\n```bash\ndocker compose logs airflow-scheduler --follow --tail=100\n```\n**Errores silenciosos**: si un DAG desaparece de la UI sin mensaje:\n```bash\ndocker compose exec airflow-webserver airflow dags list-import-errors\n```\n**Purga de logs**: configura `AIRFLOW__LOG_RETENTION_DAYS=30` para evitar la saturación del disco.","\u002Fapplications\u002Fautomatisation\u002Fairflow","Desplegar Airflow en VPS ServOrbit","ServOrbit ofrece VPS Power preconfigurados con Docker Compose para lanzar Airflow en menos de diez minutos.","Desplegar Airflow en VPS","Despliega Airflow en un VPS ServOrbit","VPS con Docker preinstalado, snapshots y ancho de banda incluido: la base adecuada para una pila Airflow en producción.","Ver los VPS","\u002Fapplications\u002Fautomatizacion\u002Fairflow",[153,172,189],{"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":171},"n8n",{"id":173,"slug":174,"slugs":175,"title":179,"excerpt":180,"readTime":163,"views":18,"isPinned":19,"noindex":19,"publishedAt":181,"updatedAt":182,"category":183,"categories":184,"featuredImage":29,"bgImage":30,"posterImage":186,"relatedSolution":187},24,"instalar-node-red-en-un-vps",{"fr":176,"en":177,"ar":178,"es":174},"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},[185],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-node-red-vps-poster.svg",{"categorySlug":33,"appSlug":188},"node-red",{"id":190,"slug":191,"slugs":192,"title":196,"excerpt":197,"readTime":154,"views":198,"isPinned":19,"noindex":19,"publishedAt":199,"updatedAt":182,"category":200,"categories":201,"featuredImage":29,"bgImage":30,"posterImage":203,"relatedSolution":204},25,"instalar-huginn-en-un-vps",{"fr":193,"en":194,"ar":195,"es":191},"installer-huginn-vps","installing-huginn-on-a-vps-self-hosted-automation","تثبيت-huginn-على-خادم-vps-أتمتة-ذاتية-الاستضافة","Instalar Huginn en un VPS: automatización self-hosted","Instale Huginn en un VPS para crear agentes que vigilan la web, extraen datos de páginas y disparan acciones, 100% self-hosted.",0,"2026-05-26T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[202],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-huginn-vps-poster.svg",{"categorySlug":33,"appSlug":205},"huginn",true,1794270609625]