Caddy — веб-сервер, который сам настраивает HTTPS и не требует танцев с Certbot. В статье рассказываем, как установить Caddy-сервер на VPS, настроить его под собственные сайты и использовать его преимущества: автоматическое обновление TLS-сертификатов, встроенный reverse proxy и удобную конфигурацию.
Введение
Сегодня при развёртывании веб-сайта всё чаще встаёт вопрос: как организовать серверную часть, чтобы она была и безопасной, и простой в управлении? Обычно приходится выбирать между мощными, но сложными в настройке веб-серверами вроде Nginx или Apache. Их конфигурация требует времени и опыта. Но что если существует решение, которое поднимет современный веб-сервер за несколько минут и избавит от лишних хлопот? Именно таким решением и является Caddy.
В статье рассказали, что такое Caddy-сервер и кому он может пригодиться. Привели пошаговую инструкцию по установке Caddy на Ubuntu и настройке веб-сервера для сайта.
Что такое Caddy и кому он пригодится
Caddy — это современный веб-сервер и одновременно обратный прокси, написанный на языке Go. В отличие от Apache или Nginx, где отдельно настраивается HTTPS и нужно заботиться о сертификатах, Caddy делает всё сам: достаточно указать доменное имя в конфигурации, и сервер автоматически получит действующий SSL-сертификат через сервис Let's Encrypt. Никаких отдельных утилит вроде Certbot и ручного продления сертификатов, Caddy берёт эту работу на себя.
Помимо автоматического HTTPS, Caddy по умолчанию использует современные протоколы и технологии. Он поддерживает HTTP/2 и HTTP/3, может сжимать содержимое (gzip, zstd) для ускорения загрузки страниц, умеет выступать в роли обратного прокси или балансировщика нагрузки для внутренних сервисов. Практически все базовые функции уже встроены: редиректы, управление заголовками, поддержка WebSocket, обработка PHP через FastCGI. Всё это настраивается парой строк в конфигурации. Конфигурация Caddy гораздо проще, чем у традиционных серверов. Основной файл настроек (Caddyfile) интуитивно понятен: достаточно прописать несколько параметров, и сервер заработает. Для сложных случаев предусмотрен и формат JSON через API, но обычно это не требуется.
Caddy отлично подходит для небольших и средних проектов, тестовых и личных серверов, когда важно развернуть всё быстро и без лишней возни. Разумеется, Caddy не претендует на замену Nginx или Apache в высоконагруженной среде, зато во многих случаях вам не понадобятся все возможности тяжёлых серверов.
Установка Caddy на Ubuntu
Процесс установки очень прост и не отнимет много времени. В качестве примера используем Ubuntu 22.04 LTS. Для других дистрибутивов Linux шаги будут схожими. Сначала обновите индекс пакетов:
sudo apt update
Затем установите пакет Caddy:
sudo apt install caddy
Если apt не нашёл пакет, подключите официальный репозиторий Caddy. Инструкция есть на сайте Caddy.
В результате Caddy будет установлен и сразу запущен как служба systemd. Проверить статус службы можно командой:
sudo systemctl status caddy
А узнать версию сервера:
caddy version
Вывод должен содержать номер версии, например, v2.7.4, что означает успешную установку. По умолчанию Caddy слушает HTTP-порт 80 на всех интерфейсах. Откройте в браузере адрес вашего сервера: http://<IP-адрес> или доменное имя. Должна загрузиться стандартная страница приветствия Caddy. Это означает, что веб-сервер запущен правильно и готов обслуживать запросы.
Примечание
Если на сервере включён брандмауэр, например, UFW, необходимо разрешить входящие подключения на порт 80 (sudo ufw allow http). Для работы HTTPS позже откройте порт 443 (sudo ufw allow https).
Настройка и первый сайт на Caddy
Теперь перейдём к настройке веб-сервера под ваши нужды. Для начала запустите простой статический сайт. Предположим, у вас уже есть доменное имя, которое указывает на IP вашего сервера через A-запись DNS. Если домена нет, можно тестировать работу Caddy и по IP-адресу, но автоматического сертификата HTTPS в этом случае не будет. Создайте каталог для файлов сайта, например:
sudo mkdir -p /var/www/my-site
И поместите туда индексный файл. Для примера создадим простую страницу. Для этого создайте файл index.html с простым содержимым, например:
<h1>Hello from Caddy!</h1>
По умолчанию системная служба Caddy запускается от пользователя caddy. Чтобы этот пользователь имел доступ к файлам, назначим его владельцем каталога сайта:
sudo chown -R caddy:caddy /var/www/my-site
Далее отредактируйте конфигурационный файл Caddy:
sudo nano /etc/caddy/Caddyfile
В нём по умолчанию содержится пример конфигурации. Найдите блок, начинающийся со строки «:80 {». В этом фрагменте вместо «:80» укажите адрес вашего сайта (домен). Например:
example.com {
root * /var/www/my-site
file_server
}
Этот блок конфигурации говорит Caddy раздавать файлы из каталога /var/www/my-site для всех запросов к example.com. Директива file_server включает режим статического веб-сервера. Если у вашего сайта есть несколько имён, например, example.com и www.example.com, их тоже можно учесть. Добавьте второй блок:
www.example.com {
redir https://example.com{uri}
}
Он перенаправит все запросы с поддомена www на основной адрес. Такой блок можно разместить сразу после первого. Обратите внимание: Caddyfile чувствителен к отступам и форматированию. Используйте символ табуляции для вложенных директив. После внесения изменений сохраните файл и перезапустите Caddy командой:
sudo systemctl reload caddy
Сервер применит изменения без остановки процесса.
Теперь откройте сайт в браузере по адресу https://example.com. При первом обращении Caddy автоматически получит SSL-сертификат для указанного домена через Let's Encrypt и настроит шифрованное соединение. Загрузка страницы может занять несколько секунд, потому как идёт получение сертификата, но затем вы увидите свой сайт уже по HTTPS с зелёным замочком. Все обращения по незащищённому протоколу также будут автоматически перенаправлены на HTTPS.
Динамический сайт на PHP (WordPress)
Статичные страницы — хорошо, но Caddy способен обслуживать и динамические веб-приложения. Рассмотрим, как запустить сайт на WordPress, популярной CMS на PHP. Для этого на сервере должны быть установлены PHP, СУБД MySQL или совместимая, например, MariaDB. Установите необходимые компоненты:
sudo apt install php php-fpm mysql-server
А также установите дополнительные расширения PHP, например, php-mysql для работы с MySQL, php-gd для обработки изображений и другие по необходимости.
Далее разверните файлы WordPress. Скачайте дистрибутив CMS с официального сайта и распакуйте его в каталог, например /var/www/wp-site. Либо скопируйте в этот каталог уже готовый сайт (бекап). Создайте базу данных MySQL для WordPress и пользователя с нужными правами через консоль MySQL. Пропишите параметры подключения, такие как имя базы, пользователь, пароль в файле wp-config.php вашего сайта. Не забудьте, как и для статического сайта, дать доступ пользователю caddy к файлам WordPress:
sudo chown -R caddy:caddy /var/www/wp-site
После подготовки окружения добавьте конфигурацию сайта в Caddy. Откройте /etc/caddy/Caddyfile и допишите новый блок:
wordpress.example.com {
root * /var/www/wp-site
php_fastcgi unix//run/php/php-fpm.sock
file_server
}
Этот блок привязывает домен wordpress.example.com к каталогу /var/www/wp-site. Директива php_fastcgi направляет выполнение PHP-скриптов на процесс PHP-FPM через сокет /run/php/php-fpm.sock. Директива file_server остаётся, чтобы статичные файлы, такие как изображения, стили и так далее, раздавались напрямую, минуя PHP.
Сохраните изменения и перезагрузите сервер командой sudo caddy reload. После перезагрузки WordPress-сайт открывается по HTTPS, сертификат также выдаётся автоматически. В браузере вы сразу увидите свой сайт на WordPress, и он будет полностью обслуживаться Caddy. Даже с минимальной конфигурацией WordPress функционирует под Caddy без проблем.
Заключение
Caddy значительно упрощает жизнь разработчикам и администраторам, позволяя поднять полностью функционирующий веб-сервер с HTTPS за минимальное время, снимая при этом львиную долю рутины: настройку SSL, сложные конфиги и запуск вспомогательных утилит. Достаточно всего нескольких строк в Caddyfile, чтобы сайт заработал. При этом возможности Caddy не ограничиваются базовыми сценариями. При желании можно настроить балансировку нагрузки и гибкую маршрутизацию запросов.
Читайте в блоге:
- Выделенный сервер на Windows: когда выбрать и как использовать с пользой
- Как установить и запустить локальные нейросети на своем сервере
- Как сделать Telegram‑бота на Python для мониторинга сервера