Проблеми з автоматичним оновленням 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

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

sudo certbot renew

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

sudo certbot certonly --standalone -d mail.domain.com

Після цього:

sudo systemctl start nginx
або
sudo systemctl start apache2

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

sudo systemctl reload postfix
sudo systemctl reload dovecot

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

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

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

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

sudo certbot certonly --webroot \
  -w /var/www/slavaswim.com \
  -d mail.slavaswim.com

Цей спосіб:

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

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

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


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

Твій файл:

/etc/letsencrypt/renewal/mail.domain.com.conf

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

authenticator = standalone

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


Що зробити?

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


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

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

/home/www/domain.com/public_html
  1. Піддомен пошти:

mail.domain.com
  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

<VirtualHost *:80>
    ServerName mail.domain.com
    DocumentRoot /home/www/domain.com/public_html

    <Directory /home/www/domain.com/public_html>
        Require all granted
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mail_error.log
    CustomLog ${APACHE_LOG_DIR}/mail_access.log combined
</VirtualHost>

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

a2ensite mail.domain.com.conf
systemctl reload apache2

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

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

mkdir -p /home/www/domain.com/public_html/.well-known/acme-challenge
echo TEST > /home/www/domain.com/public_html/.well-known/acme-challenge/testfile

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

curl http://mail.domain.com/.well-known/acme-challenge/testfile

Очікуємо:

TEST

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


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

certbot certonly --webroot -w /home/www/domain.com/public_html -d mail.domain.com

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

/etc/letsencrypt/live/mail.domain.com/

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

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

certbot renew --dry-run --cert-name mail.domain.com

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


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

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

authenticator = webroot
webroot_path = /home/www/domain.com/public_html

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


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

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

systemctl reload postfix
systemctl reload dovecot

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

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

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

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

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

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


Last updated