Skip to content
VDS · Сайти та вебсервери

Caddy: сайт із сертифікатом з коробки

Вебсервер, який сам отримує та поновлює HTTPS-сертифікати. Встановлення на VPS, мінімальний Caddyfile і перехід з Nginx.

Оновлено 23 серпня 2026 р.

Caddy робить те саме, що й Nginx, але самостійно видає та поновлює сертифікати Let's Encrypt. Конфігурація сайту вміщується в три рядки, тож для першого проєкту на VDS це найкоротший шлях до робочого HTTPS.

Встановлення

Debian і Ubuntu — з офіційного репозиторію:

apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  > /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddy

AlmaLinux і CentOS Stream:

dnf install -y 'dnf-command(copr)'
dnf copr enable -y @caddy/caddy
dnf install -y caddy && systemctl enable --now caddy

Ваш перший сайт

Уся конфігурація живе у /etc/caddy/Caddyfile:

example.ru {
    root * /var/www/example.ru
    file_server
    encode gzip zstd
}
mkdir -p /var/www/example.ru
echo '<h1>Works</h1>' > /var/www/example.ru/index.html
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy

Через кілька секунд після першого запиту сайт відкривається за адресою https://example.ru. Більше нічого запускати не потрібно: Caddy сам отримав сертифікат і поновлюватиме його автоматично.

Проксіювання застосунку

Якщо у вас є сервіс на Node.js або Python на локальному порту, конфігурація виглядає так:

api.example.ru {
    reverse_proxy 127.0.0.1:3000
}

Caddy сам додає заголовки X-Forwarded-For і X-Forwarded-Proto. Докладніше про схему читайте в зворотний проксі.

Кілька сайтів — це просто кілька блоків в одному файлі, дивіться кілька сайтів на одній машині.

Що перевірити заздалегідь

  • A-запис домену вказує на адресу машини з розділу «Огляд» панелі /hosting/vds/m/<id>;
  • порти 80 і 443 відкриті у фаєрволі машини й не зайняті Nginx чи Apache;
  • домен справді резолвиться: dig +short example.ru.

Якщо перший пункт не виконано, видача сертифіката завершиться помилкою: Let's Encrypt має дістатися вашої машини за доменним іменем.

Типові помилки

СимптомПричина
could not get certificateДомен не вказує на машину або порт 80 закритий
address already in useЗапущено Nginx або Apache — зупиніть один із них
Сайт відкривається лише через HTTPУ Caddyfile вказано :80 або http:// перед іменем
Забагато спроб видачіОбмеження Let's Encrypt — налагоджуйте з tls internal

Логи: journalctl -u caddy -f.

Caddy зберігає сертифікати в /var/lib/caddy/.local/share/caddy. Коли перевстановлюєте систему на вкладці «Доступ», скопіюйте цей каталог, інакше після перевстановлення видача почнеться з нуля.