Я пытаюсь добавить автоматическое завершение TLS / SSL для Nginx в docker-compose , развернутом через docker-machine (DigitalOcean).
Я нашел несколько хороших ресурсов [ humankode / как настроить ... , medium / nginx-and-lets-encrypt ... ] о том, как это сделать. через docker-compose, но оба они говорят с точки зрения нахождения на сервере. Я действительно хочу избежать этого. Я бы хотел сделать это локально, на своем ноутбуке, собрать все вместе и отправить. Или даже сделать это удаленно, не используя ssh.
Несколько попыток провалились, но кажется, что они были близки. Основным препятствием, похоже, являются файлы / тома. Следуя руководству medium / nginx-and-lets-encrytp ... , у меня возникли проблемы с сохранением OpenSSL privkey.pem. Другое руководство ( humankode ), насколько мне известно, делает все на сервере, и именно там живут тома.
Моя последняя попытка состояла в том, чтобы настроить сертификаты на компьютере через DigitalOcean tutorial и попробуйте включить их в мою сборку docker-compose. Не повезло.
Было много модификаций, но мои настройки похожи на:
docker-compose.yml
version: '3.7'
services:
nginx:
image: nginx:1.15.9-alpine
container_name: nginx
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
volumes:
- /etc/letsencrypt
- /var/www/certbot
ports:
- "80:80"
- "443:443"
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
certbot:
image: certbot/certbot
restart: unless-stopped
volumes:
- "/etc/letsencrypt"
- "/var/www/certbot"
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
nginx / Dockerfile
FROM nginx:1.15.9-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY prod.conf /etc/nginx/conf.d/
nginx / conf.d
# PRODUCTION
server {
listen 80;
listen [::]:80;
server_name example.site;
location ~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.site;
ssl_certificate /etc/letsencrypt/live/example.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.site/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;