Бесплатный сертификат 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— часть ваших данных. Автоматических резервных копий машины нет, поэтому включите его в свой бэкап вместе с конфигами веб-сервера.