Как настроить автоматическое обновление сертификатов в 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 <a href="https://nginx.org/ru/docs/beginners_guide.html" rel="nofollow">перечитать </a> конфиги <br/> например <code>nginx -t &amp;&amp; nginx -s reload</code>
Можно попробовать <a href="https://angie.software/installation/#install-docker" rel="nofollow">Angie</a> - он собирается с модулем <a href="https://angie.software/configuration/modules/http_acme/" rel="nofollow">http_acme</a> - сервер сам себе выпустит сертификат и будет следить за его актуальностью.
<pre><code>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 &amp; wait $${!}; nginx -s reload; done &amp; 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 &amp; wait $${!}; done;'"</code></pre>
Похожие вопросы