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

Установка и использование Caddy на Ubuntu

• 7 min read • DevOps • Обновлено 29 Nov 2025
Установка Caddy на Ubuntu — быстрый старт
Установка Caddy на Ubuntu — быстрый старт

Содержание

  • Почему стоит выбрать Caddy
  • Установка Caddy на Ubuntu
  • Запуск первой страницы
  • Создание сайта с помощью Caddyfile
  • Настройка SSL‑reverse proxy
  • Мультисайт и wildcard‑сертификаты через DNS
  • Рекомендации по безопасности и отладке
  • Чек‑листы и критерии приёмки
  • Заключение

Почему стоит выбрать Caddy

Caddy — современный, удобный и компактный веб‑сервер. Он упрощает создание конфигураций и автоматизирует выпуск и продление SSL‑сертификатов. Для быстро разворачиваемых проектов и self‑hosting Caddy часто оказывается проще в поддержке, чем Nginx или Apache.

Терминал с примером Caddyfile, показывающий простую конфигурацию серверов.

Ключевые преимущества:

  • Простой формат 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 и проверьте, что страница отображается.

Образец сайта, запущенного на 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

Проверьте сайт по доменному имени.

Пример сайта, доступного по внешнему доменному имени через 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‑записях.

Терминал с примером конфигурации reverse_proxy в Caddyfile.

Мультисайт и wildcard‑сертификаты через DNS

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

  1. На странице загрузки Caddy выберите ваш DNS‑провайдер (например, DigitalOcean) и скачайте кастомную сборку с нужным модулем — это сгенерирует бинарник с поддержкой соответствующего DNS‑провайдера.

Поле поиска caddy-dns на странице загрузки Caddy.

  1. Остановите сервис 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
  1. Проверьте версию и модули:
caddy --version
caddy list-modules | grep dns
  1. Настройте 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

Проверьте оба сервиса и сертификаты в браузере.

Пример двух сервисов под SSL, обслуживаемых 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 + маршрутизация) + простая конфигурация. Думайте о нём как о фасаде, который защищает и направляет трафик к вашим приложениям.

Частые ошибки и как их исправить

  1. Проблема: «ACME: timeout» или «could not obtain certificate». Решение: проверьте DNS‑записи и доступность портов 80/443; при использовании DNS‑challenge — правильность API‑ключа.

  2. Проблема: сайт работает по IP, но не по домену. Решение: убедитесь, что в DNS есть записи A/AAAA и propagation завершён; проверьте, не кэшируется ли старый A‑запись.

  3. Проблема: кастомная сборка не содержит модуля. Решение: проверьте список модулей через 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 шагов):

  1. Подготовка: создать каталог сайта и initial index.html.
  2. Caddyfile: добавить блок для домена, настроить root и file_server или reverse_proxy.
  3. DNS: добавить A/AAAA записи для домена и ожидать распространения.
  4. Включение: sudo systemctl reload caddy и проверка логов.
  5. Мониторинг: настроить оповещения и проверку доступности (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.

Важно: перед заменой системного бинарника убедитесь в наличии резервной копии и в том, что вы понимаете последствия для уже работающих сервисов.

Поделиться: 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 быстро