Я запускаю пару 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
, не возвращая ошибку?