Листоход
Прочее

Продление сертификатов SSL (Let's Encrypt)

Сертификаты Let's Encrypt действительны 90 дней. Рекомендуем продлевать их каждые 60 дней, чтобы избежать перебоев в работе Листохода по HTTPS.

Ручное продление

  1. Перейдите в каталог, в который установлен Листоход:
cd /listohod
  1. Остановите контейнер app, чтобы освободить 80 порт для проверки домена со стороны Let's Encrypt:
docker compose stop app
  1. Запустите продление сертификата (будут продлены все ранее выпущенные сертификаты):
docker run --rm -it \
-v "${PWD}/docker/certbot/certs/:/etc/letsencrypt/" \
-v "${PWD}/docker/certbot/logs/:/var/log/letsencrypt/" \
-p 80:80 \
certbot/certbot renew
  1. Запустите контейнер app обратно, чтобы он подхватил обновленные сертификаты:
docker compose up -d app
Проверка результата

Текущий срок действия сертификата можно посмотреть командой:

docker run --rm \
-v "${PWD}/docker/certbot/certs/:/etc/letsencrypt/" \
certbot/certbot certificates

Автоматическое продление

Чтобы не выполнять команды вручную, настройте задание в cron, которое будет проверять и при необходимости продлевать сертификат раз в неделю. Этого достаточно: сертификат действует 90 дней, и даже если очередная попытка завершится ошибкой, до истечения срока останется ещё несколько недель и несколько повторных попыток.

  1. Создайте скрипт /listohod/bin/renew-ssl.sh со следующим содержимым:
#!/bin/bash
set -e

cd /listohod

docker compose stop app

docker run --rm \
  -v "${PWD}/docker/certbot/certs/:/etc/letsencrypt/" \
  -v "${PWD}/docker/certbot/logs/:/var/log/letsencrypt/" \
  -p 80:80 \
  certbot/certbot renew --quiet

docker compose up -d app
  1. Сделайте скрипт исполняемым:
chmod +x /listohod/bin/renew-ssl.sh
  1. Откройте редактор crontab от пользователя root:
sudo crontab -e
  1. Добавьте в конец файла строку, которая будет запускать проверку каждое воскресенье в 03:30:
30 3 * * 0 /listohod/bin/renew-ssl.sh >> /var/log/listohod-ssl-renew.log 2>&1

После сохранения файла дальнейшее продление сертификатов будет выполняться автоматически. Certbot сам определяет, нужно ли обновлять сертификат: фактическое продление произойдет, только если до окончания срока действия осталось менее 30 дней. В остальные недели скрипт ничего не меняет, контейнер app поднимается обратно сразу же.

Если используется reverse proxy

Если Листоход работает за внешним reverse proxy (см. Запуск за reverse proxy), продлевайте сертификаты средствами того сервера, на котором установлен reverse proxy — например, командой certbot renew на хост-системе. В этом случае останавливать контейнеры Листохода не нужно.

Оглавление