Letsencrypt certbot несколько крючков обновления

Я автоматизирую обновление SSL-сертификата от certbot LetsEncrypt. Фактическое обновление работает, но мне нужно автоматизировать перезапуск служб, чтобы они загружали обновленные сертификаты. Мне было интересно, можете ли вы использовать multiple --renew-hook параметры в cronjob для letsencrypt renew?

как автоматизировать перезапуск служб при продлении сертификата?

4 ответов


Yes вы можете использовать несколько операторов --renew-hook. также используйте флаг-q, чтобы он отправлял вам пустое уведомление до тех пор, пока обновление не произойдет. Он также не перезапускает ни одну из ваших служб, пока не произойдет обновление. Это также прикрепляет файл журнала к электронной почте, если вы этого хотите.

у меня есть cron, который ежедневно работает bash.

внутри моего bash (certbotrenew.sh) это просто

#!/bin/bash
cd /opt/certbot
sudo ./certbot-auto renew --renew-hook "service postfix reload" --renew-hook "service dovecot restart" --renew-hook "service apache2 reload" -q >> /var/log/certbot-renew.log | mail -s "CERTBOT Renewals" me@myemail.com  < /var/log/certbot-renew.log
exit 0

и мой крон

00 20 * * 1 /bin/certbotrenew.sh

некоторые люди вопрос почему я отправляю электронное письмо независимо от того, если ничего не произошло, мне просто всегда нравится знать, что мои ежедневные кроны работают.


из того, что я видел из новой установки в Ubuntu 16.04 CertBot, он создает задание cron:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates haven't been revoked, etc.  Renewal will only occur if expiration is within
# 30 days.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook 
'/bin/run-parts /etc/letsencrypt/pre-hook.d/' --post-hook '/bin/run-parts /etc/letsencrypt/post-hook.d/' --renew-hook '/bin/run-parts
/etc/letsencrypt/renew-hook.d/'

так он выполняет run-parts во многих каталогах, включая /etc/letsencrypt/renew-hook.d/

вам просто нужно добавить исполняемый файл в любой из этих каталогов крючка (выберите тот, который вам нужен).

в качестве примера, в my renew-hook.d Я создал файл restart-nginx следующего содержания:

#!/bin/bash
/etc/init.d/nginx restart

как Примечание: Вы можете знать, какие файлы будут вызываться run-parts С помощью . (Пример run-parts --test /etc/letsencrypt/renew-hook.d/


вы также можете установить крючки (и другие параметры, если хотите) в качестве глобальных параметров в файле /etc/letsencrypt/cli.ini (документации) такой:

# Global config for letsencrypt runs
#
# Note that these options apply automatically to all use of Certbot for
# obtaining or renewing certificates, so options specific to a single
# certificate on a system with several certificates should not be placed
# here.

renew-hook = service postfix reload
post-hook = service nginx reload

вы должны сначала создать файл в большинстве систем. Letsencrypt поставляется без.

вы также можете создать конкретную версию сертификата в каждом renewal папка, если вам не нравится переходить на глобальный.


есть также место, которое контролирует запуск certbot (на ubuntu 16.04 + nginx у меня есть ниже файлы настроек)

1) таймер systemd

выполнить commnad: sudo systemctl list-timers

и видим выход:

Sun 2018-07-08 00:46:59 EEST 7h left Sat 2018-07-07 12:36:26 EEST 4h 51min ago certbot.timer certbot.service

затем

2)

перейти, чтобы проверить файл, что время управления, когда systemctl запустить Certbot

/etc/systemd/system/timers.target.wants/certbot.timer

это символическая ссылка на

/lib/systemd/system/certbot.timer

обратите внимание на эти строки, которые определяют время + случайные секунды (установите случайное время для цели, чтобы не подчеркивать одновременно серверы letsencrypt)

OnCalendar=--* 00,12:00:00

RandomizedDelaySec=3600