Nginx-Proxy y ACME-Companion

Lo que se necesita

Lo que ofrece

Docker y Letsencrypt con los containers asistentes

General Architecture

Hay varios aspectos clave a tener en cuenta para entender este ejemplo de docker compose y poder trabajar con él más allá del ejemplo básico.

Para añadir una nueva app con un nuevo subdominio, basta con hacer lo siguiente:

dig @8.8.8.8 watermelon.fruit.com

Donde watermelon.fruit.com es el dominio que queremos probar que apunta a la dirección IP pública de mi máquina. Para ello le hacemos el query a los servidores DNS de Google 8.8.8.8.

Nota: si el servidor DNS 8.8.8.8 no responde la dirección pública de nuestro host, debemos solucionar eso lo primero antes de poder continuar.

networks:
  - proxy-tier
    environment:
      - VIRTUAL_HOST=watermelon.fruit.com
      - LETSENCRYPT_HOST=watermelon.fruit.com
      - LETSENCRYPT_EMAIL=vegetables@fish.com

OJO, deben ser lo mismo VIRTUALHOST y LETSENCRYPTHOST.

Estas líneas son importantes por que se debe configurar con ellas tanto el container LetsEncrypt como también el container proxy que recordemos que configurará su nginx dinámicamente a partir de la información contenida en el archivo docker-compose.yml en tiempo de ejecución.

Nótese que cada vez que añadamos un subdominio nuevo, se realizará un proceso challenge para generar unos certificados firmados por LetsEncrypt.

Es decir, si tenemos un dominio y varios subdominios, tendrán cada uno su certificado correspodiente, e.g.

VIRTUAL_HOST=fruit.com → generará un certificado LetsEncrypt VIRTUAL_HOST=watermelon.fruit.com → generará un certificado LetsEncrypt distinto para este subdominio específicamente.

Nota: los certificados generados para el host fruit.com y watermelon.fruit.com serán distintos.