Автообновление SSL сертификатов Let’s Encrypt — Пошаговая инструкция

Шаг 1: Проверяем, что сертификаты работают

# Смотрим какие сертификаты есть и когда истекают
sudo certbot certificates

# Тестируем обновление (без реального обновления)
sudo certbot renew --dry-run

Демонстрация процесса в консоли:

Снимок экрана 2025 09 12 в 18.12.26
Снимок экрана 2025 09 12 в 18.12.47
Снимок экрана 2025 09 12 в 18.12.58

Шаг 2: Проверяем, может автообновление уже настроено

# Проверяем cron задачи
sudo crontab -l | grep certbot

# Проверяем системные таймеры
systemctl list-timers | grep certbot

# Проверяем папку cron.d
ls -la /etc/cron.d/ | grep certbot

Если увидели certbot в любой из команд — автообновление уже работает! Ничего делать не нужно.

Шаг 3: Если автообновления нет — настраиваем

Вариант А: Через systemd

# Создаем сервис
sudo tee /etc/systemd/system/certbot-renewal.service << 'EOF'
[Unit]
Description=Certbot Renewal
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook 'systemctl reload nginx'
EOF

# Создаем таймер (будет запускать 2 раза в день)
sudo tee /etc/systemd/system/certbot-renewal.timer << 'EOF'
[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=3600
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Включаем таймер
sudo systemctl daemon-reload
sudo systemctl enable --now certbot-renewal.timer

# Проверяем что работает
sudo systemctl status certbot-renewal.timer
systemctl list-timers | grep certbot

Вариант Б: Через cron

# Добавляем в cron
(sudo crontab -l 2>/dev/null; echo "0 3 * * * /usr/bin/certbot renew --quiet --post-hook 'systemctl reload nginx'") | sudo crontab -

# Проверяем что добавилось
sudo crontab -l

Шаг 4: Настраиваем логирование

# Добавляем в cron
(sudo crontab -l 2>/dev/null; echo "0 3 * * * /usr/bin/certbot renew --quiet --post-hook 'systemctl reload nginx'") | sudo crontab -

# Проверяем что добавилось
sudo crontab -l

Шаг 5: Тестируем что все работает

# Принудительно запускаем обновление для теста
sudo certbot renew --dry-run

# Если используете systemd timer - тестируем его
sudo systemctl start certbot-renewal.service
sudo systemctl status certbot-renewal.service

# Смотрим логи
sudo journalctl -u certbot-renewal.service

Шаг 6: Финальная проверка

# Смотрим когда будет следующее обновление
systemctl list-timers | grep certbot

# ИЛИ для cron
sudo crontab -l | grep certbot

Что происходит дальше:

  1. Каждый день в 3 ночи (или 2 раза в день для systemd) certbot проверяет сертификаты
  2. Если до истечения < 30 дней — сертификат обновляется автоматически
  3. После обновления — Nginx перезагружается автоматически
  4. Вы получаете новый сертификат без вашего участия

Если что-то не работает:

# Смотрим логи
sudo tail -50 /var/log/letsencrypt/letsencrypt.log

# Проверяем права
ls -la /etc/letsencrypt/

# Пробуем обновить вручную
sudo certbot renew --force-renewal

Готово! Теперь сертификаты будут обновляться автоматически и вы никогда не получите ошибку об истекшем сертификате!

© «Code==Poetry», 2025