En este laboratorio aprenderemos cómo instalar certbot usando la imagen oficial de docker nginx:alpine y usarla para crear un certificado SSL para nuestro dominio. Ten en cuenta que para que funcione, debes ser propietario del dominio para el que necesites el certificado y éste debe resolver a la dirección IP pública donde está expuesto el contenedor docker.
ACTUALIZACIÓN 31/08/2020
Los repositorios de software de alpine ya incluyen el paquete certbot y puede ser instalado directamente con apk:
apk add certbot certbot-nginx
Requisitos
Esta es la parte más complicada cuando se ejecuta certbot en una imagen basada en alpine, para poder instalar el módulo certbot primero tenemos que resolver algunas dependencias. Para ahorrarte la molestia de escribir tu propio Dockerfile, te proporcionamos uno:
FROM nginx:1.20-alpine RUN apk add python3 python3-dev py3-pip build-base libressl-dev musl-dev libffi-dev rust cargo RUN pip3 install pip --upgrade RUN pip3 install certbot-nginx RUN mkdir /etc/letsencrypt
Probablemente apreciarás que también creamos una carpeta para letsencrypt. Más adelante montaremos un volumen aquí para que los datos de letencrypt sean persistentes y evitaremos perder el certificado cuando eliminemos el contenedor.
Configurando Nginx
server { listen 80; server_name yourdomain.com; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
Recuerda reemplazar el valor de server_name con tu propio dominio. Ahora, abre el Dockerfile y agrega una nueva línea al final:
COPY default.conf /etc/nginx/conf.d/default.conf
Construyendo la imagen de Docker
Este paso es fácil y supongo que ya sabes cómo construir un Dockerfile, pero de todos modos aquí está el comando:
docker build -t nginx-certbot .
Crear el nuevo certificado con certbot
Primero, ejecutaremos el contenedor anulando el punto de entrada para ejecutar el shell. También montaremos la carpeta letsencrypt para que los datos del certificado sean persistentes.
Advertencia: también recomendaría montar la carpeta nginx en un volumen persistente, pero eso está fuera del alcance de este laboratorio.
docker run -v $(pwd)/letsencrypt:/etc/letsencrypt --name nginx -ti -p 8080:80 nginx-certbot sh
Luego, ejecutamos el comando certbot reemplazando yourdomain.com con tu dominio real (el mismo que usamos para servername). También ten en cuenta que puedes agregar el dominio www, simplemente agrega un indicador «-d» para cada entrada adicional que necesites en el certificado:
certbot --nginx -d yourdomain.com -d www.yourdomain.com
Ahora certbot nos pedirá una dirección de correo electrónico que se usará para la recuperación y luego intentará verificar que es el propietario del dominio dado. Ten en cuenta que si no se puede acceder a su servidor en este dominio, recibirá un error. Si la verificación del dominio tiene éxito, certbot te preguntará si deseas habilitar la redirección de HTTP a HTTPS en la configuración de nginx. Recomendamos hacerlo.
Finalmente, Nginx se volverá a cargar y deberías recibir un mensaje con la ubicación de tus certificados. Ahora, puedes hacer una copia de seguridad de estos certificados si lo deseas.
Automatizar la renovación del certificado
Si no deseamos verificar y renovar manualmente estos certificados cuando se acerquen a la fecha de vencimiento, agregaremos un trabajo cron para que lo haga por nosotros:
0 12 * * * /usr/bin/certbot renew --quiet
Conclusión
Como puedes ver, no ha sido tan difícil crear los certificados SSL para tu dominio usando certbot.
Elegimos alpine docker image para este laboratorio porque probablemente es una de las imágenes base más problemáticas para usar junto con certbot, nosotros tuvimos algunos problemas para que funcionara correctamente debido a problemas de dependencias. Si eliges una imagen basada en ubuntu, probablemente será mucho más fácil configurar certbot, pero el punto es que las imágenes alpine son una opción habitual debido a su naturaleza minimalista.
Espero que hayas disfrutado este laboratorio. No dudes en contactarnos si deseas que te ayudemos en tus proyectos.
¡Nos vemos en la próxima entrada! Feel the Geko way!