Установка Caddy на Debian 11

Caddy — бесплатный, открытый и современный веб‑сервер, написанный на языке Go. Он лёгкий, поддерживает HTTP/2 и экспериментальный HTTP/3, не требует внешних зависимостей и расширяется плагинами. Caddy проектирован с упором на безопасность и предоставляет удобный набор функций для хостинга сайтов.
В этом руководстве показано, как установить Caddy на Debian 11 и настроить простую поддержку PHP.
Требования
- Сервер под управлением Debian 11.
- Действительное доменное имя, указывающее на IP сервера.
- Установлённый root‑доступ или привилегии sudo.
Установка Caddy на Debian 11
Пакет Caddy по умолчанию отсутствует в репозиториях Debian 11, поэтому добавим официальный репозиторий Caddy.
Сначала установите требуемые зависимости:
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' | apt-key add -Добавьте репозиторий Caddy в 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:
caddy versionВы должны увидеть строку версии, например:
v2.4.5 h1:P1mRs6V2cMcagSPn+NWpD+OEYUYLIf6ecOa48cFGeUg=Чтобы двоичный файл caddy мог привязываться к привилегированным портам 80 и 443, выполните:
setcap 'cap_net_bind_service=+ep' /usr/bin/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 Sat 2021-10-16 14:34:44 UTC; 2min 30s ago
Docs: https://caddyserver.com/docs/
Main PID: 2370 (caddy)
Tasks: 7 (limit: 2341)
Memory: 17.5M
CPU: 30ms
CGroup: /system.slice/caddy.service
??2370 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
Oct 16 14:34:44 debian11 caddy[2370]: JOURNAL_STREAM=8:16308
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.658216,"msg":"using provided configuration","config_file":"/etc/caddy/Ca>"
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.6623824,"logger":"admin","msg":"admin endpoint started","address":"tcp/l>"
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.6626618,"logger":"http","msg":"server is listening only on the HTTP port>"
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.663054,"msg":"autosaved config (load with --resume flag)","file":"/var/l>"
Oct 16 14:34:44 debian11 systemd[1]: Started Caddy.
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.6655433,"msg":"serving initial configuration"}
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.6656897,"logger":"tls","msg":"cleaning storage unit","description":"File>"
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.6657932,"logger":"tls","msg":"finished cleaning storage units"}
Oct 16 14:34:44 debian11 caddy[2370]: {"level":"info","ts":1634394884.6694443,"logger":"tls.cache.maintenance","msg":"started background certi>"Включение поддержки PHP в Caddy
Установите PHP‑FPM и распространённые модули:
apt-get install php-fpm php-mysql php-curl php-gd php-mbstring php-common php-xml php-xmlrpc -yОтредактируйте пул PHP‑FPM, чтобы процессы работали от пользователя caddy:
nano /etc/php/7.4/fpm/pool.d/www.confНайдите и замените значения пользователя и группы с www-data на caddy:
user = caddy
group = caddy
listen.owner = caddy
listen.group = caddyСохраните файл и перезапустите PHP‑FPM:
systemctl restart php7.4-fpmВажно: если у вас другая версия PHP, измените путь и имя службы соответственно (например, php8.0-fpm).
Конфигурация виртуального хоста 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/php7.4-fpm.sock
}Перезапустите Caddy, чтобы применить изменения:
systemctl restart caddyСоздайте тестовый PHP‑файл:
nano /usr/share/caddy/info.phpДобавьте:
Сохраните файл.
Доступ к сайту
Откройте в браузере: http://caddy.example.com/info.php

Вы должны увидеть страницу с информацией о PHP.
Рекомендации и лучшие практики
Безопасность
- Настройте брандмауэр (ufw/iptables) и разрешите только нужные порты (80, 443, SSH).
- Используйте встроенное управление TLS Caddy (Let’s Encrypt) для публичных доменов.
- Ограничьте доступ к административным интерфейсам и файлам конфигурации.
- Регулярно обновляйте Caddy и PHP‑пакеты через apt.
Настройки производительности
- Включайте gzip/zstd с учётом используемого трафика.
- Используйте кэширование и CDN для статического контента.
- Для высоких нагрузок разверните несколько фронтендов Caddy за балансировщиком.
Отладка и распространённые проблемы
- Если сертификат не выдаётся, проверьте DNS‑запись и доступность 80/443 извне.
- При ошибках PHP проверьте логи PHP‑FPM и права доступа к сокету (/run/php/*.sock).
- Если Caddy не привязывается к портам — убедитесь, что setcap применён и нет другого процесса на 80/443.
Быстрая методология проверки после установки
- Убедитесь, что служба запущена: systemctl status caddy
- Проверьте ответ HTTP: curl -I http://localhost
- Зайдите на ваш домен из браузера
- Просмотрите логи systemd и Caddy при ошибках: journalctl -u caddy -e
Резервные варианты установки
- Установка из официального .deb пакета, скачанного с релизов Caddy — полезно при ограниченном доступе к репозиторию.
- Сборка кастомного билда caddy с нужными плагинами (xcaddy) — когда нужны нестандартные модули.
- Использование docker‑образа Caddy — удобно в контейнеризированных средах.
Проверки для ролей
- Операторы: проверить статус службы, автоматический рестарт и мониторинг (Prometheus/exporter).
- Девелоперы: убедиться, что phpinfo и доступ к статике работают корректно.
- Безопасность: убедиться в наличии TLS и закрытии лишних портов.
Краткий план отката при ошибках
- Восстановить предыдущую версию /etc/caddy/Caddyfile из резервной копии.
- Перезапустить сервис: systemctl restart caddy
- При необходимости временно выключить Caddy и вернуть старый веб‑сервер (например, nginx) до устранения проблемы.
Критерии приёмки
- Caddy установлен и запущен: systemctl status caddy показывает active (running).
- Домен возвращает HTTP 200 для статической страницы и вывод phpinfo() при обращении к info.php.
- PHP‑FPM запущен от пользователя caddy и сокет доступен.
Краткий глоссарий
- Caddy: веб‑сервер на Go с автоматическим управлением TLS.
- PHP‑FPM: FastCGI Process Manager для запуска PHP‑приложений.
- systemd: система инициализации и менеджер служб в Linux.
Итог
Поздравляю — вы установили и настроили Caddy на Debian 11 с поддержкой PHP. В следующих шагах можно добавить HTTPS, настроить логирование, ротацию логов и интеграцию с системой мониторинга.
Важно: адаптируйте примеры путей и версий PHP под вашу систему.
Похожие материалы
Firefox: перетаскивание не работает — что делать
Как зарегистрироваться в ESPN+ без провайдера
Windows 11 Enterprise VM в VirtualBox — установка и устранение проблем
ESPN+ просит TV‑провайдера — что делать
Ярлык Windows Tools в Windows 11: все способы