Files
network-documentation/servidores/dockge/README.md

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 renovar horuxfin.com se 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):

  1. El storage de certificados de Caddy se corrompió: los directorios /data/caddy/certificates/.../nexusautoparts.com.mx/ y wildcard_.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").
  2. 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 para nexusautoparts.com.mx nunca podía funcionar.

Solución aplicada (08 Sep 2026):

  1. 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/)
  2. Crear token de Cloudflare nuevo con Zone:Read + DNS:Edit sobre la zona nexusautoparts.com.mx y configurarlo en los 3 bloques nexusautoparts del Caddyfile (los de consultoria-as.com conservan el token original).
  3. docker restart caddy → certificados re-emitidos (certificate obtained successfully para 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.com y nexusautoparts.com.mx.
  • ✅ IP incorrecta de StradaAutopartes: se corrigió de 192.168.10.117 a 192.168.10.113.

Pendientes

  • Investigar servicios caídos detrás de play.consultoria-as.com (192.168.10.108) y gym.consultoria-as.com (192.168.10.123).
  • Generar token de Cloudflare para la zona horuxfin.com si 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

  1. propagation_delay 120s en TODOS los bloques tls (24 bloques): hace que el solver espere en vez de fallar en la verificación. ⚠️ Requiere unidad (120s, no 120 — sin unidad el contenedor entra en crash loop y todos los servicios caen).
  2. 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:5000 con conexiones en cola (app viva pero muda) → systemctl restart pegaprox en 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> u openssl s_client -servername x.