У меня есть несколько контейнеров, которые поддерживают 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
и т. Д.