Como primer post, contaré como he configurado mi docker para que los contenedores tenga su propia url con ssl de manerá automática. Usaremos acme-companion.

En primera instancia, tendremos que asegurarnos que tenemos docker instalado en nuestra máquina.
docker --version
Tras eso, instanciaremos nuestro nginx-proxy, que será el encargado de hacer las redirecciones a nuestros contenedores.
docker run --detach \
--name nginx-proxy \
--publish 80:80 \
--publish 443:443 \
--volume certs:/etc/nginx/certs \
--volume vhost:/etc/nginx/vhost.d \
--volume html:/usr/share/nginx/html \
--volume /var/run/docker.sock:/tmp/docker.sock:ro \
--volume /var/run/docker/my_custom_proxy_settings.conf:/etc/nginx/conf.d/my_custom_proxy_settings.conf
nginxproxy/nginx-proxy
El siguiente paso, será instanciar un contenedor de
nginx-proxy-acme, se encargará de generar «automágicamente» los certificados ssl.
docker run --detach \
--name nginx-proxy-acme \
--volumes-from nginx-proxy \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
--volume acme:/etc/acme.sh \
--env "DEFAULT_EMAIL=mail@yourdomain.tld" \
nginxproxy/acme-companion
También podremos usar esto en su versión compose:
version: '2'
services:
nginx-proxy:
image: nginxproxy/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
network_mode: bridge
acme-companion:
image: nginxproxy/acme-companion
container_name: nginx-proxy-acme
environment:
- DEFAULT_EMAIL=mail@yourdomain.tld
volumes_from:
- nginx-proxy
volumes:
- certs:/etc/nginx/certs:rw
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: bridge
volumes:
conf:
vhost:
html:
certs:
acme:
Con esto, y añadiendo unas variables de entorno a nuestro contenedores, se generaran de manera automática los certificados. Esta variables de entorno son:
"VIRTUAL_HOST=othersubdomain.yourdomain.tld"
"VIRTUAL_PORT=3000"
"LETSENCRYPT_HOST=othersubdomain.yourdomain.tld"
"LETSENCRYPT_EMAIL=mail@yourdomain.tld"
Tendremos que dar de alta el dominio o subdominio en nuestro proveedor.

Para ejemplificar instanciaremos un contenedor de Portainer, que además nos dará paso a otro nuevo post. Antes de hacer esto, comprobaremos en DNSChecker que nuestra propagación esté disponible.
docker run -d --expose 9000 -p "9001:9000" \
--env "VIRTUAL_HOST=portainer.yourdomain.tld" \
--env "VIRTUAL_PORT=9000" \
--env "LETSENCRYPT_HOST=portainer.yourdomain.tld" \
--env "LETSENCRYPT_EMAIL=info@yourdomain.tld" \ --name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest
Y listo, si accedieramos a portainer.yourdomain.tld, llegaríamos hasta nuestro despliegue de portainer.
*Si nos diera error tendríamos que relanzar nuestros contenedores de nginx-proxy y nginx-proxy-acme.
Deja una respuesta