Гид по технологиям

Установка Caddy с PHP‑FPM на Ubuntu 16.04

• 6 min read • DevOps • Обновлено 23 Nov 2025
Установка Caddy с PHP‑FPM на Ubuntu 16.04
Установка 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
  • Доступ к терминалу

Что мы сделаем

  1. Установим Caddy с помощью установочного скрипта
  2. Настроим базовую конфигурацию Caddy
  3. Запустим Caddy как сервис systemd
  4. Установим PHP и PHP‑FPM 7.0
  5. Настроим Caddy для работы с PHP‑FPM
  6. Протестируем и проверим работу

Шаг 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 на Ubuntu 16.04

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).

Файл конфигурации Caddy для локального сайта

Базовая конфигурация завершена.

Шаг 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

Если всё в порядке, сервис запущен.

Caddy запущен как systemd сервис

Создаём простую страницу для проверки:

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, всё готово.

PHP-FPM установлен и работает

Шаг 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

Caddy с поддержкой PHP-FPM

Шаг 6 - Тестирование

Создайте phpinfo для быстрой проверки работы PHP через Caddy:

cd /var/www/html
echo '' > info.php
chown caddy:caddy info.php

Откройте http://hakase-labs.co/info.php — должна появиться страница с информацией о PHP.

Страница phpinfo от PHP-FPM через Caddy

Если всё работает, вы успешно настроили 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)

  1. Остановить сервис Caddy: systemctl stop caddy
  2. Восстановить предыдущий Caddyfile из бэкапа: /etc/caddy/Caddyfile.bak
  3. Перезапустить сервис: systemctl start caddy
  4. При критических ошибках вернуть Nginx конфигурацию и маршрутизацию согласно бэкапам.

Тест кейсы и приёмочные тесты

  • Открыть корневой URL — должен возвращать index.html (HTTP 200).
  • Открыть /info.php — phpinfo должен отображаться (HTTP 200).
  • Попробовать несуществующую страницу — должен быть корректный 404.
  • Изменить файл index.php, проверить обновление вывода в браузере.

Короткая методология безопасной настройки сервера

  1. Настроить непривилегированного пользователя и права.
  2. Запустить сервис через systemd с ограничениями ресурсов.
  3. Настроить мониторинг и логи.
  4. Включить 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, настройте бэкапы и мониторинг. В руководстве представлены контрольные списки, тесты и рекомендации по безопасности, которые помогут перейти от локальной установки к стабильному продакшен‑окружению.

Ресурсы

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро