Проблеми з автоматичним оновленням 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. Підготовка
Каталог сайту:
/home/www/domain.com/public_htmlПіддомен пошти:
mail.domain.comApache вже встановлено і слухає порти 80 та 443.
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Підсумкові правила
Для
mail.обов’язково окремий VHost на порт 80 без редіректів.Webroot для mail повинен бути доступний через HTTP.
Початковий сертифікат створюємо через
certbot certonly --webroot.Для майбутнього поновлення перевіряємо dry-run.
Після поновлення перезавантажуємо поштові служби.
Last updated