[{"data":1,"prerenderedAt":167},["ShallowReactive",2],{"seo-verification":3,"blog-woodpecker-ci-forgejo-pipeline-cicd-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-woodpecker-ci-forgejo-pipeline-cicd-vps-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":104,"ctaBody":105,"ctaButton":106,"ctaUrl":107,"relatedPosts":108},212,"woodpecker-ci-forgejo-pipeline-cicd-vps",{"fr":12,"en":13,"ar":14,"es":10},"woodpecker-ci-pipeline-vps-forgejo","woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps","Woodpecker CI y Forgejo: pipeline CI\u002FCD en un VPS","Despliega Woodpecker CI v3 con Forgejo en tu VPS: configuración Docker Compose, pipelines YAML, secretos, runners multi-arquitectura y depuración OAuth.",11,1,false,"2026-08-02T00:00:00+00:00","2026-09-07T11:26:10+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\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg","Woodpecker CI es un motor de pipelines de código abierto — un fork comunitario de Drone CI bajo licencia Apache 2.0 — diseñado para integrarse de forma nativa con Forgejo. En la versión 3.18 (agosto de 2026), cada paso se ejecuta en un contenedor Docker aislado y el binomio servidor + agente consume menos de 50 MB de RAM. En un VPS, las compilaciones se ejecutan lo más cerca posible del repositorio git: sin colas cloud, sin cuota de minutos que vigilar y sin que ningún secreto de integración abandone tu red.",[34,38,49,52,55,83,86,89,92,95,98,101],{"type":35,"title":36,"body":37},"h2","Por qué abandonar los servicios CI cloud en favor de un pipeline en tu VPS","Los servicios CI cloud facturan por minuto de compilación e imponen colas compartidas cuyo tiempo de espera aumenta con el volumen. Cuando los repositorios crecen o los tests se multiplican, la factura supera rápidamente el coste de un VPS dedicado. Alojar Forgejo y Woodpecker CI en el mismo servidor elimina esta latencia de red: el runner lee el código localmente, sin pasar por infraestructura de terceros. También controlas el ciclo de actualizaciones — ningún cambio de precios o política de retención de logs se aplica sin tu consentimiento. Para equipos con restricciones regulatorias o de confidencialidad, esta es una ventaja decisiva: los secretos de integración (claves SSH de despliegue, tokens de acceso a registros) nunca cruzan el perímetro de tu red. Por último, la licencia Apache 2.0 garantiza que el código fuente permanezca auditable y que el proyecto no pueda quedar encerrado tras una oferta comercial exclusiva.",{"type":39,"title":40,"items":41},"ul","Lo que aporta Woodpecker CI en un VPS",[42,43,44,45,46,47,48],"**Aislamiento Docker por paso** — cada step se ejecuta en su propio contenedor sin estado compartido entre jobs; un step que falla no corrompe los siguientes.","**Huella de memoria reducida** — servidor + agente arrancan en menos de 50 MB de RAM combinados, dejando la mayor parte de los recursos para las compilaciones.","**Sintaxis YAML minimalista** — un archivo `.woodpecker.yaml` en la raíz del repositorio es suficiente para describir todo el pipeline; la sintaxis es más legible que GitHub Actions.","**Integración nativa con Forgejo** — el OAuth2 de Forgejo es el único mecanismo de autenticación requerido; los webhooks se registran automáticamente.","**Multi-arquitectura sin plugins adicionales** — la clave `platform: linux\u002Farm64` basta para enrutar un job a un agente ARM64; no se necesita abstracción adicional.","**Secretos centralizados por repositorio o globales** — las variables sensibles se inyectan en tiempo de compilación y nunca aparecen en el archivo YAML versionado.","**Licencia Apache 2.0** — código fuente auditable, comunidad fork activa, sin dependencia de un proveedor propietario.",{"type":35,"title":50,"body":51},"Requisitos medidos: VPS, Forgejo y red","Woodpecker CI puede instalarse en el mismo VPS que Forgejo o en un servidor dedicado. Para ambos servicios combinados, prevé al menos 1 GB de RAM y 2 GB para un uso cómodo con varios repositorios activos en paralelo. En cuanto al software: Docker Engine 24 o superior, Docker Compose v2 (el comando `docker compose`, no `docker-compose`), un subdominio dedicado a Woodpecker — por ejemplo `ci.your-domain.com` — apuntando a la IP del VPS, el puerto 443 abierto para HTTPS y acceso SSH. Forgejo debe ser accesible desde el contenedor de Woodpecker: ya sea a través de la red Docker interna si ambos servicios comparten el mismo host, o mediante su URL pública HTTPS si Woodpecker está en un VPS separado. Woodpecker CI v3 es compatible con Forgejo v1.20 y superior.",{"type":35,"title":53,"body":54},"Woodpecker CI vs Forgejo Actions: cuándo usar cuál","Forgejo Actions — disponible desde Forgejo v1.19 en modo experimental, estabilizado progresivamente — replica la sintaxis de GitHub Actions: si tus equipos ya tienen flujos de trabajo `.github\u002Fworkflows\u002F` en producción, la migración es casi transparente. Forgejo Actions es la elección natural para un parque de repositorios que coexiste con GitHub o reutiliza acciones públicas del marketplace. Woodpecker CI responde a necesidades diferentes: su sintaxis YAML es más directa, menos cargada de conceptos heredados de GitHub, y su arquitectura servidor-agente permite desacoplar la forja git del motor CI — útil cuando varios sistemas git necesitan compartir el mismo parque de runners. Woodpecker también es más adecuado para escenarios de compilación multi-arquitectura, donde se quiere enrutar explícitamente un job a un agente ARM o x86. En resumen: elige Forgejo Actions si la compatibilidad con GitHub Actions es prioritaria, y Woodpecker CI si prefieres una sintaxis depurada, un despliegue desacoplado o un parque de runners heterogéneo.",{"type":56,"title":57,"steps":58},"steps","Desplegar Woodpecker CI en tu VPS",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"Crear una OAuth App en Forgejo","En Forgejo, ve a Ajustes → Aplicaciones → Gestionar aplicaciones OAuth2. Asigna un nombre a la aplicación (por ejemplo `woodpecker`) e introduce la URL de redirección: `https:\u002F\u002Fci.your-domain.com\u002Fauthorize`. Anota el Client ID y el Client Secret generados; se usarán en las variables de entorno del servidor Woodpecker.",{"title":63,"body":64},"Generar un secreto compartido servidor-agente","Genera una cadena aleatoria robusta: `openssl rand -hex 32`. Este valor se asignará como `WOODPECKER_AGENT_SECRET` tanto en el servicio servidor como en el agente; autentifica la comunicación gRPC entre ambos. Guárdalo en un gestor de secretos o en un archivo `.env` no versionado.",{"title":66,"body":67},"Crear el directorio y el docker-compose.yml","Crea el directorio `\u002Fopt\u002Fwoodpecker\u002F` y coloca en él un archivo `docker-compose.yml`. El servicio `woodpecker-server` utiliza la imagen `woodpeckerci\u002Fwoodpecker-server:v3` y expone los puertos 8000 (UI) y 9000 (gRPC). Configura las variables `WOODPECKER_FORGEJO=true`, `WOODPECKER_FORGEJO_URL`, `WOODPECKER_FORGEJO_CLIENT`, `WOODPECKER_FORGEJO_SECRET`, `WOODPECKER_AGENT_SECRET` y `WOODPECKER_HOST=https:\u002F\u002Fci.your-domain.com`. El servicio `woodpecker-agent` usa `woodpeckerci\u002Fwoodpecker-agent:v3`, monta `\u002Fvar\u002Frun\u002Fdocker.sock` y recibe `WOODPECKER_SERVER=woodpecker-server:9000` más el mismo `WOODPECKER_AGENT_SECRET`.",{"title":69,"body":70},"Configurar el reverse proxy HTTPS","Configura Traefik o Caddy para terminar TLS en `ci.your-domain.com` y hacer proxy hacia `woodpecker-server:8000`. Con Caddy, un bloque mínimo es suficiente: `ci.your-domain.com { reverse_proxy woodpecker-server:8000 }`. Nunca expongas el puerto 8000 directamente en la IP pública; el puerto 9000 (gRPC) debe permanecer accesible solo en la red Docker interna.",{"title":72,"body":73},"Arrancar el stack","En `\u002Fopt\u002Fwoodpecker`, ejecuta `docker compose up -d`. Comprueba los logs con `docker compose logs -f woodpecker-server` hasta ver `server started`. El agente aparece en los logs del servidor con un mensaje `agent connected`; si no aparece en treinta segundos, verifica que `WOODPECKER_AGENT_SECRET` sea idéntico en ambos servicios.",{"title":75,"body":76},"Iniciar sesión y activar el primer repositorio","Abre `https:\u002F\u002Fci.your-domain.com` e inicia sesión con tu cuenta de Forgejo mediante OAuth2. En el dashboard, haz clic en «Añadir repositorio» y selecciona el proyecto a activar. Woodpecker registra automáticamente un webhook en Forgejo para lanzar compilaciones en cada push o pull request.",{"title":78,"body":79},"Añadir el archivo .woodpecker.yaml al repositorio","En la raíz del repositorio, crea `.woodpecker.yaml`. Ejemplo mínimo con tres pasos: `lint` (imagen `node:20`, comando `npm run lint`), `test` (imagen `node:20`, comando `npm test`) y `deploy` condicional a la rama `main` que lanza un script SSH remoto. Sube el archivo: se lanza inmediatamente un pipeline en Woodpecker y el resultado aparece en la interfaz y en el estado del commit en Forgejo.",{"title":81,"body":82},"Verificar la persistencia de datos","Por defecto, Woodpecker almacena su base de datos SQLite dentro del contenedor. Para una instalación duradera, monta un volumen con nombre en `\u002Fvar\u002Flib\u002Fwoodpecker` en el servicio servidor y realiza copias de seguridad regulares de ese volumen. Un reinicio o actualización de la imagen sin volumen con nombre borra el historial de compilaciones y la configuración de los repositorios activados.",{"type":35,"title":84,"body":85},"Escribir tu primer pipeline en .woodpecker.yaml","Un archivo `.woodpecker.yaml` describe una secuencia de pasos ejecutados de forma secuencial en contenedores Docker separados. Cada paso tiene un nombre, una imagen y una lista de comandos. Los pasos pueden compartir el workspace (directorio clonado) a través de un volumen montado automáticamente por Woodpecker. Para un proyecto Node.js, un pipeline básico incluye un paso `lint` (`node:20`, `npm ci && npm run lint`), un paso `test` (`node:20`, `npm test`) y un paso `build` (`node:20`, `npm run build`). Para un proyecto Docker, añade un paso que use el plugin oficial `woodpeckerci\u002Fplugin-docker-buildx` para construir y publicar la imagen en un registro. El disparo condicional se expresa con el bloque `when`: `when: { branch: main, event: push }` limita el paso de despliegue a la rama principal en los push directos, excluyendo los pull requests.",{"type":35,"title":87,"body":88},"Secretos y variables de entorno en los pipelines","Woodpecker distingue dos niveles de secretos: secretos de repositorio (visibles solo en los pipelines del repositorio correspondiente) y secretos globales (accesibles a todos los repositorios, a crear con cuidado). Un secreto se declara en el dashboard — en la sección Secrets del repositorio — y luego se referencia en el pipeline con la sintaxis `from_secret`. Por ejemplo, una clave SSH de despliegue llamada `deploy_key` se inyecta en un paso mediante `environment: { SSH_KEY: { from_secret: deploy_key } }`. Los secretos nunca se pasan a pull requests de forks externos por defecto, evitando la exfiltración por un colaborador malicioso. Para variables no sensibles que deban compartirse entre múltiples repositorios, usa la variable `WOODPECKER_ENVIRONMENT` a nivel del servidor: los pares `CLAVE=valor` definidos ahí están disponibles en todos los pipelines sin declaración en el YAML.",{"type":90,"body":91},"tip","Coloca el servidor Woodpecker detrás de Traefik o Caddy con HTTPS y nunca lo expongas directamente en el puerto 8000. Activa la autenticación por lista blanca (`WOODPECKER_ADMIN`) para restringir el acceso al dashboard a las cuentas Forgejo autorizadas. Almacena todos los secretos de pipeline (tokens SSH, claves de API, contraseñas de registro Docker) en los secretos de repositorio del dashboard de Woodpecker — se inyectan como variables de entorno durante la compilación sin aparecer en el `.woodpecker.yaml` versionado. Por último, monta un volumen Docker con nombre para persistir la base de datos SQLite de Woodpecker: un reinicio sin volumen borra el historial de compilaciones.",{"type":35,"title":93,"body":94},"Runners multi-arquitectura: x86_64 y ARM64","Woodpecker CI v3 soporta de forma nativa agentes multi-arquitectura: cada agente anuncia su plataforma al servidor (`linux\u002Famd64`, `linux\u002Farm64`, `linux\u002Farm\u002Fv7`) y el servidor enruta los jobs al agente con la plataforma correspondiente. Para declarar un job ARM64, añade `platform: linux\u002Farm64` a nivel del pipeline en `.woodpecker.yaml`. Si dispones de un VPS ARM (Ampere, Raspberry Pi 4 o servidor Hetzner ARM) y un VPS x86_64, despliega un agente en cada uno con el mismo `WOODPECKER_AGENT_SECRET` y deja que el servidor distribuya las compilaciones. Este mecanismo es útil para compilación cruzada de binarios, pruebas de compatibilidad de imágenes Docker en múltiples arquitecturas o validación de paquetes del sistema. El plugin `woodpeckerci\u002Fplugin-docker-buildx` va más allá y usa QEMU para producir imágenes multi-arch desde un solo agente, pero las compilaciones nativas en la arquitectura objetivo siempre son más rápidas.",{"type":35,"title":96,"body":97},"Depuración: cinco errores frecuentes","Cinco problemas aparecen repetidamente durante la instalación o el uso de Woodpecker CI. Primero: el agente no se conecta al servidor (`agent could not auth`). Causa más frecuente: `WOODPECKER_AGENT_SECRET` no es idéntico en ambos servicios. Verifica con `docker compose exec woodpecker-server env | grep AGENT_SECRET`. Segundo: el login OAuth2 falla con `Error while authenticating against OAuth provider`. Causa probable: la URL de redirección en la aplicación OAuth2 de Forgejo no coincide exactamente con `WOODPECKER_HOST`. Comprueba la barra final y la coherencia del esquema HTTPS. Tercero: los pipelines quedan bloqueados en `pending`. El agente puede estar conectado pero su etiqueta de plataforma no coincide con ningún pipeline; elimina la cláusula `platform` si no es necesaria. Cuarto: los secretos no se inyectan en los pasos. Los secretos solo se pasan a pipelines activados en ramas internas, nunca en PRs de forks externos por defecto. Verifica que el evento que lo activa sea `push` o `tag`. Quinto: tras actualizar a v3.18, faltan logs de compilaciones antiguas. Esta versión incluye una migración del almacenamiento de logs; si la migración se interrumpe, reinicia el contenedor servidor con permisos de escritura en el volumen de datos para que se reanude.",{"type":35,"title":99,"body":100},"Integración con el marketplace de ServOrbit: despliegue automático en VPS","ServOrbit ofrece Woodpecker CI en su marketplace: la aplicación se instala en un VPS Cloud con Docker preconfigurado e IP fija, en pocos clics desde el portal de cliente. Una vez aprovisionado el VPS, basta con apuntar `WOODPECKER_FORGEJO_URL` a tu forja Forgejo existente e introducir las claves OAuth2 para que los pipelines comiencen a ejecutarse. Esta integración es especialmente útil para agencias o equipos técnicos que quieren aislar el motor CI del servidor de forja: Forgejo en un VPS, Woodpecker en un segundo, comunicándose vía HTTPS. Los recursos del VPS son ajustables en cualquier momento desde el portal de cliente — añadir RAM o vCPU sin reinstalar — lo que permite dimensionar el parque de runners según la carga real de compilaciones.",{"type":35,"title":102,"body":103},"De la forja git al despliegue continuo: una stack soberana completa","Forgejo gestiona el código, los issues y las revisiones de pull requests; Woodpecker CI orquesta los pipelines de test y despliegue. Los dos se comunican mediante OAuth2 y webhooks en tu propia red, sin dependencia de GitHub, GitLab o ningún servicio de integración cloud. Esta stack auto-alojada responde a las restricciones de soberanía de las agencias y equipos técnicos que no quieren que su propiedad intelectual o sus secretos de integración transiten por plataformas externas. Con Woodpecker CI v3 y Forgejo v1.20 o superior, dispones de un entorno de desarrollo completo — forja git, CI\u002FCD, registro Docker si es necesario — completamente bajo tu control, en uno o dos VPS, con un coste mensual predecible y sin cuota de minutos de compilación.","Lance su stack CI\u002FCD en un VPS ServOrbit","Un VPS Cloud ServOrbit con Docker preconfigurado e IP fija le permite desplegar Forgejo y Woodpecker CI en unos minutos, con recursos ajustables a medida que sus pipelines se multiplican.","Desplegar en un VPS ServOrbit","\u002Fvps-cloud",[109,133,148],{"id":110,"slug":111,"slugs":112,"title":116,"excerpt":117,"readTime":118,"views":119,"isPinned":19,"publishedAt":120,"updatedAt":21,"category":121,"categories":127,"featuredImage":29,"bgImage":30,"posterImage":129,"relatedSolution":130},74,"alojar-gitea-en-un-vps",{"fr":113,"en":114,"ar":115,"es":111},"heberger-gitea","host-gitea-on-your-own-vps","استضافة-gitea-على-خادم-vps-الخاص-بك","Alojar Gitea en su propio VPS en 2026","Despliegue Gitea en un VPS con Docker y SSL. Guía completa: instalación, migración a Forgejo v16 y comparativa de gobernanza.",8,0,"2026-04-07T00:00:00+00:00",{"id":122,"name":123,"slug":124,"color":125,"icon":126},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[128],{"id":122,"name":123,"slug":124,"color":125,"icon":126},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":131,"appSlug":132},"desarrollo","gitea",{"id":134,"slug":135,"slugs":136,"title":140,"excerpt":141,"readTime":142,"views":23,"isPinned":19,"publishedAt":143,"updatedAt":21,"category":144,"categories":145,"featuredImage":29,"bgImage":30,"posterImage":147,"relatedSolution":29},75,"alojar-forgejo-en-un-vps",{"fr":137,"en":138,"ar":139,"es":135},"heberger-forgejo","host-forgejo-on-your-own-vps","استضافة-forgejo-على-خادم-vps-الخاص-بك","Alojar Forgejo en su VPS: guía completa 2025","Instale Forgejo en su VPS con Docker, SSL, runners Actions y seguridad reforzada. Guía paso a paso de 1900 palabras para una forja Git soberana.",9,"2026-04-06T00:00:00+00:00",{"id":122,"name":123,"slug":124,"color":125,"icon":126},[146],{"id":122,"name":123,"slug":124,"color":125,"icon":126},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":149,"slug":150,"slugs":151,"title":155,"excerpt":156,"readTime":157,"views":23,"isPinned":19,"publishedAt":158,"updatedAt":159,"category":160,"categories":161,"featuredImage":29,"bgImage":30,"posterImage":163,"relatedSolution":164},3,"instalar-n8n-en-vps-con-docker",{"fr":152,"en":153,"ar":154,"es":150},"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).",12,"2026-06-05T00:00:00+00:00","2026-09-08T22:00:02+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[162],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":165,"appSlug":166},"automatizacion","n8n",1789665035629]