8.9 KiB
Dockge / Caddy — Reverse Proxy y SSL
Servidor
dockge(192.168.10.74) que ejecuta Caddy en Docker como reverse proxy central para los servicios públicos de la red.Estado: ✅ Caddy corriendo, certificados renovados.
1. Información General
| Parámetro | Valor |
|---|---|
| Hostname | dockge |
| IP LAN | 192.168.10.74 |
| Servicio | Caddy v2.11.2 (contenedor Docker) |
| Imagen | caddy-cloudflare:latest |
| Configuración | /etc/caddy/Caddyfile dentro del contenedor |
| Panel Dockge | http://192.168.10.74:5001 |
Contenedores principales
| Contenedor | Función | Puerto expuesto |
|---|---|---|
caddy |
Reverse proxy + SSL automático | 443/tcp, 80/tcp |
jellyfin |
Media server | 8096/tcp, 1900/udp, 7359/udp |
jellyseerr |
Requests de Jellyfin | 5055/tcp |
bazarr |
Subtítulos | 6767/tcp |
sonarr |
Series | 8989/tcp |
radarr |
Películas | 7878/tcp |
qbittorrent |
Torrents | 8080/tcp, 6881/tcp+udp |
prowlarr |
Indexers | 9696/tcp |
dockge |
Gestor de stacks Docker | 5001/tcp |
2. Dominios Gestionados por Caddy
Dominios consultoria-as.com
| Dominio | Backend | Estado |
|---|---|---|
jellyfin.consultoria-as.com |
127.0.0.1:8096 |
✅ |
mediarequest.consultoria-as.com |
127.0.0.1:5055 |
✅ |
immich.consultoria-as.com |
192.168.10.78:2283 |
✅ |
odoo.consultoria-as.com |
192.168.10.81:8069 |
✅ |
n8n.consultoria-as.com |
192.168.10.83:5678 |
✅ |
metabase.consultoria-as.com |
192.168.10.170:3000 |
✅ |
hacienda.consultoria-as.com |
192.168.10.167:5172 |
✅ |
apihotel.consultoria-as.com |
192.168.10.167:4000 |
✅ |
api-hacienda.consultoria-as.com |
192.168.10.167:4000 |
✅ |
nexus.consultoria-as.com |
192.168.10.91:5000 |
✅ |
git.consultoria-as.com |
192.168.10.69:3000 |
✅ |
navidrome.consultoria-as.com |
192.168.10.85:4533 |
✅ |
foro.consultoria-as.com |
192.168.30.73:4567 |
✅ |
status.consultoria-as.com |
192.168.10.87:3001 |
✅ |
cronicas.consultoria-as.com |
192.168.10.92:3000 |
✅ |
pagoda.consultoria-as.com |
192.168.10.92:3001 |
✅ |
mesh.consultoria-as.com |
https://192.168.10.97:4443 |
✅ |
recetas.consultoria-as.com |
192.168.10.156:8080 |
✅ |
afterlife.consultoria-as.com |
192.168.10.84:3000 |
✅ |
3d.consultoria-as.com |
192.168.10.104:8000 |
✅ |
play.consultoria-as.com |
192.168.10.108:80 |
⚠️ Backend caído |
gym.consultoria-as.com |
192.168.10.123:80 |
⚠️ Backend caído |
strada.consultoria-as.com |
192.168.10.113:80 |
✅ |
Dominios adicionales
| Dominio | Backend | Estado |
|---|---|---|
horuxfin.com, www.horuxfin.com |
192.168.10.90:3000 |
⚠️ No se puede renovar certificado (token solo cubre consultoria-as.com) |
nexusautoparts.com.mx |
192.168.10.91:80 |
✅ |
*.nexusautoparts.com.mx |
192.168.10.91:80 |
✅ |
manager.nexusautoparts.com.mx |
192.168.10.89:5003 |
✅ |
3. Certificados SSL (Let's Encrypt vía Cloudflare DNS)
Caddy obtiene y renueva certificados automáticamente usando el DNS challenge de Cloudflare.
Token de Cloudflare
Ubicado en el encabezado del Caddyfile:
{
acme_dns cloudflare <TOKEN>
}
El token debe tener permisos:
- Zone:Read
- DNS:Edit
- Zona:
consultoria-as.com
Nota: el token actual solo cubre
consultoria-as.com. Para renovarhoruxfin.comse necesita un token adicional con acceso a esa zona.
Renovación de certificados
Caddy renueva certificados automáticamente. Para forzar una renovación manual:
ssh root@192.168.10.74
docker restart caddy
O recargar configuración:
docker exec caddy caddy reload --config /etc/caddy/Caddyfile --force
Comandos útiles
# Ver logs de Caddy
ssh root@192.168.10.74 "docker logs caddy --tail 50"
# Ver certificados activos
ssh root@192.168.10.74 "docker exec caddy caddy list-modules --versions"
# Validar Caddyfile
ssh root@192.168.10.74 "docker exec caddy caddy validate --config /etc/caddy/Caddyfile"
# Verificar expiración de un dominio
echo | openssl s_client -servername strada.consultoria-as.com -connect strada.consultoria-as.com:443 2>/dev/null | openssl x509 -noout -enddate
3.5 Problema Resuelto: Certificados nexusautoparts expirados (08 Sep 2026)
Síntoma: todos los clientes de Nexus Autoparts veían "página no es segura" — nexusautoparts.com.mx
y *.nexusautoparts.com.mx con certificado vencido (15 Ago 2026).
Causa raíz (combinada):
- El storage de certificados de Caddy se corrompió: los directorios
/data/caddy/certificates/.../nexusautoparts.com.mx/ywildcard_.nexusautoparts.com.mx/desaparecieron, quedando solo lock files huérfanos en/data/caddy/caddy/locks/que bloqueaban la re-emisión en bucle ("expected 1 zone, got 0" + "no such file or directory"). - El token de Cloudflare usado en esos bloques solo tenía acceso a la zona
consultoria-as.com, por lo que el DNS-01 challenge paranexusautoparts.com.mxnunca podía funcionar.
Solución aplicada (08 Sep 2026):
- Eliminar los lock files huérfanos:
rm /data/caddy/caddy/locks/issue_cert_*nexusautoparts*.lock(volumen/var/lib/docker/volumes/caddy_data/_data/caddy/locks/) - Crear token de Cloudflare nuevo con Zone:Read + DNS:Edit sobre la zona
nexusautoparts.com.mxy configurarlo en los 3 bloquesnexusautopartsdel Caddyfile (los deconsultoria-as.comconservan el token original). docker restart caddy→ certificados re-emitidos (certificate obtained successfullypara wildcard y apex), vigentes hasta Dic 2026.
Lección: cada zona en Cloudflare necesita su propio token con permisos DNS en el Caddyfile.
Zonas pendientes de token: horuxfin.com.
4. Problemas Resueltos (21 Jun 2026)
- ✅ Token de Cloudflare inválido: se actualizó el token en el Caddyfile.
- ✅ Certificados expirados: se reinició Caddy y se renovaron todos los certificados de
consultoria-as.comynexusautoparts.com.mx. - ✅ IP incorrecta de StradaAutopartes: se corrigió de
192.168.10.117a192.168.10.113.
Pendientes
- Investigar servicios caídos detrás de
play.consultoria-as.com(192.168.10.108) ygym.consultoria-as.com(192.168.10.123). - Generar token de Cloudflare para la zona
horuxfin.comsi se requiere HTTPS en ese dominio.
5. Backends Caídos Detectados
| Dominio | Backend | Problema |
|---|---|---|
play.consultoria-as.com |
192.168.10.108:80 |
No responde (timeout) |
gym.consultoria-as.com |
192.168.10.123:80 |
No responde (timeout) |
Estos servicios generan errores 502 en Caddy porque sus backends no están accesibles. Revisar si las VMs/contenedores están apagados o cambiaron de IP.
Documentación Caddy / Dockge - Consultoria Alcaraz Salazar
Actualizado: 21 de Junio de 2026
⚠️ Caddy + GetAStatic: certificados y DNS (Sept 2026) — LECTURA OBLIGATORIA
El problema y su causa raíz
Los certificados nuevos fallaban con:
querying authoritative nameservers: read udp -> 162.159.38.193:53: no route to host
Causa: la verificación de propagación DNS de Caddy (certmagic) consulta los nameservers autoritativos directamente por UDP/53 — y el ISP de la oficina (CGNAT) bloquea el DNS externo. Los certificados existentes funcionan porque se emitieron antes de la mudanza.
El fix aplicado
propagation_delay 120sen TODOS los bloquestls(24 bloques): hace que el solver espere en vez de fallar en la verificación. ⚠️ Requiere unidad (120s, no120— sin unidad el contenedor entra en crash loop y todos los servicios caen).- Regla NAT "Redirect DNS" en el OPNsense: todo el tráfico UDP/TCP 53 de la LAN se redirige al resolver local (127.0.0.1) — el resolver del OPNsense sí resuelve (usa DoT, no bloqueado).
Procedimiento seguro para editar el Caddyfile (¡obligatorio!)
# 1. extraer, editar
docker exec caddy cat /etc/caddy/Caddyfile > /tmp/Caddyfile.host
# (editar /tmp/Caddyfile.host)
# 2. VALIDAR ANTES DE APLICAR ← la lección del crash loop
docker exec -i caddy caddy validate --adapter caddyfile --config /dev/stdin < /tmp/Caddyfile.host
# 3. solo si dice "Valid configuration":
docker cp /tmp/Caddyfile.host caddy:/etc/caddy/Caddyfile
docker exec caddy caddy reload --config /etc/caddy/Caddyfile
Otros hallazgos de la sesión
- Backoff largo de ACME: tras fallos, Caddy reintenta en horas. Forzar con
docker restart caddy(reintenta al arrancar). - Backend de PegaProx colgado:
127.0.0.1:5000con conexiones en cola (app viva pero muda) →systemctl restart pegaproxen el LXC 125. Síntoma: el dominio da timeout tras completar el TLS. - Medir TLS con SNI correcto:
curl -H "Host: x"NO cambia el SNI (da falsos 000). Usar--resolve x:443:<ip>uopenssl s_client -servername x.