Quiero habilitar ssl mediante docker-letsencrypt-nginx-proxy-companion . Este es el docker-compose.yml
version: "3.3" services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - certs:/etc/nginx/certs:ro - vhostd:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro restart: always db: # --- wordpress: # --- environment: # --- VIRTUAL_HOST: blog.ironsand.net LETSENCRYPT_HOST: blog.ironsand.net LETSENCRYPT_EMAIL: mymail@example.com restart: always letsencrypt-nginx-proxy-companion: container_name: letsencrypt image: jrcs/letsencrypt-nginx-proxy-companion volumes: - certs:/etc/nginx/certs - vhostd:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro environment: NGINX_PROXY_CONTAINER: nginx-proxy restart: always networks: default: external: name: nginx-proxy volumes: certs: vhostd: html: docker logs letsencrypt muestra que ya existe un certificado.
/etc/nginx/certs/blog.ironsand.net /app Creating/renewal blog.ironsand.net certificates... (blog.ironsand.net) 2020-04-09 00:03:23,711:INFO:simp_le:1581: Certificates already exist and renewal is not necessary, exiting with status code 1. /appPero el desafío ACME no devuelve nada. (¿falla?)
$ docker exec letsencrypt bash -c 'echo "Hello world!" > /usr/share/nginx/html/.well-known/acme-challenge/hello-world' $El puerto 443 está escuchando, pero el puerto está cerrado desde el exterior.
// in remote server $ sudo lsof -i:443 [sudo] password for ubuntu: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME docker-pr 10910 root 4u IPv6 633694 0t0 TCP *:https (LISTEN) // from local pc ❯ nmap -p 443 blog.ironsand.net Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-09 09:44 JST Nmap scan report for blog.ironsand.net (153.127.40.107) Host is up (0.035s latency). rDNS record for 153.127.40.107: ik1-418-41103.vs.sakura.ne.jp PORT STATE SERVICE 443/tcp closed https Nmap done: 1 IP address (1 host up) scanned in 0.21 secondsEstoy usando filtrado de paquetes, pero está abierto para 80 y 443, y no estoy usando firewall. ¿Cómo puedo investigar más donde existe el problema?
No puedo resolver su problema directamente, pero puedo escribir algunas sugerencias, por lo que puedo resolver su problema.
Tu comando no devuelve nada.
bash -c 'echo "Hello world!" > /usr/share/nginx/html/.well-known/acme-challenge/hello-world'
Este comando solo escribe "¡Hola mundo!" al lugar y normalmente no devuelven nada. Consulte https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections
Mire dentro de la carpeta de certificados.
Eche un vistazo a la carpeta de certificados y tal vez límpielos. Verifique que la carpeta se haya montado correctamente en su contenedor nginx. Tome un bash en el contenedor y verifique la carpeta ssl.
Comprueba que el cortafuegos no se rompe nada
¿Desde afuera no hay conexión posible? ¿Qué es del interior? Inicie sesión en su docker-host y verifique la conexión desde allí (tal vez openssl y curl sean sus amigos),
No use SSL dentro del contenedor.
A menudo veo problemas cuando alguien intenta usar ssl con imágenes ACME y "volúmenes compartidos y de montaje salvaje". Pero nunca escuché sobre problemas, cuando las mismas personas usan un proxy inverso normal. Explico una buena configuración a continuación.
Así que simplemente elimine todo el código letscrypt de su contenedor y cierre el puerto 443 de su contenedor.
(Además, puede cambiar a una imagen no raíz y exponer solo los puertos que no necesitan privilegios de raíz). Luego, instale nginx en su host y configure un proxy inverso (algo así como proxy_pass 127.0.0.1:8080 ). Y ahora instale certbot e inícielo. Te ayuda y es sencillo.
El certbot también puede mantener sus certificados.