nginx docker上的certbot不会为子域创建多个活动文件夹

dtcbnfnu  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(115)

我运行了几个Docker容器,在本例中是一个运行nginx:alpine的Web服务器和默认的certbox/certbox镜像。在Nginx容器上,我为静态网站的子域运行2个服务器部件。主域运行在不同的VPS上,所以我为这两个子域做了特定的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 compose文件:

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 [email protected] --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),当我去查看webserver容器时: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

所以第二个子域没有创建。
我还尝试通过将docker-compose.yml命令更改为:

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

但这会导致一个错误:certbot: error: File not found: certonly --email [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) --a...
如何让certbot为两个子域创建证书?或者我如何在docker-compose.yml文件中使用多个命令而不返回错误?

u7up0aaq

u7up0aaq1#

对于image:certbot/certbot- entrypoint是certbot,因此您只能包含一行certbot参数。如果你想生成两个文件夹/使用--cert-name之前,你点-w -d第二域/网站2。

command: certonly --email [email protected] --agree-tos --no-eff-email --staging --webroot --cert-name website1.example.com -w /var/www/website1 -d website1.example.com --cert-name website2.example.com -w /var/www/website2 -d website2.example.com

相关问题