Обновить.Сертификаты LetsEncrypt в двух разных контейнерах докеров - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть несколько контейнеров, которые поддерживают HTTPS-соединения:

certbot:
  image: certbot/certbot
  restart: unless-stopped
  volumes:
    - ./certbot/conf:/etc/letsencrypt
    - ./certbot/www:/var/www/certbot
  # Update certificates every 12 hours.
  entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

Он монтирует сертификаты LetsEncrypt и обновляет его каждые 12 часов.

Кроме того, у меня есть два дополнительных контейнера:

nginx:
  restart: always
  build: ./nginx
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - db-data:/var/lib/postgresql
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    - ./nginx/app.conf:/etc/nginx/conf.d/app.conf:ro
    - frontend-webroot:/var/www/app.com/public_html/:ro
    - ./certbot/conf:/etc/letsencrypt
    - ./certbot/www:/var/www/certbot
  depends_on:
    - api
    - frontend
  # Reloads nginx every 6 hours to make it sure everything is OK.
  command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

Который монтирует сертификаты и перезагружает nginx один раз в 6 часов (как рекомендуется)

и другой контейнер:

api:
  container_name: api
  restart: always
  build: ./web
  ports:
    - "9002:9002"
  volumes:
     - /usr/src/app/app/static
     - ./certbot/conf:/etc/letsencrypt
     - ./certbot/www:/var/www/certbot
  depends_on:
    - postgres

Этот контейнер предоставил REST API, и я не являюсьКонечно, это хорошая идея - перезагружать этот контейнер каждые X часов для обновления сертификатов LetsEncrypt.

Что не так в этой архитектуре?И как это можно улучшить, чтобы избежать перезагрузки контейнера с помощью REST API, но чтобы можно было работать с сертификатами?

ОБНОВЛЕНИЕ

Что я ожидаю от своего приложения:

Они должны быть доступны как домашние страницы и т. Д. Как вызовы API, такие как:

GET https://localhost:9000/api/endpoint  # API call
GET https://localhost:443/home  # Home page from another container with React app

и т. Д.

...