Проблеми з автоматичним оновленням Let's Encrypt

Processing /etc/letsencrypt/renewal/mail.domain.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for mail.slavaswim.com
Failed to renew certificate mail.domain.com with error: Could not bind TCP port 80
because it is already in use by another process on this system (such as a web server).
Please stop the program in question and then try again.

Помилка чітко показує: попередній сертифікат видано у режимі standalone, тому certbot під час поновлення намагається захопити порт 80, але він уже зайнятий (Nginx або Apache).

Є два правильні варіанти, залежно від того, як ти хочеш це робити надалі.


ВАРІАНТ 1: Зупинити веб-сервер → поновити → запустити назад

(Швидко, але з секундним простоєм)

Перевір, який веб-сервер використовується:

sudo ss -tlnp | grep :80

Потім:

sudo systemctl stop nginx
або
sudo systemctl stop apache2

Тепер понови:

Або конкретний домен:

Після цього:

І перезавантажити поштові служби:


ВАРІАНТ 2: Перевести сертифікат на webroot (рекомендовано)

Так сертифікат поновлюватиметься без зупинки веб-сервера.

Переконайся, що сайт domain.com або окремий віртуальний хост вже обслуговує /var/www/domain.com (або інший шлях).

Тоді виконай:

Цей спосіб:

  • не чіпає порт 80;

  • працює через HTTP-файли /.well-known/acme-challenge/;

  • після цього certbot renew буде працювати без помилок.


Чому у тебе виникла проблема

Твій файл:

містить щось подібне:

Тому certbot намагається сам слухати порт 80, а там уже веб-сервер.


Що зробити?

Ось покрокова інструкція, як правильно з самого початку створювати сайт з піддоменом mail. на Apache і налаштовувати для нього сертифікат Let's Encrypt.


Крок 1. Підготовка

  1. Каталог сайту:

  1. Піддомен пошти:

  1. Apache вже встановлено і слухає порти 80 та 443.

  2. Certbot встановлено.


Окрім створеного VirtualHost для основного сайту треба створити VirtualHost для mail-піддомену


Крок 2. Створюємо VirtualHost для mail-піддомену (порт 80)

Чому окремо: щоб Let's Encrypt міг отримати challenge файли для mail.domain.com без редіректів.

Файл: /etc/apache2/sites-available/mail.domain.com.conf

Активуємо VHost і перезавантажуємо Apache:


Крок 3. Тестуємо доступність webroot для mail

Створюємо тестовий файл:

Перевіряємо:

Очікуємо:

Якщо отримуємо 404 або редірект — потрібно виправити VHost для mail, щоб не було редіректів на HTTPS.


Крок 4. Створюємо початковий сертифікат для mail

Це створить файли сертифіката в:


Крок 5. Перевірка dry-run

Щоб переконатися, що поновлення працюватиме автоматично:

Якщо успішно — значить все налаштовано правильно.


Крок 6. Налаштування автоматичного оновлення

У файлі /etc/letsencrypt/renewal/mail.domain.com.conf має бути:

Після цього certbot renew буде автоматично оновлювати сертифікат.


Крок 7. Перезавантаження поштових служб

Після поновлення сертифікатів потрібно оновити Postfix і Dovecot, щоб вони використовували нові ключі:


Підсумкові правила

  1. Для mail. обов’язково окремий VHost на порт 80 без редіректів.

  2. Webroot для mail повинен бути доступний через HTTP.

  3. Початковий сертифікат створюємо через certbot certonly --webroot.

  4. Для майбутнього поновлення перевіряємо dry-run.

  5. Після поновлення перезавантажуємо поштові служби.


Last updated