VDS · Сайты и веб-серверы

Бесплатный сертификат Let's Encrypt

Как выпустить и автоматически продлевать HTTPS-сертификат на VDS через certbot, включая случай, когда 80-й порт занят.

Обновлено 23 августа 2026 г.

Сертификат нужен, чтобы браузер не писал «Не защищено», а формы и оплата вообще работали. Let's Encrypt выдаёт его бесплатно на 90 дней с автоматическим продлением.

Подготовка

Проверьте три вещи, иначе выпуск не пройдёт:

dig +short example.ru        # должен вернуть адрес вашей машины
ss -tulpn | grep -E ':80|:443'
  • A-запись домена указывает на адрес из вкладки «Обзор» панели /hosting/vds/<id>;
  • порт 80 доступен снаружи — по нему Let's Encrypt проверяет владение доменом;
  • веб-сервер запущен: Nginx или Apache.

Если вы используете Caddy, делать ничего не нужно — он выпускает сертификаты сам.

Выпуск

apt install -y certbot python3-certbot-nginx      # Debian, Ubuntu
dnf install -y certbot python3-certbot-nginx      # AlmaLinux, CentOS Stream

certbot --nginx -d example.ru -d www.example.ru

Для Apache — тот же путь с python3-certbot-apache и флагом --apache. Certbot сам добавит в конфиг блок с сертификатом и редирект с HTTP на HTTPS.

Проверка результата:

certbot certificates
curl -I https://example.ru

Автопродление

Пакет ставит системный таймер, он же и продлевает. Убедитесь, что таймер активен, и прогоните тестовое продление:

systemctl list-timers | grep certbot
certbot renew --dry-run

Сухой прогон обязателен. Он ловит ситуацию, когда продление сломается через два месяца — например, вы переименовали конфиг сайта, и certbot больше не знает, куда класть файл проверки.

Когда 80-й порт занят

Если на 80-м порту работает приложение и подставить туда веб-сервер нельзя, используйте отдельный режим:

certbot certonly --standalone --preferred-challenges http -d example.ru

Certbot на время проверки поднимет свой временный сервер. Для этого приложение придётся остановить: --pre-hook и --post-hook умеют делать это автоматически.

Сертификаты после выпуска лежат в /etc/letsencrypt/live/example.ru/: fullchain.pem и privkey.pem.

Частые ошибки

СимптомПричина
Timeout during connectПорт 80 закрыт брандмауэром или домен смотрит не на эту машину
too many certificates already issuedДостигнут недельный лимит на домен — ждите или отлаживайте с --staging
Сайт после выпуска отдаёт старый сертификатНе перезагрузили веб-сервер: systemctl reload nginx
Сертификат истёкТаймер отключён — проверьте systemctl enable --now certbot.timer

Каталог /etc/letsencrypt — часть ваших данных. Автоматических резервных копий машины нет, поэтому включите его в свой бэкап вместе с конфигами веб-сервера.