Установка и использование Caddy на Ubuntu
Содержание
- Почему стоит выбрать Caddy
- Установка Caddy на Ubuntu
- Запуск первой страницы
- Создание сайта с помощью Caddyfile
- Настройка SSL‑reverse proxy
- Мультисайт и wildcard‑сертификаты через DNS
- Рекомендации по безопасности и отладке
- Чек‑листы и критерии приёмки
- Заключение
Почему стоит выбрать Caddy
Caddy — современный, удобный и компактный веб‑сервер. Он упрощает создание конфигураций и автоматизирует выпуск и продление SSL‑сертификатов. Для быстро разворачиваемых проектов и self‑hosting Caddy часто оказывается проще в поддержке, чем Nginx или Apache.

Ключевые преимущества:
- Простой формат Caddyfile — один плоский файл с понятным синтаксисом.
- Автоматическое получение и обновление HTTPS через Let’s Encrypt и ACME.
- Встроенные возможности reverse_proxy, file_server, redir и модульность через сборки с плагинами.
Важно: если вам нужно детально тонко контролировать каждую директиву TLS или применять сложные правила на уровне ядра сервера, Nginx/Apache дают больше низкоуровневых опций. Caddy ориентирован на удобство и безопасность по умолчанию.
Установка Caddy на Ubuntu
Подготовьте систему и установите необходимые утилиты для работы с репозиториями:
sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-releaseДобавьте GPG‑ключ и репозиторий Caddy. Приведённые ниже команды корректны для Debian/Ubuntu и загружают официальный ключ и файл репозитория:
curl -fsSL 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -fsSL 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy.list
sudo apt update && sudo apt upgrade -y
sudo apt install -y caddyПримечание: команды в исходном материале содержали опечатки (отсутствовали пробелы). Здесь приведён корректный, рабочий набор команд.
После установки Caddy сервис запускается и включается в автозагрузку systemd.
Проверка версии:
caddy --versionЕсли вы используете нестандартную архитектуру или хотите собрать Caddy с поддержкой конкретного DNS‑провайдера (для ACME DNS‑challenge), можно скачать кастомную сборку на странице загрузок Caddy.
Запуск первой страницы
Создайте простой сайт в домашней директории и запустите временный file server на порте 8080.
mkdir -p ~/my-first-website && cd ~/my-first-website
cat > index.html <<'HTML'
Hello World
Hello World!
Пример страницы, обслуживаемой Caddy file_server.
HTMLЗапустите локальный файл‑сервер Caddy:
caddy file-server --listen :8080Откройте в браузере http://localhost:8080 и проверьте, что страница отображается.

Важно: запуск через caddy file-server удобен для локального тестирования, но для постоянного обслуживания в проде рекомендуется настроить systemd‑службу caddy с конфигурацией Caddyfile.
Создание сайта с помощью Caddyfile
Caddyfile — основной способ постоянной конфигурации сайтов Caddy. Создайте файл /etc/caddy/Caddyfile и добавьте конфигурацию для домена:
sudo mkdir -p /etc/caddy
sudo nano /etc/caddy/CaddyfileПример простого Caddyfile:
your-domain.com {
redir https://www.{host}{uri}
}
www.your-domain.com {
root * /var/www/html
file_server
}Пояснения:
- redir перенаправляет с корневого домена на www‑поддомен с HTTPS.
- root * указывает корневую директорию сайта.
- file_server включает отдачу статических файлов.
Для локальной разработки замените your-domain.com на localhost и Caddy сгенерирует самоподписанный сертификат.
Скопируйте ваш index.html в /var/www/html:
sudo mkdir -p /var/www/html
sudo cp ~/my-first-website/index.html /var/www/html/
sudo chown -R www-data:www-data /var/www/htmlУбедитесь, что DNS‑записи A/AAAA для вашего домена указывают на IP сервера, если вы настраиваете публичный сайт.
Включите и перезапустите сервис:
sudo systemctl enable --now caddy
sudo systemctl status caddyПроверьте сайт по доменному имени.

Настройка SSL‑reverse proxy
Caddy отлично подходит для использования в качестве обратного прокси — принимает HTTPS и проксирует запросы на внутренние сервисы.
Откройте /etc/caddy/Caddyfile и добавьте простую прокси‑конфигурацию:
your-domain.com {
reverse_proxy 127.0.0.1:3001
}Замените 3001 на порт вашего приложения. Затем перезагрузите Caddy:
sudo systemctl reload caddyПроверьте доступность сервиса по домену. Caddy автоматически обеспечит HTTPS при корректных DNS‑записях.

Мультисайт и wildcard‑сертификаты через DNS
Caddy может обслуживать множество сайтов из одного Caddyfile и выпускать wildcard‑сертификаты, используя DNS‑challenge. Для этого требуется поддержка DNS API вашего провайдера (плагин caddy‑dns).
- На странице загрузки Caddy выберите ваш DNS‑провайдер (например, DigitalOcean) и скачайте кастомную сборку с нужным модулем — это сгенерирует бинарник с поддержкой соответствующего DNS‑провайдера.

- Остановите сервис Caddy, сделайте бэкап бинарника и замените его на скачанный:
sudo systemctl disable --now caddy.service
sudo cp /usr/bin/caddy ~/caddy.bin.bak
sudo cp ~/Downloads/caddy_linux_amd64_custom /usr/bin/caddy
sudo chmod +x /usr/bin/caddy- Проверьте версию и модули:
caddy --version
caddy list-modules | grep dns- Настройте Caddyfile для wildcard‑сертификатов (пример для DigitalOcean):
*.your-domain.com {
tls {
dns digitalocean API-KEY
}
@www host www.your-domain.com
handle @www {
root * /var/www/html
file_server
}
@subdomain host subdomain.your-domain.com
handle @subdomain {
reverse_proxy 127.0.0.1:LOCAL-PORT
}
handle {
abort
}
}Где API-KEY — ваш секретный ключ от DNS‑провайдера. В DigitalOcean его можно получить в разделе API → Tokens/Keys.
После правки включите сервис:
sudo systemctl enable --now caddyПроверьте оба сервиса и сертификаты в браузере.

Важно: храните API‑ключи в защищённом виде. Не выкладывайте их в публичные репозитории.
Рекомендации по безопасности и отладке
Security hardening — краткий чек‑лист:
- Запускайте Caddy с отдельным системным юзером (по умолчанию используется caddy). Проверьте права на /etc/caddy и /var/www.
- Ограничьте доступ к файловой системе: только необходимые каталоги должны принадлежать caddy/www-data.
- Используйте firewall (ufw/iptables) — открывайте только нужные порты (80/443) на публичном интерфейсе.
- Включите автоматическое обновление пакетов или следите за релизами Caddy.
- Для внутренних сервисов применяйте внутреннюю авторизацию/ACL на уровне приложения — Caddy обеспечивает транспорт (TLS), но не заменяет аутентификацию.
Отладка и логи:
sudo journalctl -u caddy --no-pager
sudo journalctl -f -u caddy
caddy validate --config /etc/caddy/CaddyfileЕсли сертификаты не выдаются, проверьте:
- DNS записи A/AAAA и время их распространения (TTL).
- Доступность сервера снаружи (порт 80/443 не блокируется провайдером).
- Корректность API‑ключей для DNS‑challenge.
Чек‑листы и контрольные тесты
Чек‑лист администратора (быстрый):
- Установлен caddy и проверена версия
- /etc/caddy/Caddyfile содержит валидную конфигурацию
- DNS A/AAAA указывают на сервер
- systemd сервис caddy активен
- HTTPS корректно выдан и страница открывается
Чек‑лист разработчика (перед деплоем):
- Локально протестирован file-server
- Reverse proxy корректно проксирует заголовки и websockets
- Логирование приложений направлено в подходящее место
Критерии приёмки
- Сайт доступен по HTTPS (валидный сертификат) в браузере без предупреждений.
- Для проксируемого сервиса все эндпоинты работают через доменное имя.
- Логи Caddy не содержат ошибок TLS или ACME.
Тестовые сценарии / приемочные тесты
- Открыть https://your-domain.com — ожидание: редирект на www и доступность контента.
- Открыть https://subdomain.your-domain.com — ожидание: ответ от проксируемого сервиса.
- Проверить автоматическое продление сертификата (симуляция: посмотреть дату expiry и убедиться, что ACME работает).
Альтернативы, когда Caddy не подходит
- Nginx — когда нужна максимальная производительность и детальная тонкая настройка на уровне ядра.
- Traefik — если у вас динамическая инфраструктура (Docker, Kubernetes) и нужен более тесный интегратор с сервис‑дискавери.
- Apache — в окружениях с богатой историей .htaccess и модулей.
Ментальная модель (как думать о Caddy):
- Caddy = безопасный входной шлюз (TLS + маршрутизация) + простая конфигурация. Думайте о нём как о фасаде, который защищает и направляет трафик к вашим приложениям.
Частые ошибки и как их исправить
Проблема: «ACME: timeout» или «could not obtain certificate». Решение: проверьте DNS‑записи и доступность портов 80/443; при использовании DNS‑challenge — правильность API‑ключа.
Проблема: сайт работает по IP, но не по домену. Решение: убедитесь, что в DNS есть записи A/AAAA и propagation завершён; проверьте, не кэшируется ли старый A‑запись.
Проблема: кастомная сборка не содержит модуля. Решение: проверьте список модулей через caddy list-modules и получите нужный бинарник через официальный билд‑сервис.
Советы по миграции с Nginx/Apache на Caddy
- Перепишите базовые правила: location -> route/handle/route matcher; rewrite/return -> redir.
- Переместите статические сайты в /var/www и используйте root * /var/www/html + file_server.
- Тестируйте конфигурацию с caddy validate и локально с caddy run –config /etc/caddy/Caddyfile.
Мини‑методология развёртывания нового сайта (5 шагов):
- Подготовка: создать каталог сайта и initial index.html.
- Caddyfile: добавить блок для домена, настроить root и file_server или reverse_proxy.
- DNS: добавить A/AAAA записи для домена и ожидать распространения.
- Включение: sudo systemctl reload caddy и проверка логов.
- Мониторинг: настроить оповещения и проверку доступности (Uptime Kuma, Prometheus и т.д.).
Заключение
Caddy — быстрый способ получить безопасный и простой в управлении веб‑сервер на Ubuntu. Он минимизирует рутинные операции с TLS и отлично подходит для self‑hosting, внутренних сервисов и проектов, где важна скорость деплоя. Для сложных сценариев рассмотрите интеграцию APM/логирования и использование кастомных сборок с поддержкой вашего DNS‑провайдера.
Image credit: Jonathan Ybema via Unsplash and Wikimedia Commons. All alterations and screenshots by Ramces Red.
Важно: перед заменой системного бинарника убедитесь в наличии резервной копии и в том, что вы понимаете последствия для уже работающих сервисов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента