Skip to content

📄 Caddy

1. Описание

Caddy — это мощный, легковесный и умный веб-сервер с открытым исходным кодом, который автоматически настраивает HTTPS, используя Let’s Encrypt. Подходит для разработчиков, системных администраторов и DevOps инженеров.

Особенности:

  • Автоматический выпуск и обновление сертификатов SSL/TLS
  • Простой конфигурационный файл (Caddyfile)
  • Поддержка reverse proxy, FastCGI, HTTP/3, REST API и т. д.
  • Много платформ: Linux, Windows, macOS, ARM и т. д.

2. Установка Caddy

2.1 Ubuntu / Debian

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

2.2 Проверка версии

caddy version

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

3.1 Файл конфигурации: Caddyfile

По умолчанию находится в /etc/caddy/Caddyfile.

Пример минимальной конфигурации:

example.com {
    root * /var/www/html
    file_server
}

Это настроит сервер, который будет отдавать статические файлы из /var/www/html по адресу example.com с автоматическим HTTPS.

3.2 Перезапуск после изменений

sudo systemctl reload caddy

4. Полезные примеры конфигураций

4.1 Обратный прокси (reverse proxy)

Для запуска микросервисов или приложений на Node.js, Python, Go и т. д.

api.example.com {
    reverse_proxy http://localhost:3000
}

4.2 Статический сайт + SPA поддержка

mysite.com {
    root * /var/www/myapp
    file_server
    try_files {path} /index.html
}

4.3 Несколько доменов

site1.com {
    root * /var/www/site1
    file_server
}

site2.org {
    root * /var/www/site2
    file_server
}

4.4 Запуск на порту 80 и 443

{
    servers {
        listener_wrappers {
            tcp :80
            tcp :443
        }
    }
}

⚠️ Для работы на портах < 1024 может понадобиться разрешение (setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/caddy)


5. Интеграция с systemd

После установки Caddy автоматически добавляется как сервис.

Управление:

sudo systemctl status caddy
sudo systemctl start caddy
sudo systemctl stop caddy
sudo systemctl restart caddy

6. Логи

Логи по умолчанию находятся в:

journalctl -u caddy

Или с фильтром по времени:

journalctl -u caddy --since "5 minutes ago"

7. Безопасность

7.1 HTTPS (автоматическое)

Caddy сам получает и обновляет сертификаты Let's Encrypt.

Если нужно использовать свои:

example.com {
    tls /etc/ssl/example.crt /etc/ssl/example.key
}

7.2 Ограничение доступа

myapp.com {
    basicauth /admin {
        user1 MD5_HASH
    }

    reverse_proxy localhost:8080
}

8. Динамическая перезагрузка конфигурации

Можно обновить конфиг без перезапуска:

sudo caddy reload

9. API управления (REST API)

Caddy предоставляет REST API для управления:

curl http://localhost:2019/config/

Изменение конфига через API:

curl -X POST http://localhost:2019/load \
     -H "Content-Type: application/json" \
     --data-binary @config.json

10. Расширения и плагины

Caddy можно расширять, собирая его из исходников с нужными модулями. Например:


11. Резервное копирование и восстановление

Конфигурации:

sudo cp /etc/caddy/Caddyfile /backup/Caddyfile.bak

Сертификаты:

sudo cp -r /etc/letsencrypt /backup/

12. Полезные команды

Команда Описание
caddy run Запустить Caddy с текущим Caddyfile
caddy stop Остановить работающий экземпляр
caddy validate Проверить корректность конфигурации
caddy fmt --overwrite Форматировать Caddyfile
caddy adapt Преобразовать Caddyfile в JSON

13. Заключение

Caddy — это идеальный выбор для тех, кто хочет быстро и безопасно развернуть веб-сервис с автоматическим HTTPS. Его простая настройка и богатые возможности делают его отличной заменой Nginx/Apache в большинстве современных проектов.


📎 Приложения