Получение SSL-сертификата от Let's Encrypt
Для настройки подключения по HTTPS необходим SSL-сертификат, их выпуском занимаются центры сертификации, эта услуга платная, цены начинаются от 1-2т.р. и более за сертификат на одно доменное имя на один год.
Альтернативой платным сертификатам, может стать бесплатные сертификаты от центра сертификации Let's Encrypt.
На данные момент большое количество сайтов используют сертификаты от Let's Encrypt, в том числе и stepik.org.
Автоматизированное получение и продление сертификатов от Let's Encrypt осуществляется с помощью Certbot, но в данном случае будет использоваться его одноимённый образ.
Для начала остановим и удалим контейнеры:
docker compose -f docker-compose.prod.yml down
Затем отредактируем файл docker-compose.prod.yml, выполним:
vi docker-compose.prod.yml
Добавим новую секцию для контейнера certbot:
certbot:
image: certbot/certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
command: certonly --webroot --webroot-path=/var/www/certbot/ --email ваш@email --agree-tos --no-eff-email -d имя_вашего_домена -d www.имя_вашего_домена
depends_on:
- nginx
В секции nginx, в volumes добавим:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
И откроем 443 порт для HTTPS:
- 443:443
Примечание: в команде certonly обязательно укажите ваш email и имя вашего домена, это необходимо для получения сертификата!
Создадим директории для certbot, выполним:
mkdir -p certbot/conf
mkdir certbot/www
Перейдём в директорию nginx и отредактируем файл конфигурации htmx_book.conf:
cd nginx
vi htmx_book.conf
Добавим в файл конфигурации htmx_book.conf следующие строки:
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
Вернёмся в директорию проекта и пересоберём образы:
cd ..
docker compose -f docker-compose.prod.yml build
Создадим и запустим контейнеры:
docker compose -f docker-compose.prod.yml up -d
Контейнеры запустились, теперь проверим наличие сертификатов, перейдём в директорию certbot/conf/live:
cd certbot/conf/live
ls -la
В ней должна быть директория с именем вашего домена, смотрим её содержимое:
ls -la имя_вашего_домена
В данной содержатся ссылки на сертификаты для вашего домена, в следующем шаге мы подключим их.