📄 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 можно расширять, собирая его из исходников с нужными модулями. Например:
- Caddy-Docker-Proxy — для Docker-контейнеров
- Caddy WebDAV — поддержка WebDAV
- Caddy Auth Portals — портал аутентификации
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 в большинстве современных проектов.