✈️ Monta tu propio servidor de CI/CD con Woodpecker y Traefik con Docker Compose
¿Te gustaría tener tu propio sistema de integración continua (CI/CD) gratis, sin depender de servicios de terceros como GitHub Actions o GitLab CI? Hoy te traigo un proyecto de nivel intermedio-alto: un servidor de Woodpecker CI orquestado vía Traefik para gestión dinámica de dominios y HTTPS automático, todo preparado en un solo docker-compose.yml
.
¿Qué es Woodpecker?
Woodpecker CI es una plataforma de integración y despliegue continuos ligera, open source y compatible con múltiples sistemas de control de versiones: Gitea, GitHub, GitLab, etc. Permite ejecutar pipelines remotos y automatizar toda la entrega de software, ¡en tus propios servidores!
¿Por qué usar Traefik con Woodpecker?
Traefik es un proxy inverso moderno que simplifica el enrutamiento de tráfico hacia tus contenedores. Se encarga del HTTPS automático con Let’s Encrypt, facilita el manejo de subdominios y equilibra la carga entre servicios. Ideal para exponer Woodpecker CI de forma segura y flexible en Internet.
Arquitectura del Compose
Este docker-compose.yml
levanta:
- traefik: Proxy inverso, router, gestiona certificados y enruta peticiones.
- woodpecker-server: Nodo central de Woodpecker, encargado de la UI y la API.
- woodpecker-agent: Ejecuta los jobs (pipelines) disparados por Woodpecker.
Todo ello orquestado en una red Docker interna, y expuesto bajo dominios y HTTPS gracias a Traefik.
Fichero docker-compose.yml
completo
Rellena las variables donde corresponda: cambia tus.dominiocicd.com por tu dominio real y tus secretos.
version: '3.8'
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.email=[email protected]
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
- --api.dashboard=true
ports:
- "80:80"
- "443:443"
- "8080:8080" # Dashboard de Traefik (opcional)
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_letsencrypt:/letsencrypt
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.tus.dominiocicd.com`)"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik.service=api@internal"
woodpecker-server:
image: woodpeckerci/woodpecker-server:latest
container_name: woodpecker-server
restart: unless-stopped
environment:
- WOODPECKER_OPEN=true
- WOODPECKER_ADMIN=tu_usuario
- WOODPECKER_HOST=https://cicd.tus.dominiocicd.com
- WOODPECKER_GITEA=true
- WOODPECKER_GITEA_URL=https://gitea.tus.dominiocicd.com
- WOODPECKER_GITEA_CLIENT=client_id_de_gitea
- WOODPECKER_GITEA_SECRET=client_secret_de_gitea
- WOODPECKER_SERVER_PROTO=https
- WOODPECKER_LOG_LEVEL=info
- WOODPECKER_AGENT_SECRET=elige_un_password_muylargo
depends_on:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.woodpecker.rule=Host(`cicd.tus.dominiocicd.com`)"
- "traefik.http.routers.woodpecker.entrypoints=websecure"
- "traefik.http.routers.woodpecker.tls.certresolver=letsencrypt"
volumes:
- woodpecker_data:/var/lib/woodpecker
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
container_name: woodpecker-agent
restart: unless-stopped
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=elige_un_password_muylargo
depends_on:
- woodpecker-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes:
traefik_letsencrypt:
woodpecker_data:
networks:
default:
name: cicd_net
Cómo desplegar tu CI/CD casero
- Personaliza el YAML: Cambia dominios, secretos y emails a los tuyos.
- Obtén tus client_id/client_secret: Desde tu proveedor de Git (p.e. Gitea). Necesitas registrar la OAuth App.
- Apunta los DNS: Los subdominios deben apuntar a la IP de tu VPS.
- Levanta el stack: Ejecuta
docker compose up -d
. - Accede: Abre
https://cicd.tus.dominiocicd.com
y empieza a conectar repositorios.
Consejos rápidos y troubleshooting
- El dashboard de Traefik estará visible solo vía
https://traefik.tus.dominiocicd.com
si has configurado el router/label. - El primer usuario en acceder a Woodpecker será el admin (ajusta con
WOODPECKER_ADMIN
). - Si tienes errores de HTTPS, revisa que los DNS apunten bien y ningún firewall bloquee puertos 80/443.
- Woodpecker puede vincularse a GitHub o GitLab cambiando las variables de entorno. Consulta la documentación oficial.
- Los logs de los servicios son muy útiles:
docker logs woodpecker-server
ydocker logs traefik
.