Невозможно включить ssl docker -letsencrypt- nginx -proxy-companion - PullRequest
1 голос
/ 09 апреля 2020

Я хочу включить ssl с помощью docker-letsencrypt-nginx-proxy-companion. Это 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 показывает, что сертификат уже существует.

/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.
/app

Но вызов ACME ничего не возвращает. (ошибка?)

$ docker exec letsencrypt bash -c 'echo "Hello world!" > /usr/share/nginx/html/.well-known/acme-challenge/hello-world'
$

Порт 443 является списком, но порт закрыт снаружи.

// 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 seconds

Я использую фильтрацию пакетов, но он открыт для 80 и 443 и я не использую брандмауэр. Как я могу узнать больше, если проблема существует?

1 Ответ

1 голос
/ 14 апреля 2020

Я не могу решить вашу проблему напрямую, но могу написать несколько подсказок, поэтому могу решить вашу проблему.

  1. Ваша команда ничего не возвращает.
    bash -c 'echo "Hello world!" > /usr/share/nginx/html/.well-known/acme-challenge/hello-world'
    Эта команда пишет только "Hello world!" к месту и обычно ничего не возвращают. См. https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections

  2. Загляните в папку с сертификатами.
    Загляните в папку с сертификатами и, возможно, почистите их. , Убедитесь, что папка правильно смонтирована в вашем nginx -контейнере. Возьмите bash в контейнер и проверьте ssl-папку.

  3. Убедитесь, что на брандмауэре ничего не сломалось
    Со стороны не возможно подключение? Что изнутри? Войдите на ваш docker -хост и проверьте соединение оттуда (возможно openssl и curl ваши друзья),

  4. Не используйте SSL внутри контейнера.
    Я часто вижу проблемы, когда sombody пытается использовать ssl с ACME-образами и "диким монтированием и общими томами". Но я никогда не слышал о проблемах, когда те же люди используют обычный обратный прокси. Я объясняю хорошую настройку ниже.

Так что просто удалите весь код letcrypt из вашего контейнера и закройте порт 443 вашего контейнера.
(Кроме того, вы можете переключиться на изображение без root и выставляйте только порты, которым не нужны root -привилегии.) Затем установите nginx на свой хост и настройте обратный прокси (что-то вроде proxy_pass 127.0.0.1:8080). А теперь установите certbot и запустите его. Это поможет вам и просто.
certbot также может поддерживать ваши сертификаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...