Nginx в Docker с сертификатами Let’s Encrypt

Есть много инструкций и вариантов установки 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

 

Nginx в Docker с сертификатами Let’s Encrypt

Навигация по записям