Autorenew Let’s Encrypt SSL + Nginx

И вот мне всё же надоело обновлять сертификат руками и поэтому я случайно нашёл потрясающую инструкцию как починить.

Только не всё мне в ней понравилось поэтому давайте сделаем всё хорошо и красиво и не будем запускать crbot из под рута потому что это даже как-то неприлично.

Создадим пользователя и добавим nginx в группу этого пользователя!

# useradd -mU -s /bin/bash lets_encrypt
# usermod -aG lets_encrypt nginx

Создадим хранилище для данных crbot!

# su lets_encrypt
# cd /home/lets_encrypt/
# mkdir -p /home/lets_encrypt/certbot/{config,logs,webroot,work}

Теперь надо создать всякие полезные скрипты которые нам пригодятся в ближайшем будущем

# cd /home/lets_encrypt/certbot/
# touch generate.sh renew.sh renew-hook.sh 
# chmod u+x *sh

Теперь нужно заполнить эти файлы полезным содержимым.

# cat generate.sh
--------------------------------------------------------
#!/bin/bash

if [ -z "$1" ]; then
    echo "Please, enter domain as first argument"
    exit
fi
DOMAIN=$1

EMAIL="changeme@example.com"
if [ $EMAIL = "changeme@example.com" ]; then
    echo "Please, change email"
    exit
fi

certbot certonly --webroot --agree-tos --no-eff-email \
  --email $EMAIL \
  --config-dir /home/lets_encrypt/certbot/config/ \
  --work-dir /home/lets_encrypt/certbot/work/ \
  --logs-dir /home/lets_encrypt/certbot/logs/ \
  -w /home/lets_encrypt/certbot/webroot/ \
  -d $DOMAIN
# cat renew.sh
--------------------------------------------------------
#!/bin/bash

EMAIL="changeme@example.com"
if [ $EMAIL = "changeme@example.com" ]; then
    echo "Please, change email"
    exit
fi

certbot renew --noninteractive \
          --email $EMAIL \
          --config-dir /home/lets_encrypt/certbot/config/ \
          --work-dir /home/lets_encrypt/certbot/work/ \
          --logs-dir /home/lets_encrypt/certbot/logs/ \
          --renew-hook /home/lets_encrypt/certbot/renew-hook.sh \
          -w /home/lets_encrypt/certbot/webroot/
# cat renew-hook.sh
--------------------------------------------------------
#!/bin/bash
sudo service nginx reload

Редактируем cron

# crontab -e

20 3 * * * /home/lets_encrypt/certbot/renew.sh

Это все настройки что я хотел привнести в этот мир. Остальное берите в оригинальной инструкции.

Что же здесь собственно происходит?

Мне не нравится запускать что-нибудь из под рута поэтому мы создаем специального пользователя для certbot (клиент для Let’s Encrypt), создаем нужные ему для локальной работы директории и создаем три простых скрипта.

Для того чтобы сгенирировать сертификат в первый раз надо надо сделать там вские настройки в nginx’e, перезагрузить его и потом запустить из под нашего нового пользователя:

# ./generate.sh hshhhhh.name

И внимательно читать вывод консоли. Или не читать — зачем вам этот дурацкий SSL?

А если вам всё же не всё же понятно после этой, кхм, великолепной инструкции — задавайте вопросы в комментариях, подписывайтесь на RSS, делитесь этим постом в ваших социальных сетях!

2017.06.08 02:55