Добавить в docker контейнер поддержку сертификатов Let's Encrypt

10 000 руб. за проект
23 ноября 2021, 20:21 • 5 откликов • 50 просмотров
Дано:
Билд-скрипт на bash и Dockerfile, которые билдят docker на базе Ubuntu 20 внутри с nginx сервером, работающим по https на порту 443. Докер можно запускать на любом произвольном порту (например, 8888) и произвольном домене (например, test123456789.com), для которого существует SSL сертификат.
В результате запуска созданного докера появляется сайт, который открывается в браузере по адресу, например, https://test123456789.com:8888/.

Проблема:
SSL сертификат для доменов (например, test123456789.com) сейчас приходится приобретать у Comodo и аналогичных поставщиков, так как в данный момент в докере нет генерации сертификата от Let's Encrypt.

Нужно:
1. Добавить в процедуру билда докера (скрипт create.sh) параметр "domain", который будет содержать имя домена, и для него генерировать SSL сертификат через Let's Encrypt внутри докера. Файл сертификата должен размещаться в каталоге /root/cert/.
2. Добавить в cron файл (он уже есть) процедуру обновления сертификата, чтобы он не экспайрился.

Ремарка:
Поскольку стандартный certbot не позволяет генерировать SSL сертификат для сайтов, работающих на произвольных портах, отличных от 80/443 (не проходит валидация при выпуске сертификата), необходимо использовать какие-то другие решения, которые поддерживают протокол ACME.

Архив проекта с докер-файлом и шелл-скриптом, в который необходимо добавить генерацию сертификатов Let's Encrypt:
https://go.instad.io/download/docker.zip

Для создания и запуска docker-образа, необходимо распаковать файл и запустить

./create.sh 8888

Внимание: в каталоге ./cert/ должны лежать sscert.crt и sscert.key (сертификат и ключ) для домена, на котором вы будете использовать докер-образ (например, test1234567890.com). 8888 - это порт, на котором будет открываться сайт. Если докер создался и запустился без ошибок, то сайт будет доступен по адресу https://test1234567890.com:8888/.