Saltar al contenido

Categoría: Docker

Como usar Let’s Encrypt (versión de Docker) junto a un servidor web corriendo en Docker

Docker es una gran tecnología que nos permite correr los servicios en contenedores. De esta forma podemos aislar y manejar mejor nuestros entornos de desarrollo y producción. Hace unos meses tenía un contenedor de Docker con Nginx corriendo código en PHP y necesitaba agregar un certificado de seguridad. Pero no sabia como hacer para instalar Let’s Encrypt en la imagen sin modificarla para poder generar los contenedores.

Descubrí que existe una versión oficial para Docker. Con ella podemos ejecutar el comando certbot que se encarga de validar y generar los certificados para nuestro dominio web. Parte del proceso consiste en subir un archivo generado a la raíz del servidor web para que el servicio de Let’s Encrypt puede acceder remotamente y así validar que el dominio es nuestro. Pero por la naturaleza de los contenedores, es como complicado hacer que certbot suba archivos al contenedor del servidor web.

La solución para ello es utilizar volúmenes. Abrimos certbot y le indicamos que la ruta a subir el archivo sea la carpeta que se monta como volumen en el servidor web.

Docker + Let's Encrypt = Amor
Puedes combinar estas tecnologías para hacer sitios mas seguros.

Generar el certificado con el contenedor de Let’s encrypt

Para ello, puedes ejecutar el siguiente comando. Lo que hace es decirle a Docker que ejecute el comando de generación de certificados en las carpetas deseadas para el dominio definido y lo haga dentro de la imagen certbot/certbot que ofrece let’s encrypt. Recuerda agregar este comando al cron para que se ejecute por lo menos semanalmente o cada 3 días (me parece exagerado hacerlo diariamente)

/usr/bin/docker run -it --rm -v /CARPETA_CON_LOS_CERTIFICADOS:/etc/letsencrypt -v /CARPETA_SERVIDOR_WEB:/app certbot/certbot certonly -a webroot --webroot-path /app -d MI_DOMINIO

Recuerda sustituir en este comando las siguientes variables:

  • CARPETA_CON_LOS_CERTIFICADOS es la carpeta donde se van a guardar los certificados generados. La configuración de tu servidor web debe apuntar a este lugar.
  • CARPETA_SERVIDOR_WEB es la carpeta raíz del dominio dentro del servidor web. Es decir si subes un archivo llamado test.txt debería estar visible en midominio.extension/test.txt . De esta manera certbot puede subir el archivo que permite confirmar que eres dueño del dominio a asegurar con certificado.
  • MI_DOMINIO es el dominio público para el cual se crearán tus certificados de seguridad.

Configurar el servidor web para usar los certificados

La aplicación Certbot de Let’s encrypt tiene un comando para auto-configurar los servidores web donde esta funcionando. Debido a que estamos un contenedor para Let’s encrypt y otro para el servidor web. No habrá comunicación directa entre ello, por lo que recomiendo actualizar la configuración manualmente, en mi caso, para una pagina hospedada con nginx la sección es la siguiente:

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/MI_DOMINIO/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MI_DOMINIO/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

Luego de esto, debes reiniciar el servidor web (en mi caso aprovecho y reinicio el contenedor del servidor para liberar memoria) y ya deberías tener tu dominio con el certificado web generado por let’s encrypt.

¡Ahora puedes disfrutar de un sitio web mas seguro!

Deja un comentario

WordPress y Docker: Mi charla del WordCamp Cochabamba 2021

Hace unas semanas tuve la oportunidad de participar en el WordCamp de Cochabamba 2021. En ella hablé por primera vez de Docker y como utilizarlo con WordPress. Para quienes no conocen Docker, es una herramienta que permite trabajar con contenedores, una tecnología para encapsular las aplicaciones junto a su entorno de ejecución (podemos verlo como una proceso que por dentro tiene Linux y mas aplicaciones corriendo sobre él).

En el caso de WordPress, podemos encapsular en un contenedor una instalación de WordPress junto un servidor MySQL, Nginx con versiones específicas. Así cuando ejecutemos ese contenedor en producción, en el ambiente local o desarrollo; van a poseer la misma versión y el mismo software así que nos podemos concentrar solo en el desarrollo de WordPress.

¿Por qué usarlo?

Una de las ventajas es que se encarga de la configuración e instalación de las capas inferiores de una aplicación. En el caso de WordPress, no nos preocuparemos si la versión de PHP o MySQL instaladas en el ámbito de desarrollo son diferentes al del entorno de producción. Por lo que podemos programar a una versión específica del lenguaje sin que falle posteriormente. Otro uso es poder intercambiar esas capas inferiores fácilmente y así probar un tema o plugin que hemos desarrollado, en diferentes versiones de PHP o de WP y comprobar compatibilidad.

Arquitectura de varias instalaciones de WordPress con distintas versiones de MySQL usando Docker
Ejemplo de como puedes usar Docker para correr un plugin en instalaciones de distintas versiones de WordPress

En fin, hay un montón de usos que podemos hacer pero mejor mira mi charla sobre el tema. Aprenderás todo lo necesario para iniciarte en poco tiempo.

Mi charla sobre WordPress y Docker

Esta es la primera vez que doy la charla en un WordCamp. En esta charla explico las bases teóricas de Docker, cómo aplicarlo para un instalación de WordPress, ejemplos y escenarios de como usarlos. Por ejemplo, si quieres probar un código con varias versiones de WordPress al mismo tiempo, en el vídeo puedes ver hacerlo y así ahorrar tiempo.

Si deseas saber todo eso, te recomiendo ver el video sobre Dockeriza tu flujo de desarrollo con WordPress y aprende a iniciarte con esta tecnología. Si no puedes verlo puedes hacerlo desde su página en WordPress.tv

Si te gustó, recuerda compartirlo con otras personas para que todos aprendamos a mejorar nuestras habilidades. También puedes dejar tu comentario si deseas agregar algo al contenido o si tienes una duda.

¡A estudiar contenedores!

Deja un comentario