Установка Caddy с PHP‑FPM на Ubuntu 16.04
TL;DR
Caddy — лёгкий HTTP/2 веб‑сервер на Go с автоматическим HTTPS. В этом руководстве пошагово показано, как установить Caddy на Ubuntu 16.04, запустить его как systemd‑сервис и подключить PHP‑FPM 7.0 для обработки PHP‑скриптов. Включены проверка, отладка, рекомендации по безопасности и контрольные списки для администратора.
Введение
Caddy — это открытый HTTP/2 веб‑сервер, написанный на Go. Он работает на Linux, Windows, macOS, Android и BSD. Главное преимущество — автоматическое получение и обновление TLS‑сертификатов (в боевом режиме) и простая интеграция с FastCGI/PHP‑FPM. Этот туториал ориентирован на локальную установку на Ubuntu 16.04 и настройку PHP‑FPM 7.0 для запуска PHP‑приложений.
Предварительные условия
- Сервер с Ubuntu 16.04
- Права root или sudo
- Доступ к терминалу
Что мы сделаем
- Установим Caddy с помощью установочного скрипта
- Настроим базовую конфигурацию Caddy
- Запустим Caddy как сервис systemd
- Установим PHP и PHP‑FPM 7.0
- Настроим Caddy для работы с PHP‑FPM
- Протестируем и проверим работу
Шаг 1 - Установка Caddy
В этом шаге мы установим Caddy через официальный установочный скрипт. Скрипт скачает бинарник и поместит его в /usr/local/bin.
Скачайте скрипт и сделайте его исполняемым:
wget https://getcaddy.com -O getcaddy
chmod +x getcaddyЗапустите установщик с sudo и необходимыми плагинами (если нужно):
sudo ./getcaddy personal http.ipfilter,http.ratelimitПримечания:
- getcaddy — установочный скрипт Caddy.
- personal — лицензия для установки локально.
- http.ipfilter,http.ratelimit — примеры плагинов, можно изменить набор.
Дождитесь завершения установки. В конце вы увидите сообщение об успешной установке и расположении бинарника.

Caddy установлен.
Шаг 2 - Базовая конфигурация Caddy
Создадим системного пользователя для запуска сервера, директории для конфигурации, логов и корневой папки сайта.
Создаём пользователя caddy без входа в систему:
useradd -M -s /bin/false caddyСоздаём директории:
mkdir -p /etc/caddy
mkdir -p /var/log/caddy
mkdir -p /var/www/htmlМеняем владельца конфигурации и логов на пользователя caddy:
chown -R caddy:root /etc/caddy /var/log/caddyСоздаём файл конфигурации Caddyfile:
cd /etc/caddy/
vim CaddyfileВставьте базовую конфигурацию (пример для локального домена):
http://hakase-labs.co {
root /var/www/html
log /var/log/caddy/hakase-labs.log
tls off
gzip
}Сохраните и выйдите.
Примечание:
- tls off используется для локальной установки. На боевом сервере TLS должен быть включён или оставьте автоматическое получение сертификатов (уберите tls off).

Базовая конфигурация завершена.
Шаг 3 - Запуск Caddy как сервиса systemd
Создадим unit‑файл systemd, чтобы Caddy запускался как сервис и корректно управлялся системой.
Создаём файл сервиса:
vim /etc/systemd/system/caddy.serviceВставьте конфигурацию сервиса:
[Unit]
Description=Caddy HTTP/2 web server
[Service]
User=caddy
Group=caddy
Environment=CADDYPATH=/etc/caddy
ExecStart=/usr/local/bin/caddy -agree=true -log=/var/log/caddy/caddy.log -conf=/etc/caddy/Caddyfile -root=/dev/null
ExecReload=/bin/kill -USR1 $MAINPID
LimitNOFILE=1048576
LimitNPROC=64
[Install]
WantedBy=multi-user.targetСохраняем и перезагружаем конфигурацию systemd, затем запускаем и включаем сервис:
systemctl daemon-reload
systemctl start caddy
systemctl enable caddyПроверьте статус:
systemctl status caddyЕсли всё в порядке, сервис запущен.

Создаём простую страницу для проверки:
cd /var/www/html
echo 'Caddy web server
' > index.html
chown -R caddy:caddy /var/www/htmlОткройте в браузере адрес, указанный в Caddyfile (в примере http://hakase-labs.co/) — должна отобразиться страница index.html.
Шаг 4 - Установка PHP и PHP‑FPM 7.0
Устанавливаем пакеты php7.0‑fpm и утилиты из репозитория Ubuntu:
sudo apt install -y php7.0-fpm php7.0-cli curlПосле установки отредактируем пул PHP‑FPM, чтобы сокет имел правильные права и владельца. Откройте файл пула:
cd /etc/php/7.0/fpm
vim pool.d/www.confРаскомментируйте или добавьте параметры:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660Добавьте пользователя caddy в группу www‑data, чтобы Caddy мог читать сокет PHP‑FPM:
usermod -a -G www-data caddyЗапускаем и включаем PHP‑FPM:
systemctl start php7.0-fpm
systemctl enable php7.0-fpmПроверим сокет PHP‑FPM:
netstat -pl | grep phpЕсли сокет /run/php/php7.0-fpm.sock присутствует и принадлежит www‑data, всё готово.

Шаг 5 - Настройка Caddy с поддержкой PHP‑FPM
Отредактируйте /etc/caddy/Caddyfile и добавьте блок fastcgi для обработки .php файлов.
cd /etc/caddy
vim CaddyfileПример конфигурации с PHP‑FPM через Unix‑сокет:
http://hakase-labs.co {
root /var/www/html
log /var/log/caddy/hakase-labs.log
errors /var/log/caddy/errors.log
tls off
gzip
# PHP-FPM Configuration for Caddy
fastcgi / /run/php/php7.0-fpm.sock php {
ext .php
split .php
index index.php
}
}Сохраните, затем перезапустите сервисы:
systemctl restart caddy
systemctl restart php7.0-fpmПроверьте логи Caddy и PHP‑FPM при необходимости:
journalctl -u caddy -n 200
tail -n 200 /var/log/caddy/hakase-labs.log
Шаг 6 - Тестирование
Создайте phpinfo для быстрой проверки работы PHP через Caddy:
cd /var/www/html
echo '' > info.php
chown caddy:caddy info.phpОткройте http://hakase-labs.co/info.php — должна появиться страница с информацией о PHP.

Если всё работает, вы успешно настроили Caddy с PHP‑FPM на Ubuntu 16.04.
Контроль качества и критерии приёмки
- Caddy служба активна и находится в состоянии active (systemctl status).
- При обращении к корню сайта возвращается index.html или index.php.
- PHP‑скрипты обрабатываются через /run/php/php7.0-fpm.sock и phpinfo() отображает информацию.
- Логи Caddy не содержат критических ошибок при старте.
Отладка и типичные неисправности
- Пустая страница или 502 Bad Gateway: проверьте права сокета PHP‑FPM и принадлежность пользователя caddy к группе www‑data.
- Ошибки доступа к файлам: проверьте владельца и права в /var/www/html.
- Caddy не стартует: проверьте синтаксис Caddyfile и выполните journalctl -u caddy.
Команды для диагностики:
systemctl status caddy php7.0-fpm
journalctl -xe
tail -f /var/log/caddy/hakase-labs.log
ss -xl | grep phpБезопасность и рекомендации по продакшену
- В бою не используйте tls off: разрешите автоматическую выдачу TLS либо настройте ваши сертификаты.
- Запускайте Caddy под непривилегированным пользователем (как сделано выше).
- Ограничьте доступ к административным частям через IP‑фильтры или basic auth.
- Обновляйте пакеты и Caddy до актуальных версий и покрывайте сервер бэкапами.
Альтернативы и расширения
- Nginx с php‑fpm — стандартный вариант с большим сообществом.
- Traefik — современный маршрутизатор/ингресс с динамической конфигурацией.
- Для контейнеризации используйте Docker: образ caddy + php‑fpm в отдельных контейнерах и сеть между ними.
Миграция с Nginx на Caddy — практические советы
- Переведите location‑правила Nginx в соответствующие директивы Caddyfile (fastcgi вместо proxy_pass для PHP).
- Проверьте пользовательские настройки (gzip, логирование) и соответствия директив.
- Тестируйте на staging перед переносом на production.
Роль‑базовые контрольные списки
Для системного администратора:
- Установить Caddy, добавить unit‑файл systemd, настроить запуск.
- Настроить пользователя caddy и права на директории.
- Настроить PHP‑FPM и права сокета.
Для разработчика:
- Проверить работу phpinfo и базовой страницы.
- Убедиться, что маршрутизация и индексы работают (index.php, index.html).
- Выполнить unit‑тесты приложения локально.
План отката (rollback)
- Остановить сервис Caddy: systemctl stop caddy
- Восстановить предыдущий Caddyfile из бэкапа: /etc/caddy/Caddyfile.bak
- Перезапустить сервис: systemctl start caddy
- При критических ошибках вернуть Nginx конфигурацию и маршрутизацию согласно бэкапам.
Тест кейсы и приёмочные тесты
- Открыть корневой URL — должен возвращать index.html (HTTP 200).
- Открыть /info.php — phpinfo должен отображаться (HTTP 200).
- Попробовать несуществующую страницу — должен быть корректный 404.
- Изменить файл index.php, проверить обновление вывода в браузере.
Короткая методология безопасной настройки сервера
- Настроить непривилегированного пользователя и права.
- Запустить сервис через systemd с ограничениями ресурсов.
- Настроить мониторинг и логи.
- Включить TLS в бою и настроить автоматические обновления сертификатов.
Краткий глоссарий 1 строкой
- Caddy: HTTP/2 веб‑сервер на Go с автоматическим TLS.
- PHP‑FPM: FastCGI Process Manager для PHP.
- Caddyfile: основной конфигурационный файл Caddy.
- systemd: менеджер системных служб в современных дистрибутивах Linux.
Часто задаваемые вопросы
Как включить TLS в Caddy?
Для боевого домена уберите tls off и убедитесь, что домен доступен извне — Caddy автоматически запросит сертификат Let’s Encrypt.
Что делать, если Caddy не видит сокет PHP‑FPM?
Проверьте путь сокета в /etc/php/7.0/fpm/pool.d/www.conf и права. Убедитесь, что user caddy состоит в группе www‑data.
Заключение
Вы установили Caddy, настроили его как systemd‑сервис и подключили PHP‑FPM 7.0. Для боевого использования обязательно включите TLS, настройте бэкапы и мониторинг. В руководстве представлены контрольные списки, тесты и рекомендации по безопасности, которые помогут перейти от локальной установки к стабильному продакшен‑окружению.
Ресурсы
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента