🌐 Configuración SSL con Cloudflare + Certbot + Docker
Este documento detalla el proceso para generar y renovar certificados SSL con Let's Encrypt (Certbot) usando el plugin Cloudflare DNS, aplicarlos a tu contenedor Docker y automatizar su renovación.
📋 Prerequisitos
Antes de comenzar, asegúrate de tener:
- API Token de Cloudflare con permisos de edición de DNS
- Acceso SSH a tu servidor
- Docker y Docker Compose instalados
🧩 1. Instalación de dependencias
sudo apt install -y python3-certbot-dns-cloudflare
sudo apt install -y cron
⚙️ 2. Archivo de configuración Cloudflare
Creamos el archivo de credenciales:
sudo nano /etc/letsencrypt/<dominio>_cloudflare.ini
Contenido del archivo:
dns_cloudflare_api_token = $CLOUDFLARE_TOKEN
⚠️ Protege el archivo para que solo root pueda leerlo:
sudo chmod 600 /etc/letsencrypt/<dominio>_cloudflare.ini
🔐 3. Generar el certificado SSL
Ejecuta el siguiente comando reemplazando las variables por tu dominio y correo:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/<dominio>_cloudflare.ini -d <dominio> -d "*.<dominio>" --agree-tos --no-eff-email --server https://acme-v02.api.letsencrypt.org/directory -m <your.email@example.com>
Esto generará los certificados en /etc/letsencrypt/live/<dominio>/.
📂 4. Copiar los certificados
sudo cp /etc/letsencrypt/live/<dominio>/privkey.pem <ruta>/certs/<dominio>.key
sudo cp /etc/letsencrypt/live/<dominio>/fullchain.pem <ruta>/certs/<dominio>.crt
🧰 5. Aplicar cambios dentro del contenedor
Antes de continuar, asegúrate de cambiar en el archivo .env del facturador el siguiente valor:
FORCE_HTTPS=true
Esto es obligatorio para que el SSL funcione correctamente.
docker-compose exec -T fpm_<contenedor-servicio> php artisan config:cache
docker-compose exec -T fpm_<contenedor-servicio> php artisan cache:clear
💡 Tip: Si desconoces el nombre del contenedor-servicio, ejecuta el siguiente comando dentro de la carpeta del facturador:
docker-compose config --servicesEsto te mostrará la lista de servicios disponibles. Busca el que comience con
fpm_.
🔁 6. Reiniciar el proxy
docker restart proxy_proxy_1
⏰ 7. Automatizar la renovación con CRON
Agrega la tarea para renovar el certificado cada día a las 3 AM:
(sudo crontab -l 2>/dev/null; echo "0 3 * * * certbot renew --quiet && docker restart proxy_proxy_1") | sudo crontab -
🧠 8. Prueba de renovación (opcional)
Puedes verificar que todo esté correcto ejecutando una simulación:
sudo certbot renew --dry-run
✅ Resultado esperado
- Certificados SSL emitidos y almacenados correctamente.
- Renovación automática configurada.
- Proxy Docker reiniciado automáticamente tras cada renovación.
📎 Anexo: Obtener Token Cloudflare
Para crear tu API Token en Cloudflare:
-
Ingresa a tu cuenta de Cloudflare
-
Haz clic en tu icono de usuario (esquina superior derecha) → "Mi Perfil"

-
Ve a la sección "Tokens de API"

-
Haz clic en "Crear token"

-
Usa la plantilla "Editar zona DNS" y configura los siguientes permisos:

- Permisos:
Zona→DNS→Editar
- Permisos:
-
En "Recursos de zona":
- Selecciona:
Incluir→Zona específica→ Elige tu dominio

- Selecciona:
-
En "Filtro de direcciones IP del cliente":
- Operador: Selecciona
Está en - Valor: Ingresa la IP de tu servidor VPS donde está instalado el facturador

- Operador: Selecciona
-
En "TTL" (Tiempo de vida del token):
- Define las fechas de inicio y finalización del token según tus necesidades

-
Haz clic en "Continuar al resumen" y luego "Crear token"
-
Copia el token generado y guárdalo inmediatamente
⚠️ Importante: Guarda el token en un lugar seguro. No podrás verlo nuevamente después de cerrar esta ventana.