Получение 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
В секции nginx, в volumes добавим:
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
И откроем 443 порт для HTTPS:
- 443:443
Теперь добавим новую секцию 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 имя_вашего_домена
depends_on:
- nginx
Примечание: в команде certonly обязательно укажите ваш email и имя вашего домена, это необходимо для получения сертификата!
Зафиксируем изменения в репозитории:
git commit -am "Add certbot to docker-compose.prod.yml"
Создадим файл .gitignore, он необходим чтоб директория certbot, с сертификатами и прочим, не попала в репозиторий:
vi .gitignore
Со следующей строкой:
certbot
Зафиксируем изменения в репозитории:
git add .gitignore
git commit -am "Create .gitignore file"
Создадим директории для certbot, выполним:
mkdir -p certbot/conf
mkdir certbot/www
Перейдём в директорию nginx и отредактируем файл конфигурации fastapi_ecommerce.conf:
cd nginx
vi fastapi_ecommerce.conf
Добавим в файл конфигурации fastapi_ecommerce.conf следующие строки:
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
Зафиксируем изменения в репозитории:
git commit -am "Add certbot to fastapi_ecommerce.conf"
Вернёмся в директорию проекта и пересоберём образы:
cd ..
docker compose -f docker-compose.prod.yml build
Создадим и запустим контейнеры:
docker compose -f docker-compose.prod.yml up -d
Контейнеры запустились, теперь проверим наличие сертификатов, просмотрим содержимое директории certbot/conf/live:
ls -la certbot/conf/live
В ней должна быть директория с именем вашего домена, просмотрим её содержимое:
ls -la certbot/conf/live/имя_вашего_домена
В данной содержатся ссылки на сертификаты для вашего домена, в следующем шаге мы подключим их.