Настройка безопасного использования letsencrypt nginx dokcer — Администрирование devops сопровождение проектов

Настройка безопасного использования 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. Посылаем им лючи добра, а о новом тренде рассказываем друзьям и знакомым 🙂  
Другие новости
03.08.2024
Сервер упал «вчера» или назад в будущее. Настраиваем atop!

Всем привет доброго лета! Задача из уст заказчика звучала следующим образом : \»мониторинг яндекса сказал что сайт не работает, при этом сервер пингуется\». Ну первым делом лезу на подвластный мне сервер, смотрю логи : аптайм 100 дней, перезагрузок не было

Хранение конфигурационных файлов в Git (Gitlab)

Было время не хранил я ничего в гите, и было это не торт. Один неверный символ мог съесть уйму времени! Годы шли и однажды прислушался к совету друга программиста использовать гитлаб.   Сервисы которые по своей идеологии не пересекаются я