Caddy: автоматический HTTPS
Caddy — веб-сервер, который сам получает и продлевает TLS-сертификаты Let's Encrypt, без certbot и ручных cron-заданий. В этой статье вы установите Caddy на свой VPS mHost, опишете сайт в Caddyfile с автоматическим HTTPS и настроите reverse_proxy, чтобы Caddy принимал HTTPS-трафик снаружи и передавал его вашему приложению.
Что понадобится
- VPS mHost на Linux: Ubuntu 22.04/24.04, Debian 11/12 или AlmaLinux/Rocky Linux 8/9.
- Доступ по SSH — под root или пользователем с sudo.
- Доменное имя, у которого A-запись указывает на IP-адрес сервера (VPS mHost работают только по IPv4, поэтому AAAA-запись не нужна).
- Открытые порты 80 и 443 — без них Caddy не сможет получить сертификат (подробнее — в шаге 2).
Шаг 1. Проверьте, что домен указывает на сервер
Автоматический HTTPS работает только тогда, когда удостоверяющий центр (Let's Encrypt или ZeroSSL) может достучаться до сервера именно по этому домену — значит, DNS должен указывать на него ещё до запуска Caddy.
- Узнайте IP-адрес сервера — в панели VMmanager 6 / my.mhost.ee, либо прямо на сервере:
``bash curl -4 ifconfig.me ``
- Проверьте, куда указывает домен (замените
example.comна свой):
``bash dig +short example.com A ``
Если команды dig нет, установите пакет с DNS-утилитами:
``bash sudo apt install -y dnsutils # Ubuntu/Debian sudo dnf install -y bind-utils # AlmaLinux/Rocky ``
- Сравните результат
digс IP-адресом сервера — они должны совпадать.
Шаг 2. Откройте порты 80 и 443
Порт 80 нужен для HTTP-01-проверки домена и автоматического редиректа с HTTP на HTTPS, порт 443 — для самого HTTPS и TLS-ALPN-проверки. Оба порта Caddy использует по умолчанию, в самом Caddy ничего дополнительно настраивать не нужно — но их должен пропускать файрвол сервера.
Ubuntu и Debian (ufw)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpAlmaLinux и Rocky Linux (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadШаг 3. Установите Caddy
Готового рецепта VMmanager 6 для Caddy нет, поэтому ставим пакет вручную из официального репозитория. Полный список того, что можно поставить в один клик, — в статье «Готовые рецепты VMmanager 6».
Ubuntu и Debian
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddyAlmaLinux и Rocky Linux
sudo dnf install -y dnf-plugins-core
sudo dnf copr enable @caddy/caddy
sudo dnf install caddyПакет сам создаёт systemd-сервис и уже запускает Caddy. Включите автозапуск и проверьте статус:
sudo systemctl enable --now caddy
sudo systemctl status caddyШаг 4. Минимальный Caddyfile с автоматическим HTTPS
Конфигурация Caddy — это файл /etc/caddy/Caddyfile. Откройте его редактором:
sudo nano /etc/caddy/CaddyfileЗамените содержимое на минимальный блок сайта — доменное имя в заголовке блока и есть всё, что нужно Caddy, чтобы включить автоматический HTTPS:
example.com {
respond "Caddy on mHost works over HTTPS!"
}Замените example.com на свой домен (тот же, что проверяли в шаге 1) и сохраните файл. Никакого certbot, отдельных сертификатов или cron для продления не нужно — при первом обращении к сайту Caddy сам получит сертификат от Let's Encrypt (а если не получится — попробует ZeroSSL) и будет продлевать его до истечения срока.
Как применить изменения и проверить результат — в шагах 6 и 7 ниже.
Шаг 5. Пример reverse_proxy — проксирование на приложение
Если на сервере уже работает своё приложение (Node.js, Python, Java и т.д.), слушающее локальный порт, замените блок из шага 4 на такой:
example.com {
reverse_proxy localhost:3000
}Замените 3000 на порт, на котором реально слушает ваше приложение. Caddy будет принимать HTTPS-трафик снаружи и пересылать его на этот порт по обычному HTTP внутри сервера. Сохраните файл и переходите к шагу 6, чтобы применить изменения.
Шаг 6. Проверьте конфигурацию и перечитайте её (reload)
После любого изменения /etc/caddy/Caddyfile сначала проверьте синтаксис, затем перечитайте конфигурацию без остановки сервиса:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddyvalidate находит ошибки конфигурации до её применения, а reload подхватывает изменения на лету — без разрыва уже открытых соединений и без простоя сайта, в отличие от restart.
Если что-то пошло не так, посмотрите логи сервиса:
sudo journalctl -u caddy -fШаг 7. Проверьте, что HTTPS работает
curl -I https://example.comОжидаемый результат — ответ вида HTTP/2 200 без ошибок сертификата. При самом первом обращении Caddy может на несколько секунд задержать ответ, пока получает сертификат.
Что дальше
В /etc/caddy/Caddyfile можно добавлять новые блоки для других доменов — каждый со своим reverse_proxy или другими директивами, и Caddy так же автоматически выпустит сертификат для каждого из них. После любой правки повторяйте шаг 6 (validate + reload). Порты для новых сайтов, если они отличаются от 80/443, открывайте так же, как в шаге 2, — подробнее в статье «Настройка файрвола UFW».