[{"data":1,"prerenderedAt":171},["ShallowReactive",2],{"seo-verification":3,"blog-woodpecker-ci-forgejo-pipeline-cicd-vps-ma-es":6,"promo-bar-likely":170},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-woodpecker-ci-forgejo-pipeline-cicd-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":26,"featuredImage":28,"bgImage":29,"posterImage":30,"relatedSolution":28,"intro":31,"sections":32,"ctaTitle":103,"ctaBody":104,"ctaButton":105,"ctaUrl":106,"relatedPosts":107},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.",12,2,false,"2026-08-02T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":24},"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[27],{"id":18,"name":23,"slug":24,"color":25,"icon":24},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.20 (octubre de 2026), cada paso se ejecuta en un contenedor Docker aislado y, en reposo, el servidor ocupa unos 100 MB de RAM y el agente unos 30 MB. 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.",[33,37,48,51,54,82,85,88,91,94,97,100],{"type":34,"title":35,"body":36},"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":38,"title":39,"items":40},"ul","Lo que aporta Woodpecker CI en un VPS",[41,42,43,44,45,46,47],"**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** — en reposo, el servidor ocupa unos 100 MB de RAM y el agente unos 30 MB, 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 etiqueta `platform: linux\u002Farm64`, en el bloque `labels`, 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":34,"title":49,"body":50},"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 integra un driver de Forgejo dedicado (`WOODPECKER_FORGEJO=true`): usa una versión de Forgejo todavía mantenida y, si ambos servicios comparten el host, autoriza los webhooks locales en Forgejo (`ALLOWED_HOST_LIST=external,loopback` en la sección `[webhook]` de `app.ini`).",{"type":34,"title":52,"body":53},"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":55,"title":56,"steps":57},"steps","Desplegar Woodpecker CI en tu VPS",[58,61,64,67,70,73,76,79],{"title":59,"body":60},"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":62,"body":63},"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":65,"body":66},"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 escucha en los puertos 8000 (UI) y 9000 (gRPC): no los publiques en la IP pública, el proxy inverso y el agente los alcanzan por la red Docker. 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":68,"body":69},"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":71,"body":72},"Arrancar el stack","En `\u002Fopt\u002Fwoodpecker`, ejecuta `docker compose up -d`. Comprueba los logs con `docker compose logs -f woodpecker-server` hasta ver `starting http server ...`. En el lado del agente, `docker compose logs -f woodpecker-agent` debe mostrar `starting Woodpecker agent` y luego el agente aparece en la lista de agentes de la administración de Woodpecker; si no aparece ahí en treinta segundos, verifica que `WOODPECKER_AGENT_SECRET` sea idéntico en ambos servicios.",{"title":74,"body":75},"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":77,"body":78},"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:24`, comando `npm run lint`), `test` (imagen `node:24`, 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":80,"body":81},"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":34,"title":83,"body":84},"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:24`, `npm ci && npm run lint`), un paso `test` (`node:24`, `npm test`) y un paso `build` (`node:24`, `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":34,"title":86,"body":87},"Secretos y variables de entorno en los pipelines","Woodpecker distingue tres niveles de secretos: secretos de repositorio (visibles solo en los pipelines del repositorio correspondiente), secretos de organización (comunes a los repositorios de una organización) y secretos globales (accesibles a todos los repositorios, reservados a los administradores de la instancia, 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 } }`. Por defecto, los secretos no se pasan a los pipelines de pull request (salvo que actives el evento `pull_request` en el secreto), 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`, separados por comas, definidos ahí están disponibles en todos los pipelines sin declaración en el YAML.",{"type":89,"body":90},"tip","Coloca el servidor Woodpecker detrás de Traefik o Caddy con HTTPS y nunca lo expongas directamente en el puerto 8000. Mantén el registro cerrado (`WOODPECKER_OPEN=false`, el valor por defecto) o, si lo abres, limítalo a tus organizaciones de Forgejo con `WOODPECKER_ORGS`; designa a los administradores con `WOODPECKER_ADMIN`. 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":34,"title":92,"body":93},"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 `labels: { platform: linux\u002Farm64 }` a nivel del workflow en `.woodpecker.yaml` (la antigua clave `platform` de primer nivel se eliminó en la v3). 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. Un agente remoto alcanza el puerto gRPC 9000 del servidor por Internet: cifra ese tráfico con TLS (`WOODPECKER_GRPC_SECURE=true` en el agente) y abre el puerto solo a la IP del agente. 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":34,"title":95,"body":96},"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 config | grep WOODPECKER_AGENT_SECRET` (las imágenes de Woodpecker se construyen sobre `scratch`, sin comando `env`). 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 las `labels` del workflow (por ejemplo `platform`) no coinciden con ningún agente; elimina las que no sean necesarias. Cuarto: los secretos no se inyectan en los pasos. Por defecto, un secreto solo se pasa a los eventos `push`, `tag` y `deployment`, nunca a los pull requests. 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 que puede tardar según el número de líneas almacenadas: haz una copia de seguridad del volumen de datos antes de actualizar, prevé una interrupción del servicio y deja que la migración termine antes de dar los logs por perdidos.",{"type":34,"title":98,"body":99},"Desplegar Woodpecker en un VPS de ServOrbit","Woodpecker CI se instala manualmente, con Docker Compose, en un VPS Cloud de ServOrbit con IP fija. 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":34,"title":101,"body":102},"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 una versión mantenida de Forgejo, 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",[108,133,150],{"id":109,"slug":110,"slugs":111,"title":115,"excerpt":116,"readTime":117,"views":118,"isPinned":19,"noindex":19,"publishedAt":119,"updatedAt":120,"category":121,"categories":127,"featuredImage":28,"bgImage":29,"posterImage":129,"relatedSolution":130},74,"alojar-gitea-en-un-vps",{"fr":112,"en":113,"ar":114,"es":110},"heberger-gitea","host-gitea-on-your-own-vps","استضافة-gitea-على-خادم-vps-الخاص-بك","Alojar Gitea en su propio VPS en 2026","Despliegue Gitea 1.25 en un VPS con Docker y SSL: Gitea Actions CI\u002FCD, comparativa vs Forgejo v16, administración y errores SSH y HTTPS.",13,1,"2026-04-07T00:00:00+00:00","2026-11-08T16:32:50+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":143,"isPinned":19,"noindex":19,"publishedAt":144,"updatedAt":145,"category":146,"categories":147,"featuredImage":28,"bgImage":29,"posterImage":149,"relatedSolution":28},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.",10,9,"2026-04-06T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":122,"name":123,"slug":124,"color":125,"icon":126},[148],{"id":122,"name":123,"slug":124,"color":125,"icon":126},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":151,"slug":152,"slugs":153,"title":157,"excerpt":158,"readTime":159,"views":160,"isPinned":19,"noindex":19,"publishedAt":161,"updatedAt":162,"category":163,"categories":164,"featuredImage":28,"bgImage":29,"posterImage":166,"relatedSolution":167},3,"instalar-n8n-en-vps-con-docker",{"fr":154,"en":155,"ar":156,"es":152},"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":18,"name":23,"slug":24,"color":25,"icon":24},[165],{"id":18,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":168,"appSlug":169},"automatizacion","n8n",true,1794270668375]