У меня есть проект docker-compose, для которого требуется ssl, и я хочу использовать Let's encrypt certbot, который я хочу включить в файл docker-compose для автоматического обновления. Я следил за этим учебник из среды. Проблема в том, что он, кажется, вообще не работает, когда у меня включен ssl в файле конфигурации Nginx, и дает мне только Ошибка авторизации. и:
Type: connection
Detail: Fetching
http://example.com/.well-known/acme-challenge/1234:
Connection refused
Но когда я удаляю параметр ssl в файле конфигурации nginx, он работает, и я получаю сертификаты.
Я сделал следующий файл для создания докеров:
version: '3'
services:
nginx:
restart: always
build:
context: .
dockerfile: Dockerfile
container_name: nginx
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- 80:80
- 443:443
links:
- application
certbot:
image: certbot/certbot
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
application:
restart: always
build:
context: ./accesslink
dockerfile: Dockerfile
container_name: application
Со следующим конфигурационным файлом nginx:
http {
server {
listen 80;
listen [::]:80;
server_name example.com;
location /.well-known/acme-challenge/ {
allow all;
default_type text/plain;
root /var/www/certbot;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /usr/share/nginx/html;
index index.html index.htm;
include /etc/nginx/mime.types;
include /etc/letsencrypt/options-ssl-nginx.conf;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
rewrite /api/(.*) /$1 break;
proxy_pass http://application:3000;
}
}
}
Мой вопрос в основном в том, что я делаю не так и как я могу решить эту проблему? Другой вариант - сначала сгенерировать сертификаты, а затем использовать их, но будет ли сертификация продлена или мне нужно будет делать это вручную?