Как настроить автоматическое обновление сертификатов в Docker Compose для Nginx с последующим перезапуском контейнера?

Как настроить автоматическое обновление сертификата и перезапуск контейнера Nginx после этого в Docker Compose?
  • 6 мая 2024 г. 18:50
Ответы на вопрос 4
Для настройки автоматического обновления сертификатов и перезапуска контейнера Nginx в Docker Compose можно использовать инструменты для управления сертификатами, такие как certbot, и скрипты для перезапуска контейнера.

Вот пример конфигурации Docker Compose для такой настройки:

```
version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./certs:/etc/nginx/certs
      - ./nginx.conf:/etc/nginx/nginx.conf
    command: /bin/bash -c "while :; do nginx -s reload; sleep 12h; done"

  certbot:
    image: certbot/certbot
    volumes:
      - ./certs:/etc/nginx/certs
      - ./nginx.conf:/etc/nginx/nginx.conf
    command: certbot renew --deploy-hook "docker-compose restart nginx"
```

В данном примере, у нас есть два сервиса: `nginx` и `certbot`. Сервис `nginx` запускает контейнер с Nginx, прокидывает порты 80 и 443, монтирует директорию с сертификатами и конфигурацией Nginx. Команда в параметре `command` перезапускает Nginx каждые 12 часов.

Сервис `certbot` запускает контейнер с certbot, который обновляет сертификаты с использованием команды `renew` и выполняет перезапуск контейнера Nginx после обновления.

При запуске Docker Compose с такой конфигурацией, сертификаты будут автоматически обновляться и контейнер Nginx будет перезапускаться после этого.
попросить nginx перечитать  конфиги 
например nginx -t && nginx -s reload
Можно попробовать Angie - он собирается с модулем http_acme - сервер сам себе выпустит сертификат и будет следить за его актуальностью.
nginx:
  container_name: nginx_container
  image: nginx
  ports:
    - 80:80
    - 443:443
  networks:
    - private
    - public
  restart: always
  volumes:
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    - ./nginx/conf.d/:/etc/nginx/conf.d/:ro
    - ./certbot/www:/var/www/certbot/:ro
    - ./certbot/conf/:/etc/nginx/ssl/:ro
  command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

certbot:
  image: certbot/certbot
  volumes:
    - ./certbot/www/:/var/www/certbot/:rw
    - ./certbot/conf/:/etc/letsencrypt/:rw
  entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
Похожие вопросы