Caddy − веб-сервер и реверс-прокси с автоматической настройкой HTTPS. По умолчанию он использует Let’s Encrypt для выдачи и обновления сертификатов. При этом настройка веб-сервера проста благодаря удобному формату основного файла конфигурации − Caddyfile. Caddy часто выбирают за безопасность, надёжность и минимальные требования к настройке. В настоящем руководстве разберём, как установить веб-сервер Caddy на CentOS Stream 9 и запустить на Caddy простейший статический сайт.
Как установить Caddy на CentOS Stream 9
Поскольку Caddy недоступен для установки из стандартного репозитория CentOS Stream, его инсталляцию можно произвести через сторонний репозиторий COPR − сервис для сторонних репозиториев пакетов в Fedora и CentOS/Red Hat. Чтобы воспользоваться данным сервисом, установите модуль для работы с ним:
$ sudo dnf install 'dnf-command(copr)'Затем подключите репозиторий COPR, в котором лежит готовый RPM-пакет Caddy:
$ sudo dnf copr enable @caddy/caddyПосле чего установите непосредственно Caddy:
$ sudo dnf install caddyВ процессе инсталляции пакетный менеджер создаёт службу caddy.service, которую необходимо запустить по окончании установки:
$ sudo systemctl start caddyТакже включите автозапуск службы Caddy при старте системы:
$ sudo systemctl enable caddyЧтобы удостовериться в работоспособности службы, выведите на экран её состояние:
$ systemctl status caddyЕсли служба работает корректно, в выводе команды не будет сообщений об ошибках, но при этом будут присутствовать записи о том, что служба запущена и установлена в автозагрузку:

Чтобы разрешить входящие HTTP-запросы, добавьте соответствующее правило в брандмауэр firewalld:
$ sudo firewall-cmd --permanent --add-service=httpЗатем перезагрузите брандмауэр:
$ sudo firewall-cmd --reloadПосле чего откройте браузер и в строке навигации укажите IP-адрес вашей виртуальной машины, чтобы убедиться в работоспособности Caddy.

В результате в браузере должна открыться дефолтная страница Caddy с сообщением о работоспособности веб-сервера.
Настройка статического веб-сайта на Caddy
При установке дефолтная страница Caddy помещается в /usr/share/caddy. В нашем примере мы оставим её без изменений и создадим новый каталог для нового веб-сайта:
$ sudo mkdir -p /var/www/htmlЗатем нужно будет изменить владельца и группу данного каталога на пользователя caddy и группу caddy, чтобы служба Caddy имела доступ к нему:
$ sudo chown caddy:caddy /var/www/htmlДалее, используя текстовый редактор, создайте и откройте файл стартовой страницы сайта:
$ sudo vi /var/www/html/index.htmlПосле чего добавьте в него html-разметку стартовой страницы сайта:
<html>
   <head>
      <title>
         Your Site on Caddy
      </title>
   </head>
   <body>
      <h1>
         Your-site-name.ru Works On Caddy!!!
      </h1>
   </body>
</html>Затем измените основной конфигурационный файл Caddy:
$ sudo vi /etc/caddy/CaddyfileВ данном случае укажите корневую директорию создаваемого веб-сайта в качестве значения для параметра root:
root * /var/www/htmlПосле чего перезапустите службу Caddy:
$ sudo systemctl restart caddyДалее на локальной рабочей станции снова запустите браузер и проверьте работоспособность вашего сайта, для чего перейдите на его стартовую страницу, используя либо IP-адрес VPS, либо доменное имя вашего сайта, направленное на этот IP с помощью A-записи.

Настройка HTTPS-доступа к сайту
Для настройки доступа к сайту с применением протокола HTTPS достаточно будет внести некоторые изменения в конфигурационный файл Caddy. По умолчанию Caddy устанавливает для настраиваемого веб-сайта шифрование при помощи TLS-сертификатов, получаемых через Let’s Encrypt, хотя может использовать для этого и другого провайдера. При этом, чтобы ваш сайт был доступен по HTTPS, он должен иметь A-запись, привязанную к IP-адресу вашей виртуальной машины. Другими словами, для дальнейшей настройки необходимо наличие у сайта доменного имени.
Чтобы настроить HTTPS-доступ, откройте конфигурационный файл Caddy:
$ sudo vi /etc/caddy/CaddyfileВ нашем примере содержимое данного файла будет выглядеть следующим образом:
your-site-name.ru {
    root * /var/www/html
    file_server
    tls your-email@your-site-name.ru
}Здесь:
- блок your-site-name.ru {...}говорит о том, что веб-сервер Caddy будет обслуживать запросы, приходящие на доменyour-site-name.ru;
- root * /var/www/html− корневая директория сайта;
- параметр file_serverактивирует встроенный файловый сервер, который отвечает за выдачу статических файлов, таких как HTML, CSS, JS и другие, по запросам пользователей;
- tls your-email@your-site-name.ru− данный параметр указывает веб-серверу на необходимость использования HTTPS с TLS-сертификатом, по умолчанию получаемым через Let’s Encrypt, а также задаёт e-mail для регистрации TLS-сертификата.
Закройте файл конфигурации с сохранением внесённых изменений и перезагрузите службу Caddy:
$ sudo systemctl restart caddyПри перезапуске Caddy запустит процедуру получения и установки сертификата от Let’s Encrypt для указанного домена. В результате будет настроен доступ через HTTPS и автоматическое обновление TLS-сертификата.
Затем добавьте в брандмауэр правило, которое разрешает доступ к виртуальному серверу по протоколу HTTPS:
$ sudo firewall-cmd --permanent --add-service=httpsПосле чего перезапустите брандмауэр:
$ sudo firewall-cmd --reloadИ, наконец, для проверки доступа откройте браузер и перейдите по ссылке вида https://your-site-name.ru. Естественно, вместо your-site-name.ru укажите доменное имя вашего сайта.

