Проблема
На хосте Proxmox 5.3-12 у меня работает балансировщик haproxy. Он слушает порт 80.
при попытке обновить сертификат Let's Encrypt (certificate renew) возникает ошибка:
Loading ACME account details Placing ACME order Order URL: https://acme-v02.api.letsencrypt.org/acme/order/53....12/46607..... Getting authorization details from 'https://acme-v02.api.letsencrypt.org/acme/authz/sm0uHIBtl7...................4-A8Ox_kY' ... pending! Setting up webserver TASK ERROR: failed setting up webserver - Failed to initialize HTTP daemon
Очевидно, процесс обновления сертификата (клиент ACME) хочет поднять веб-сервер на порту 80, но не может этого сделать, так как порт занят процессом haproxy. Вот народ бьется так же: https://forum.proxmox.com/threads/no-configuration-is-done-letsencrypt-certificate.44065/
Решение
Решением был бы запуск вебсервера клиента ACME на порту, отличном от 80. Например - 8080. Штатно в proxmox такой возможности нет. Но логика proxmox написана на perl, что позволяет быстро и безболезненно изменить ее.
Легко и непринужденно в дебрях библиотек находим файл /usr/share/perl5/PVE/ACME/StandAlone.pm, а в нем кусок кода:
my $server = HTTP::Daemon->new( LocalPort => 80, ReuseAddr => 1, ) or die "Failed to initialize HTTP daemon\n";
И заменяем номер порта, например на 8080, а в haproxy прописываем соответствующий http reverse-proxy.
А потом выполняем перезапуск сервисов proxmox:
service pve-cluster restart && service pvedaemon restart && service pvestatd restart && service pveproxy restart
Discussion