[Сервер] Установка Lets Encrypt и Certbot на Debian 12 с автоматическим перезапуском сервисов.

Шаг 1. Установка Certbot

В Debian 12 ставим Certbot через snap, чтобы всегда иметь актуальную версию:

sudo apt update
sudo apt install snapd -y
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

Обновляем пути в текущей сессии:

source /etc/profile

Удаляем старую apt-версию (если была) и ставим snap:

sudo apt remove certbot -y
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Шаг 2. Получение сертификата

Выберите команду под свою конфигурацию:

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

Шаг 3. Создание скрипта перезапуска сервисов

Когда Let's Encrypt обновляет сертификат, службы продолжают держать старый ключ в памяти. Чтобы они подхватили новый SSL, создаём скрипт перезапуска:

sudo nano /usr/local/bin/restart_services.sh

Вставляем команды перезапуска ваших служб (закомментируйте или уберите nginx, если он не используется):

#!/bin/bash
systemctl reload nginx
systemctl restart x-ui
systemctl restart torrserver.service

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

sudo chmod +x /usr/local/bin/restart_services.sh

Шаг 4. Настройка автозапуска скрипта в systemd

Чтобы скрипт вызывался автоматически после каждого продления сертификата, добавим хук в сервис Certbot.

  1. Открываем файл переопределения (в зависимости от того, какой сервис у вас в системе – certbot.service или snap.certbot.renew.service):

Проверяем имя сервиса в вашей системе:

systemctl list-unit-files | grep certbot
sudo systemctl edit certbot.service
  1. Вставляем блок:
[Service]
ExecStartPost=/usr/local/bin/restart_services.sh
SuccessExitStatus=1

(Параметр SuccessExitStatus=1 нужен, чтобы systemd не считал работу службы ошибкой, если сертификат ещё не требовал продления).

  1. Сохраняем (Ctrl + O, затем Enter) и закрываем (Ctrl + X).
  2. Применяем настройки:
sudo systemctl daemon-reload

Шаг 5. Проверка работы

  1. Проверяем связь с Let's Encrypt:
sudo certbot renew --dry-run

В конце должно быть: Congratulations, all simulated renewals succeeded.

  1. Проверяем работу самого хука и скрипта:
sudo systemctl start certbot.service
systemctl status certbot.service

В статусе должна быть строчка:

ExecStartPost=/usr/local/bin/restart_services.sh (code=exited, status=0/SUCCESS)

Всё настроено! Сертификаты будут продлеваться сами, а нужные службы – перезапускаться без вашего участия.

Диагностика SSL-сертификата

Узнать даты действия сертификата:

echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Проверить, кто выпустил сертификат и для какого домена:

echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -issuer -subject

Проверить локальный порт службы (например, TorrServer на 8085):

echo | openssl s_client -connect 127.0.0.1:8085 2>/dev/null | openssl x509 -noout -issuer -subject

Онлайн-сервисы