- setup-ci.sh: Script no interactivo que verifica archivos de config - Workflow actualizado para ejecutar setup-ci.sh antes del deploy - Los archivos credentials.json y .env persisten en el workspace del runner - Solo requiere setup.sh manual la primera vez en el servidor - Documentación actualizada con instrucciones para CI/CD
Cloudflare Tunnel → Traefik + Authentik
Configuración de Cloudflare Tunnel para exponer servicios a través de Traefik manteniendo la autenticación de Authentik.
🎯 Arquitectura
Internet → Cloudflare Tunnel → Traefik → Authentik Forward Auth → Apps
El wildcard *.nucleoriofrio.com apunta todo el tráfico a Traefik, que se encarga de:
- Enrutamiento correcto según el hostname
- Autenticación con Authentik
- Certificados SSL/TLS
- Redirecciones HTTP → HTTPS
📋 Requisitos previos
- Docker y Docker Compose instalados
- Cuenta de Cloudflare con dominio configurado
- Traefik corriendo en la red
principal - Authentik configurado con Forward Auth en Traefik
- Gitea Runner configurado (para auto-deploy con Gitea Actions)
🚀 Setup Rápido (Recomendado)
Setup Automático con Script
En una PC nueva, solo necesitas clonar el repo y ejecutar el script de setup:
# Clonar el repositorio
git clone https://gitea.nucleoriofrio.com/nucleo000/cloudflareTunnel.git
cd cloudflareTunnel
# Ejecutar setup (verifica si existe el tunnel, si no lo crea)
./setup.sh
El script automáticamente:
- ✅ Instala
cloudflaredsi no está instalado - ✅ Te autentica con Cloudflare (abre el navegador)
- ✅ Verifica si ya existe el tunnel
nucleorio-tunnel - ✅ Si no existe, lo crea
- ✅ Genera
credentials.jsony.env - ✅ Opcionalmente configura DNS automáticamente
Levantar el servicio
docker-compose up -d
Verificar logs
docker-compose logs -f
Deberías ver:
INF Connection registered connIndex=0
INF Registered tunnel connection
🔧 Setup Manual (Alternativo)
Click para expandir instrucciones manuales
1. Instalar cloudflared
# Debian/Ubuntu
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
2. Crear/Verificar el tunnel
# Login a Cloudflare
cloudflared tunnel login
# Listar tunnels existentes
cloudflared tunnel list
# Si no existe, crear uno nuevo
cloudflared tunnel create nucleorio-tunnel
# Copiar credentials
cp ~/.cloudflared/<TUNNEL_ID>.json ./credentials.json
3. Configurar .env
cp .env.example .env
nano .env # Agregar TUNNEL_ID
4. Configurar DNS
# Opción A: Automático
cloudflared tunnel route dns <TUNNEL_ID> *.nucleoriofrio.com
cloudflared tunnel route dns <TUNNEL_ID> nucleoriofrio.com
# Opción B: Manual en dashboard de Cloudflare
# Crea registros CNAME:
# - Name: *
# Target: <TUNNEL_ID>.cfargotunnel.com
# Proxy: ON
5. Levantar servicio
docker-compose up -d
🔧 Configuración
config.yml
El archivo config.yml usa wildcard para capturar todo *.nucleoriofrio.com y redirigirlo a Traefik:
ingress:
- hostname: "*.nucleoriofrio.com"
service: http://traefik:80
Traefik recibe el tráfico y:
- Lee el
Hostheader - Aplica las reglas de enrutamiento
- Ejecuta Authentik Forward Auth si está configurado
- Redirige al servicio correcto
docker-compose.yml
El contenedor se conecta a la red principal para poder comunicarse con Traefik.
🚀 Auto-deploy con Gitea Actions
Este repositorio incluye un workflow de Gitea Actions (.gitea/workflows/deploy.yml) que automáticamente despliega el tunnel cuando haces push a main.
¿Qué hace el workflow?
- Ejecuta
setup-ci.shpara verificar que existancredentials.jsony.env - Descarga la última imagen de
cloudflare/cloudflared - Detiene el stack actual
- Levanta el stack actualizado
- Muestra los logs del tunnel
Setup inicial para CI/CD
Primera vez en el servidor donde corre el gitea-runner:
# 1. El runner clonará el repo automáticamente en su workspace
# 2. SSH al servidor y navega al workspace del runner
cd /ruta/donde/runner/clona/el/repo
# 3. Ejecuta setup.sh UNA SOLA VEZ (requiere login interactivo)
./setup.sh
El script creará credentials.json y .env que persisten en el workspace del runner entre ejecuciones.
De ahí en adelante:
- Cada
git pushejecuta el workflow automáticamente setup-ci.shverifica que los archivos existan- Si existen, continúa con el deploy
- Si no existen, el workflow falla con instrucciones
(Opcional) Variables de entorno en Gitea Secrets
Puedes configurar secrets en Gitea para el workflow (aunque actualmente no son necesarios con el enfoque de setup manual):
Settings > Secrets > Actions:
- CLOUDFLARE_ACCOUNT_ID: tu-account-id
- CLOUDFLARE_API_TOKEN: tu-api-token
Nota: credentials.json y .env se generan localmente y NO se commitean al repo (están en .gitignore), por seguridad.
✅ Verificación
Prueba acceder a tus servicios:
- https://amigos.nucleoriofrio.com → Debería redirigir a Authentik
- https://wifi.nucleoriofrio.com → Debería redirigir a Authentik
- https://portainer.nucleoriofrio.com → Debería redirigir a Authentik
🐛 Troubleshooting
El tunnel no conecta
# Verificar logs
docker-compose logs -f
# Verificar que credentials.json existe y es válido
cat credentials.json
Traefik no recibe el tráfico
# Verificar que el contenedor está en la red correcta
docker network inspect principal
# Debería aparecer 'cloudflared-tunnel' en la lista
Authentik no intercepta
Verifica que Traefik tiene configurado el middleware de Authentik Forward Auth para tus servicios.
El wildcard no funciona
Asegúrate de que:
- El registro DNS CNAME en Cloudflare está configurado como
*o*.nucleoriofrio.com - El proxy (nube naranja) está activado
- El tunnel está corriendo sin errores
📝 Notas importantes
- No expongas servicios directamente: Todo debe pasar por Traefik para mantener Authentik
- Wildcard DNS: Con
*.nucleoriofrio.comno necesitas reconfigurar el tunnel para nuevos subdominios - Multiple WAN: Cloudflare Tunnel maneja automáticamente las reconexiones si tu conexión se cae
- Credenciales: Nunca commitees
credentials.jsono.enval repositorio
🔐 Seguridad
Este setup mantiene toda la seguridad de Authentik porque:
- El tunnel termina en Traefik, no en las apps
- Traefik aplica Forward Auth antes de permitir acceso
- Las apps nunca están expuestas directamente a Internet