Dominios y SSL
Dominios y SSL
Dokploy usa Traefik como reverse proxy para gestionar dominios y certificados SSL. Cada aplicacion puede tener uno o mas dominios con HTTPS automatico via Let’s Encrypt.
Agregar un dominio custom a una aplicacion
Paso 1: Configurar DNS
Antes de agregar el dominio en Dokploy, apunta el DNS a la IP de tu servidor.
A Record (dominio raiz):
Tipo: A
Host: @
Valor: 203.0.113.50
TTL: 300
CNAME (subdominio):
Tipo: CNAME
Host: app
Valor: tuservidor.dominio.com
TTL: 300
Verifica que el DNS se propago correctamente:
dig app.tudominio.com +short
# Debe retornar la IP de tu servidor
nslookup app.tudominio.com
La propagacion DNS puede tardar entre 5 minutos y 48 horas dependiendo del proveedor y TTL anterior.
Paso 2: Agregar dominio en Dokploy
- Selecciona la aplicacion en el panel
- Ve a la pestana Domains
- Clic en Add Domain
- Completa:
| Campo | Valor |
|---|---|
| Host | app.tudominio.com |
| HTTPS | Activado |
| Port | Puerto interno de la aplicacion (ejemplo: 3000) |
| Path | / (default) |
| Certificate Type | letsencrypt |
- Clic en Save
Dokploy configura automaticamente Traefik para:
- Escuchar peticiones en ese dominio
- Redirigir HTTP a HTTPS
- Solicitar y renovar el certificado SSL
Paso 3: Verificar
Accede a https://app.tudominio.com en el navegador. El candado debe aparecer indicando conexion segura.
Desde terminal:
curl -I https://app.tudominio.com
Respuesta esperada:
HTTP/2 200
...
Como funciona el SSL automatico
Dokploy delega la gestion de certificados a Traefik, que a su vez usa el protocolo ACME (Automatic Certificate Management Environment) con Let’s Encrypt.
Flujo de obtencion del certificado
- Traefik detecta que un dominio necesita certificado
- Envia un challenge HTTP-01 a Let’s Encrypt
- Let’s Encrypt hace una peticion a
http://app.tudominio.com/.well-known/acme-challenge/{token} - Traefik responde con el token correcto
- Let’s Encrypt emite el certificado
- Traefik lo almacena y lo usa automaticamente
Requisitos para que funcione
- El puerto 80 debe estar abierto y accesible desde internet (Traefik escucha ahi para el challenge)
- El puerto 443 debe estar abierto para HTTPS
- El dominio debe apuntar correctamente a la IP del servidor antes de activar HTTPS
- No debe haber otro servicio ocupando el puerto 80 o 443
Verificar puertos
# Desde el servidor
ss -tlnp | grep -E ':80|:443'
# Desde fuera del servidor
curl -I http://app.tudominio.com
Generar dominio temporal desde Dokploy
Dokploy puede generar subdominios temporales usando el servicio sslip.io o traefik.me sin configurar DNS.
Usar sslip.io
Si la IP de tu servidor es 203.0.113.50, puedes usar:
app.203.0.113.50.sslip.io
En la configuracion de dominio de la aplicacion:
Host: app.203.0.113.50.sslip.io
HTTPS: Desactivado (sslip.io no soporta Let's Encrypt)
Esto es util para:
- Probar deploys antes de configurar DNS
- Entornos de desarrollo o staging
- Demostraciones rapidas
Dominio auto-generado por Dokploy
Desde el panel, algunas versiones de Dokploy ofrecen la opcion Generate Domain que crea automaticamente un subdominio basado en la IP del servidor.
Renovacion automatica de certificados
Los certificados de Let’s Encrypt tienen una validez de 90 dias. Traefik los renueva automaticamente cuando quedan 30 dias para expirar.
Verificar fecha de expiracion
echo | openssl s_client -servername app.tudominio.com -connect app.tudominio.com:443 2>/dev/null | openssl x509 -noout -dates
Salida esperada:
notBefore=Feb 28 00:00:00 2026 GMT
notAfter=May 29 00:00:00 2026 GMT
Forzar renovacion
Si necesitas renovar un certificado manualmente, reinicia Traefik:
docker restart dokploy-traefik
Traefik verificara todos los certificados y renovara los que esten proximos a expirar.
Donde se almacenan los certificados
Traefik guarda los certificados en un archivo JSON dentro de su volumen:
/data/traefik/acme.json
Este archivo tiene permisos 600. No lo edites manualmente.
Multiples dominios por aplicacion
Una aplicacion puede tener varios dominios apuntando al mismo servicio.
Ejemplo: dominio raiz + www
Agrega dos entradas en la pestana Domains:
Host: tudominio.com
HTTPS: Activado
Port: 3000
Host: www.tudominio.com
HTTPS: Activado
Port: 3000
Cada dominio obtiene su propio certificado SSL.
Redirect www a non-www
Para redirigir en lugar de servir contenido duplicado, configura el redirect en Traefik (ver capitulo 14) o en tu aplicacion.
Wildcard certificates
Los certificados wildcard cubren todos los subdominios de un dominio (*.tudominio.com).
Requisitos
- Requiere challenge DNS-01 en lugar de HTTP-01
- Necesitas un proveedor de DNS soportado por Traefik (Cloudflare, Route53, DigitalOcean, etc.)
Configurar challenge DNS-01 con Cloudflare
Necesitas editar la configuracion de Traefik. En el panel de Dokploy, ve a Settings > Traefik > Config y modifica el archivo de configuracion:
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /data/traefik/acme.json
dnsChallenge:
provider: cloudflare
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
Variables de entorno necesarias en el contenedor de Traefik:
[email protected]
CF_DNS_API_TOKEN=tu-api-token-de-cloudflare
El token de Cloudflare necesita permisos de Zone:DNS:Edit sobre la zona del dominio.
Usar el wildcard
Una vez configurado, agrega el dominio con wildcard:
Host: *.tudominio.com
HTTPS: Activado
Certificate Type: letsencrypt
Todos los subdominios (app.tudominio.com, api.tudominio.com, etc.) usaran el mismo certificado.
Troubleshooting SSL
El certificado no se genera
Causa comun: el DNS no apunta al servidor.
# Verificar que el dominio resuelve a tu IP
dig app.tudominio.com +short
Causa comun: el puerto 80 esta bloqueado.
# Desde fuera del servidor
curl -I http://app.tudominio.com
# Si da timeout, el puerto esta bloqueado
Solucion: abre el puerto 80 en el firewall:
# UFW
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Rate limit de Let’s Encrypt
Let’s Encrypt tiene limites:
- 50 certificados por dominio registrado por semana
- 5 duplicados por semana
- 5 intentos fallidos por hora por cuenta
Si alcanzas el rate limit, espera 1 hora (para fallos) o 1 semana (para duplicados).
Verificar logs de Traefik
docker logs dokploy-traefik --tail 100 | grep -i "acme\|certificate\|error"
Errores comunes en los logs:
# DNS no resuelve
unable to obtain ACME certificate for domain
# Puerto 80 bloqueado
acme: error: 403 :: urn:ietf:params:acme:error:unauthorized
# Rate limit
acme: error: 429 :: too many certificates
Certificado expirado
Si un certificado expiro y no se renovo automaticamente:
- Verifica que Traefik esta corriendo:
docker ps | grep traefik - Reinicia Traefik:
docker restart dokploy-traefik - Verifica los logs para errores de renovacion
- Si persiste, elimina el dominio en Dokploy y vuelvelo a agregar
Siguiente: Capitulo 14: Traefik —>