Настройка безопасного использования letsencrypt nginx dokcer

Сейчас мало кто не знает о кампании letsencrypt, и бесплатных сертификатах. Меня по началу смутило что необходимо запустить скрипт от рута, который крайне дружелюбно влезет в конфиг веб сервера и после проверки вставит сертфикат куда посчитает нужным. Кроме того для проверки домена ему потребуется доступ к рутовой директории с файлами сайта.  Однако при первом занкомстве оказалось что все не так страшно и выход из положения долго искать не нужно. Скрипт можно запускать от не привелигированного пользователя, а конфиг веб сервера вообще не нужно трогать лапками letsencrypt. Кроме того если тревога осталась — можно запускать скрипт внутри изолированного контейнера, но это имхо уже лишнее.

Покажу на примере docker  контейнера с стандартным сайтом на 80м порту. Нам нужно создать папку в которую letsencrypt положит файл проверки, прокинуть ее в контейнер с внешним балансером nginx. Создать пользователя от которого будет работать скрипт letsencrypt и поменять права на соответствующие папки.

Поехали. От рута:

mkdir -p /srv/docker/letsencrypt/casp.ru/old
yum install letsencrypt
useradd -m -s /bin/bash letsencrypt
chown -R letsencrypt /var/log/letsencrypt/ /etc/letsencrypt/ /srv/docker/letsencrypt/

Если в вашем дистрибутиве нету такого — то клонируем репу и продолжаем работать локально

git clone https://github.com/letsencrypt/letsencrypt

Меняем конфиг docker-compose для nginx, добавляем volumes:

volumes:
- /etc/letsencrypt/:/etc/letsencrypt/:ro
- /srv/docker/letsencrypt:/var/www/letsencrypt:ro

После добавляем в nginx location:

location  ~ ^/\.well-known  { root /var/www/letsencrypt/; }

Будте внимательны, если у Вас на 80м порту нет ничего кроме редиректа на https следите чтобы location / существовал.

И от пользователя:

sudo -u letsencrypt letsencrypt certonly --webroot -w /srv/docker/letsencrypt/ -d casp.ru/old

Если все сделали правильно — увидите сообщение об успехе. Добавляем поддержку https в наш домен:

listen 443 ssl;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate_key /etc/letsencrypt/live/casp.ru/old/privkey.pem;
ssl_certificate /etc/letsencrypt/live/casp.ru/old/fullchain.pem;

 

 

Релоадим nginx  и наслаждаемя зеленым цветом сертификата выданного на 3 месяца.

Ставим в cron задачу по апдейту сертификатов раз в месяц.

0 0 * * 1  letsencrypt renew && docker exec -it nginx_in nginx -s reload

Или при работе с git клоном

0 0 * * 1 cd /root/letsencrypt && ./letsencrypt-auto renew && nginx -t && nginx -s reload

На этом все. Оглядываемся на 15 минут назад, понимаем насколько удобный продукт сделали letsencrypt. Посылаем им лючи добра, а о новом тренде рассказываем друзьям и знакомым 🙂

 

Другие новости
21.05.2019
Настойка satis для пакетов composer в docker

Настрройка satis satis — кеширующий сервер для пакетов php composer. Для настройки репозитория будем использовать официальный docker. Разработчикам понадобится редактировать файла конфигурации satis.json, для этого поднимем отдельный контейнер с sftp и ftp серверами внутри. Файл конфиргурации в нашем случае должен

27.07.2018
Лечим wordpress https err_too_many_redirects

По какой логике wordpress понимает что к нему пришел https не понятно, но часто сталкиваемся с проблемой когда стили и js вордпресс отдает  по http и изза mixed content браузеры их режут. Если в настройках (Настройки -> Общие) жестко указали