Установка и настройка Caddy на Ubuntu 22.04

Caddy — современный веб‑сервер, написанный на языке Go. Он прост в использовании, лёгкий, поддерживает HTTP/2 и экспериментальный HTTP/3, не требует внешних зависимостей и расширяется плагинами. Главное преимущество — автоматическое получение и обновление TLS‑сертификатов (HTTPS) по умолчанию. Caddy проектируют с акцентом на безопасность и удобство хостинга сайтов.
Во всплывающем руководстве ниже вы найдёте пошаговые команды, проверки и рекомендации по отладке для развёртывания Caddy на Ubuntu 22.04.
Требования
- Сервер с Ubuntu 22.04.
- Доменное имя, указывающее на IP сервера (A/AAAA запись).
- Доступ root или учётная запись с sudo.
Important: убедитесь, что порты 80 и 443 открыты в облачном/сетевом фаерволе и на самом хосте (ufw/iptables).
Установка Caddy
Пакет Caddy отсутствует в дефолтном репозитории Ubuntu 22.04, поэтому добавим официальный репозиторий.
Сначала установите зависимости:
apt-get install -y curl debian-keyring debian-archive-keyring apt-transport-httpsДобавьте GPG‑ключ репозитория:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpgДобавьте сам репозиторий APT:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.listОбновите индекс и установите Caddy:
apt-get update
apt-get install caddy -yПроверьте версию:
caddy versionПример вывода:
v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=Разрешите бинарнику Caddy слушать привилегированные порты (80/443):
setcap 'cap_net_bind_service=+ep' /usr/bin/caddyОткройте в браузере http://your-server-ip — должна отображаться страница по умолчанию Caddy:

Управление сервисом Caddy
Caddy управляется через systemd. Основные команды:
systemctl start caddy
systemctl stop caddy
systemctl enable caddy
systemctl status caddyПример статуса (сокращённый):
? caddy.service - Caddy
Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-11-20 11:03:31 UTC; 42s ago
Docs: https://caddyserver.com/docs/
Main PID: 2356 (caddy)
Tasks: 8 (limit: 2242)
Memory: 7.8M
CPU: 31ms
CGroup: /system.slice/caddy.service
??2356 /usr/bin/caddy run --environ --config /etc/caddy/CaddyfileПримечание: для отладки смотрите логи systemd: journalctl -u caddy -b
Включение поддержки PHP
Установите PHP‑FPM и распространённые расширения:
apt-get install php-fpm php-mysql php-curl php-gd php-mbstring php-common php-xml php-xmlrpc -yПо умолчанию PHP‑FPM работает от пользователя www-data; поменяйте владельца пула на caddy, чтобы сокет был доступен веб‑серверу. Отредактируйте файл пула:
nano /etc/php/8.1/fpm/pool.d/www.confНайдите и замените значения:
user = caddy
group = caddy
listen.owner = caddy
listen.group = caddyСохраните и перезапустите PHP‑FPM:
systemctl restart php8.1-fpmImportant: если ваш сокет отличается (например unix:/run/php/php8.1-fpm.sock), используйте точный путь в конфигурации Caddy.
Конфигурация виртуального хоста Caddy
Файл конфигурации по умолчанию: /etc/caddy/Caddyfile
Отредактируйте его:
nano /etc/caddy/CaddyfileПример содержимого (замените caddy.example.com на ваш домен):
caddy.example.com:80 {
root * /usr/share/caddy/
encode gzip zstd
php_fastcgi unix//run/php/php8.1-fpm.sock
}Сохраните и перезапустите Caddy:
systemctl restart caddyСоздайте тестовый PHP‑файл:
nano /usr/share/caddy/info.phpДобавьте:
Проверка PHP
Откройте в браузере http://caddy.example.com/info.php — вы должны увидеть страницу phpinfo():

Отладка и частые проблемы
- DNS не указывает на сервер: проверьте A/AAAA запись и дождитесь распространения.
- Порты заняты: проверьте, что 80/443 свободны (ss -tlnp | grep -E ‘:80|:443’).
- Файрвол блокирует трафик: ufw status или правила облачного провайдера.
- Неправильные права сокета php‑fpm: убедитесь, что сокет доступен пользователю caddy.
- Авто‑TLS не получает сертификат: проверьте доступность 80/443 для Let’s Encrypt и отсутствие прокси, изменяющего заголовки.
- Логи: journalctl -u caddy -f и /var/log/php8.1-fpm.log помогут найти причину.
Когда Caddy не подойдёт: если вы требуете сложного модульного стека Nginx (специфические модули) или используете интеграции, которые не поддерживаются в Caddy — рассмотрите альтернативы.
Альтернативы
- Nginx — гибкость, богатая экосистема конфигураций и поддержка обратного прокси.
- Apache — традиционный выбор с модульной архитектурой.
- Traefik — удобен для динамических окружений и Kubernetes.
Выбор зависит от команды и требований: Caddy хорош для простых, безопасных развёртываний с автоматическим HTTPS.
Мини‑методология развёртывания (шаги)
- Подготовить сервер и DNS — проверить порты и доступ.
- Установить Caddy из официального репозитория.
- Настроить права и systemd‑сервис.
- Установить PHP‑FPM и связать сокет с Caddy.
- Проверить работу через тестовую страницу.
- Настроить бэкапы конфигурации и мониторинг логов.
Ролевые контрольные списки
Оперативная команда:
- Проверить открытые порты и правила безопасности.
- Настроить мониторинг и алёрты на падение сервиса.
Разработчики:
- Проверить совместимость приложений с PHP‑FPM и версиями PHP.
- Создать тестовую страницу и проверить phpinfo.
Критерии приёмки
- Caddy успешно установлен и запущен (systemctl status active).
- Автоматический TLS работает для домена (порт 443 слушается и сертификат валиден).
- PHP‑скрипты исполняются через php‑fpm (info.php отображает phpinfo).
- Логи не содержат критических ошибок за последние 24 часа.
Шпаргалка команд
- Установить зависимости: apt-get install -y curl debian-keyring debian-archive-keyring apt-transport-https
- Добавить репозиторий и ключ: команды curl и gpg выше
- Установка: apt-get update && apt-get install caddy -y
- Разрешение привилегированных портов: setcap ‘cap_net_bind_service=+ep’ /usr/bin/caddy
- Перезапуск сервисов: systemctl restart caddy; systemctl restart php8.1-fpm
- Логи: journalctl -u caddy -f
Безопасность и конфиденциальность
- Caddy автоматически управляет TLS‑сертификатами. Следите за доступностью 80/443 для выдачи сертификатов.
- Ограничьте доступ к административному API Caddy (если включён) — по умолчанию админ‑эндпоинт слушает локально.
- Храните резервные копии /etc/caddy/Caddyfile и каталога с сертификатами.
- Обработку персональных данных регулируйте в соответствии с локальным законодательством; Caddy сам по себе не отправляет содержимое на внешние сервисы.
Глоссарий
- php-fpm: FastCGI‑процесс менеджер для PHP.
- php_fastcgi: директива Caddy для проксирования PHP через сокет или TCP.
- Auto‑TLS: автоматическое получение и продление TLS‑сертификатов.
Итог
Caddy позволяет быстро и безопасно развернуть веб‑сайт на Ubuntu 22.04 с минимальной конфигурацией и автоматическим HTTPS. Следуйте шагам в статье, проверьте DNS и права на сокеты, а также мониторьте логи после запуска.
Notes: если нужно развернуть несколько сайтов, используйте отдельные блоки в Caddyfile и проверяйте, чтобы каждый домен корректно резолвился.
Похожие материалы
Не удалось инициализировать Direct3D — решения
Исправить Data Retrieval в Diablo 4 на Steam
Open Graph в WordPress — настройка мета‑тегов
getconf: адаптивные скрипты для разных Linux
Проверка входов в Windows — успешные и неудачные попытки