Dominios y SSL

Por: Artiko
dokploydominiossslhttpsletsencrypt

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

  1. Selecciona la aplicacion en el panel
  2. Ve a la pestana Domains
  3. Clic en Add Domain
  4. Completa:
CampoValor
Hostapp.tudominio.com
HTTPSActivado
PortPuerto interno de la aplicacion (ejemplo: 3000)
Path/ (default)
Certificate Typeletsencrypt
  1. Clic en Save

Dokploy configura automaticamente Traefik para:

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

  1. Traefik detecta que un dominio necesita certificado
  2. Envia un challenge HTTP-01 a Let’s Encrypt
  3. Let’s Encrypt hace una peticion a http://app.tudominio.com/.well-known/acme-challenge/{token}
  4. Traefik responde con el token correcto
  5. Let’s Encrypt emite el certificado
  6. Traefik lo almacena y lo usa automaticamente

Requisitos para que funcione

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:

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

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:

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:

  1. Verifica que Traefik esta corriendo: docker ps | grep traefik
  2. Reinicia Traefik: docker restart dokploy-traefik
  3. Verifica los logs para errores de renovacion
  4. Si persiste, elimina el dominio en Dokploy y vuelvelo a agregar

Siguiente: Capitulo 14: Traefik —>