Есть много инструкций и вариантов установки web сервера nginx и бесплатных https сертификатов Let’s Encrypt, в статье пойдет речь ещё об одном способе через Docker
Есть достаточно стандартный способ установки nginx и certbot в Docker, просто устанавливаем в соответствии с инструкциями nginx и certbot
Однако поскольку запуск в Docker является запуском в отдельном хосте то нет полноценного доступа из certbot в nginx, кроме того у меня даже не получилось обновить существующие сертификаты, на некоторых доменах выдавало ошибку, по этому мы будет устанавливать certbot в контейнер nginx, в принципе статью можно было написать только публикацией конфигурации docker compose для запуска nginx, но поскольку это всё таки статья то я позволил себе предисловие.
создаем папку с конфигами, например c именем nginx и создаем конфигурационный файл docker-compose.yaml
mkdir nginx cd nginx</pre> <pre>nano docker-compose.yaml
и в файл вставляем следующее содержимое
version: '3' services: nginx: container_name: nginx build: ./conf/ restart: always privileged: true hostname: nginx ports: - 80:80 - 443:443 volumes: - ./nginx/conf:/etc/nginx/conf - ./nginx/enabled:/etc/nginx/enabled - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./www:/var/www - ./certbot/www/:/var/www/certbot/:rw - ./certbot/conf/:/etc/letsencrypt/:rw
для корректного запуска надо создать файл конфигурации nginx.conf, при запуске контейнера создаются папки, а не файлы и если не создать файл то сервер nginx не запуститься и выдаст ошибку, остальные папки создаться автоматически. Для того чтобы в контейнер nginx запихать и certbot мы будем собирать контейнер, для этого в конфиге есть строка:
build: ./conf/
соответственно создаем папку с именем conf и там файл Dockerfile
mkdir conf cd conf nano Dockerfile
вставляем следующее содержимое
FROM nginx:latest RUN apt-get update RUN apt-get install git -y RUN apt-get install certbot python3-certbot-nginx -y RUN apt install -y locales && sed -i '/ru_RU.UTF-8/s/^# //g' /etc/locale.gen && locale-gen ENV LANG=ru_RU.UTF-8 ENV LANGUAGE=ru_RU:UTF-8 ENV LC_ALL=ru_RU.UTF-8
я только установил certbot и не настраивал автоматическое обновление сертификатов, при желании соответственно надо изменить Dockerfile, но я получаю сертификаты и обновляю из хоста.
После подготовки переходим в каталог с нашим docer-compose.yaml и запускаем контейнер
docker compose up -d
после старта можно настроить наши домены в nginx, для перезапуска nginx (например для применения изменений в конфигурацию nginx) из хоста запускаем команду
docker exec nginx nginx -s reload
для получения сертификатов:
docker exec -it nginx certbot --nginx -d ИМЯ_ДОМЕНА
для обновления сертификатов
docker exec -it nginx certbot renew --fry-run