certbot на docker не создает несколько живых папок для поддоменов - PullRequest
0 голосов
/ 08 февраля 2020

Я запускаю пару docker контейнеров, в данном случае веб-сервер, на котором запущен nginx:alpine и образ certbox/certbox по умолчанию. В контейнере Nginx я запускаю 2 серверные части для поддоменов с веб-сайтом stati c. Основной домен работает на другом VPS, поэтому я сделал определенные записи c A для этих двух поддоменов.

Это мой nginx.conf

server {
  listen 80;
  listen [::]:80;

  root /var/www/website1;
  index index.html;

  server_name website1.example.com;

  location / {
      try_files $uri $uri/ =404;
  }

  location ~ /.well-known/acme-challenge {
    allow all;
    root /var/www/website1;
  }
}

server {
  listen 80;
  listen [::]:80;

  root /var/www/website2;
  index index.html;

  server_name website2.example.com;

  location / {
      try_files $uri $uri/ =404;
  }

  location ~ /.well-known/acme-challenge {
    allow all;
    root /var/www/website2;
  }
}

Как и ожидалось, я вижу оба сайта работают на поддоменах.

Но когда я пытаюсь запустить certbot на обоих сайтах, создается только одна папка (одна из первых поддоменов)!

Это docker составьте файл, который я использую для этого:

version: '3'

services:
  webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - website1:/var/www/website1
      - website2:/var/www/website2
      - ./nginx-conf:/etc/nginx/conf.d:ro
      - certbot-etc:/etc/letsencrypt
      - certbot-var:/var/lib/letsencrypt
    networks:
      - app-network

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - certbot-var:/var/lib/letsencrypt
      - website1:/var/www/website1
      - website2:/var/www/website2
    depends_on:
      - webserver
    command: certonly --email my.name@example.com --agree-tos --no-eff-email --staging --webroot -w /var/www/website1 -d website1.example.com -w /var/www/website2 -d website2.example.com

volumes:
  certbot-etc:
  certbot-var:
  website1:
    driver: local
    driver_opts:
      type: none
      device: /home/user/html/website1/
      o: bind
  website2:
    driver: local
    driver_opts:
      type: none
      device: /home/user/html/website2/
      o: bind

networks:
  app-network:
    driver: bridge

Контейнер certbot работает нормально, завершается с (0), а когда я go и смотрю в контейнер веб-сервера: sudo docker-compose exec webserver ls -la /etc/letsencrypt/live я получаю следующее:

total 16
drwx------    3 root     root          4096 Feb  7 20:05 .
drwxr-xr-x    9 root     root          4096 Feb  8 12:19 ..
-rw-r--r--    1 root     root           740 Feb  7 20:05 README
drwxr-xr-x    2 root     root          4096 Feb  7 20:05 website1.example.com

Таким образом, второй поддомен не создан.

Я также попытался добавить два разных certonly прогона, изменив мою команду docker-compose.yml на:

command: >
      sh -c "certonly --email my.name@example.com --agree-tos --no-eff-email --staging --webroot -w /var/www/website1 -d website1.example.com
          && certonly --email my.name@example.com --agree-tos --no-eff-email --staging --webroot -w /var/www/website2 -d website2.example.com"

Но это приводит к ошибке: certbot: error: File not found: certonly --email my.name@example.com --a...

Как я могу заставить certbot создавать сертификаты для обоих поддоменов? Или как я могу использовать несколько команд в моем файле docker-compose.yml, не возвращая ошибку?

...