Caddy
Проект Caddy (caddyserver) · лицензия Apache-2.0
Веб-сервер, который раздаёт собранный сайт из папки. По документации сам получает HTTPS-сертификат для домена, если DNS указывает на сервер и порты 80 и 443 открыты.
✓ Проверено 13.10.2026: Ubuntu 24.04 (x86_64) в одноразовом контейнере Docker на сервере, от root, без systemd: Caddy 2.11.7 из репозитория apt проекта. Что именно проверяли
Какую задачу решает
Веб-сервер, который показывает собранный сайт из папки и сам получает HTTPS-сертификат. Агент ставит Caddy на сервер с доменом и пишет короткий Caddyfile с адресом сайта и папкой, дальше по документации Caddy сам берёт сертификат у Let's Encrypt или ZeroSSL и продлевает его. Для проверки на своём компьютере ту же папку можно открыть по адресу localhost, тогда сертификат выдаёт локальный центр сертификации Caddy.
- Командой caddy file-server раздаёт папку с готовым сайтом без файла настройки, в нашем прогоне страницы пришли без изменений, на несуществующую страницу ответ 404.
- По Caddyfile из нескольких строк включает HTTPS, сжатие gzip и свои заголовки ответа. В прогоне localhost открылся по HTTPS с сертификатом, который выдал локальный центр сертификации Caddy, файл CSS пришёл сжатым с 11 600 до 129 байт.
- Запросы по HTTP переводит на HTTPS: в прогоне запрос к странице blog по HTTP получил ответ 308 с тем же путём на HTTPS.
- Для домена в интернете по документации получает и продлевает сертификат сам, если записи DNS указывают на сервер и порты 80 и 443 открыты. Этот случай мы не проверяли: в песочнице нет домена.
- Настройку проверяет до запуска командой caddy validate, ошибка в Caddyfile дала код 1 и номер строки.
Пример результата
Говоришь агенту
Собранный сайт лежит в папке site. Покажи его по HTTPS на localhost, порт 8443, со сжатием gzip и заголовком X-Test, корневой сертификат Caddy в систему не ставь. Сначала проверь настройку, потом запусти и убедись, что страницы открываются.
Что получится
Мы прогнали этот сценарий на тестовой папке из трёх файлов. caddy validate ответил «Valid configuration». Через 372 мс после запуска главная страница пришла по HTTPS/2 с кодом 200 и совпала с файлом байт в байт, заголовок X-Test на месте. Сертификат выдал локальный центр сертификации Caddy, его корневой сертификат называется «Caddy Local Authority - 2026 ECC Root». Без доверия к нему curl отказал с кодом 60. Файл CSS пришёл в gzip, после распаковки совпал с исходным. Хранилище доверенных сертификатов Ubuntu осталось прежним, файлы сайта после работы совпали по sha256.
Паспорт
- Кто делает
- Проект Caddy (caddyserver)
- Сайт
- caddyserver.com
- Исходный код
- github.com/caddyserver/caddy
- Инструкция
- caddyserver.com/docs/install
- Лицензия
- Apache-2.0
- Версия
- 2.11.7 на 13.10.2026
- Системы
- macOS · Windows · Linux
- Где работает
- На сервере, на компьютере и в контейнере
- Цена
- Бесплатно
- Проверка
- Проверено 13.10
Установить агентом
Установи программу «Caddy». Работай по шагам и после каждого коротко говори, что сделал.
Что это за программа (каталог smyslokod.ru, официальные источники сверены 13.10.2026):
- официальный сайт: https://caddyserver.com/
- исходный код: https://github.com/caddyserver/caddy
- инструкция по установке: https://caddyserver.com/docs/install
- актуальная версия на 13.10.2026: 2.11.7
- лицензия: Apache-2.0
- для работы нужно (в отдельных случаях): Свой домен и открытые порты 80 и 443 - нужны только для сертификата, которому доверяют все браузеры: по документации записи DNS домена должны указывать на сервер до запуска Caddy
Правила:
1. Ничего не устанавливай и не меняй, пока я не скажу «да» на твой план.
2. Ставь только способами из этого промпта. Сторонние сборки, скрипты с форумов и из чужих репозиториев не бери.
3. Мои проекты не трогай: не меняй их файлы, виртуальные окружения и списки зависимостей (package.json, requirements.txt, pyproject.toml).
4. Команды с sudo, правку профиля оболочки (~/.zshrc, ~/.bashrc) и переменной PATH делай только после моего отдельного «да» на каждую.
5. Не проси у меня пароли и ключи и не выводи их. Если нужен пароль администратора, дай команду, я выполню её сам.
6. Ставь Caddy на сервер только по «да» и предупреди: при работающем systemd пакет сразу включает и запускает службу caddy, а стандартный Caddyfile слушает порт 80.
7. В root указывай только папку собранного сайта. Папку пользователя целиком и корень проекта с файлами .env и ключами не раздавай.
8. Перед запуском с доменом покажи человеку домен, папку и Caddyfile и проверь, что запись DNS домена указывает на этот сервер.
9. caddy trust, caddy upgrade и apt purge caddy запускай отдельным «да» на каждую: первая меняет хранилище доверенных сертификатов компьютера, вторая заменяет файл программы, третья стирает сертификаты службы.
10. Адрес админки на внешний интерфейс не переноси.
Шаги:
0. Определи, где ты работаешь: мой компьютер, сервер или контейнер. Какая система и процессор, какие менеджеры пакетов есть (Homebrew, apt, winget, uv, pipx). Ставить нужно туда, где ты сам запускаешь команды.
- на сервере: основное место: сайт на своём сервере с доменом. Пакет apt по документации сразу запускает службу caddy от отдельного пользователя caddy.
- на компьютере: показать собранный сайт по адресу localhost, в том числе по HTTPS. По документации при первом выпуске локального сертификата Caddy сам пытается поставить свой корневой сертификат в хранилище доверенных сертификатов, без прав может спросить пароль. Чтобы хранилище не трогать, заранее задай в Caddyfile skip_install_trust, как в нашем прогоне.
- в контейнере: мы проверяли в контейнере Ubuntu 24.04 от root, без systemd: служба после установки не запустилась, Caddy запускали командами. У проекта есть официальный образ Docker caddy, его мы не запускали.
1. Проверь, не стоит ли программа уже: caddy version ; which -a caddy. Если стоит и запускается, ничего не ставь и переходи к шагу 5.
2. Обязательных зависимостей у программы нет, то, что нужно в отдельных случаях, перечислено выше. Проверь свободное место на диске: нужно apt в прогоне скачал пакет caddy размером 18,1 МБ и написал «52.0 MB of additional disk space will be used», сам файл /usr/bin/caddy 51 953 826 байт. В архиве для Mac на Apple Silicon файл caddy 50 195 026 байт, в архиве для Windows x64 caddy.exe 53 159 936 байт. Сертификаты и ключи Caddy хранит в своей папке данных, после локального сертификата в прогоне она заняла 3 524 байт..
3. Составь план: каким одним способом из списка ниже будешь ставить, что появится на диске и сколько места займёт, что поменяется в системе и как потом удалить. Покажи план и жди моего «да».
Способы из официальных источников:
- macOS, готовый файл с GitHub: mkdir -p ~/.local/bin && curl -fsSL -o /tmp/caddy.tgz https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_mac_arm64.tar.gz && echo "68f592df8f0ec058fbdb9b137b64e9a0aa792d28c06e1e3b9ec12d0e7fb371683a54e73ef6d8e6d0dd70dc6b941a5b5d5b73faedd3f89de119ad2eb78bdc668e /tmp/caddy.tgz" | shasum -a 512 -c - && tar -xzf /tmp/caddy.tgz -C ~/.local/bin caddy && rm /tmp/caddy.tgz (это архив для Apple Silicon, для Intel на странице выпуска лежит caddy_2.11.7_mac_amd64.tar.gz, суммы SHA-512 в файле caddy_2.11.7_checksums.txt. Способ «готовый файл» официальный по странице установки. Команда кладёт один файл caddy в ~/.local/bin, эта папка должна быть в PATH. Homebrew страница установки называет способом, который поддерживает сообщество. На Mac мы не проверяли)
- Windows, готовый файл с GitHub: Invoke-WebRequest -Uri https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_windows_amd64.zip -OutFile caddy.zip; if ((Get-FileHash caddy.zip -Algorithm SHA512).Hash -ne 'c308154504e53755958ffc62d8a2657ab17eefd6dd25c45dbb2c3d93d29519971f77ca652f7d0f2bcb7f980b9ba3822478865e29969d0272d7613550a43152b1') { throw 'sum mismatch' }; Expand-Archive caddy.zip -DestinationPath $env:LOCALAPPDATA\caddy; Remove-Item caddy.zip (архив для x64, сумму SHA-512 мы взяли из caddy_2.11.7_checksums.txt и сверили со скачанным файлом. caddy.exe окажется в папке %LOCALAPPDATA%\caddy, её нужно добавить в PATH или звать программу полным путём. Chocolatey и Scoop страница установки называет способами сообщества. На Windows мы не проверяли)
- Linux, apt, репозиторий проекта: sudo apt install --yes debian-keyring debian-archive-keyring apt-transport-https curl && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list && sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg /etc/apt/sources.list.d/caddy-stable.list && sudo apt update && sudo apt install caddy (так на странице установки для Debian, Ubuntu и Raspbian, мы ставили ровно этими командами от root, установка заняла 23 секунды. Пакет создаёт пользователя caddy, папку /var/log/caddy и файл /etc/caddy/Caddyfile, при работающем systemd включает и запускает службу caddy. Для Fedora и RHEL на той же странице команды dnf copr, их мы не проверяли)
4. Установи по согласованному плану. Если что-то идёт не так, как в плане, остановись и спроси.
5. Проверь результат:
- caddy version: программа запускается без ошибки;
- Сделай папку site с двумя страницами HTML и файлом CSS. Раздай её командой caddy file-server на 127.0.0.1:8080 и сверь страницы с файлами и ответ 404. Потом напиши Caddyfile для localhost:8443 с skip_install_trust, encode gzip, заголовком X-Test и file_server, проверь его caddy validate, запусти caddy run и сверь страницу по HTTPS с корневым сертификатом Caddy, сжатие CSS, перенаправление с HTTP и то, что хранилище доверенных сертификатов системы осталось прежним. Остановись командой caddy stop и проверь, что ошибка в Caddyfile даёт код 1. Делай это во временной папке и не трогай мои файлы.
caddy version
caddy file-server --root site --listen 127.0.0.1:8080
caddy fmt --overwrite Caddyfile
caddy validate --config Caddyfile
caddy adapt --config Caddyfile --pretty
caddy run --config Caddyfile
caddy stop
caddy validate --config Broken --adapter caddyfile
- если ты работаешь в папке моего проекта, покажи git status: от установки в проекте не должно появиться изменений.
6. Итог одним сообщением: что установлено, какой версии и куда, сколько места заняло, что поменялось в системе и как всё удалить (macOS, готовый файл с GitHub: rm -f ~/.local/bin/caddy; Windows, готовый файл с GitHub: Remove-Item -Recurse $env:LOCALAPPDATA\caddy; Linux, apt, репозиторий проекта: sudo apt purge caddy && sudo rm -f /etc/apt/sources.list.d/caddy-stable.list /usr/share/keyrings/caddy-stable-archive-keyring.gpg).
Если на любом шаге ошибка, не чини наугад: покажи текст ошибки и скажи, что, по-твоему, случилось. Частые проблемы: https://smyslokod.ru/cli/caddy#problemyПромпт собран из официальных инструкций, сверенных 13.10.2026. Агент сначала проверит, что уже стоит, покажет план с местом на диске и способом удаления и без твоего «да» ничего не поставит.
Как ставят вручную
Способы из официальных источников, у каждого ссылка на первоисточник.
macOS · готовый файл с GitHub · источник
mkdir -p ~/.local/bin && curl -fsSL -o /tmp/caddy.tgz https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_mac_arm64.tar.gz && echo "68f592df8f0ec058fbdb9b137b64e9a0aa792d28c06e1e3b9ec12d0e7fb371683a54e73ef6d8e6d0dd70dc6b941a5b5d5b73faedd3f89de119ad2eb78bdc668e /tmp/caddy.tgz" | shasum -a 512 -c - && tar -xzf /tmp/caddy.tgz -C ~/.local/bin caddy && rm /tmp/caddy.tgz
это архив для Apple Silicon, для Intel на странице выпуска лежит caddy_2.11.7_mac_amd64.tar.gz, суммы SHA-512 в файле caddy_2.11.7_checksums.txt. Способ «готовый файл» официальный по странице установки. Команда кладёт один файл caddy в ~/.local/bin, эта папка должна быть в PATH. Homebrew страница установки называет способом, который поддерживает сообщество. На Mac мы не проверяли
Windows · готовый файл с GitHub · источник
Invoke-WebRequest -Uri https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_windows_amd64.zip -OutFile caddy.zip; if ((Get-FileHash caddy.zip -Algorithm SHA512).Hash -ne 'c308154504e53755958ffc62d8a2657ab17eefd6dd25c45dbb2c3d93d29519971f77ca652f7d0f2bcb7f980b9ba3822478865e29969d0272d7613550a43152b1') { throw 'sum mismatch' }; Expand-Archive caddy.zip -DestinationPath $env:LOCALAPPDATA\caddy; Remove-Item caddy.zip
архив для x64, сумму SHA-512 мы взяли из caddy_2.11.7_checksums.txt и сверили со скачанным файлом. caddy.exe окажется в папке %LOCALAPPDATA%\caddy, её нужно добавить в PATH или звать программу полным путём. Chocolatey и Scoop страница установки называет способами сообщества. На Windows мы не проверяли
Linux · apt, репозиторий проекта · источник
sudo apt install --yes debian-keyring debian-archive-keyring apt-transport-https curl && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list && sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg /etc/apt/sources.list.d/caddy-stable.list && sudo apt update && sudo apt install caddy
так на странице установки для Debian, Ubuntu и Raspbian, мы ставили ровно этими командами от root, установка заняла 23 секунды. Пакет создаёт пользователя caddy, папку /var/log/caddy и файл /etc/caddy/Caddyfile, при работающем systemd включает и запускает службу caddy. Для Fedora и RHEL на той же странице команды dnf copr, их мы не проверяли
Как удалить
- macOS, готовый файл с GitHub:
rm -f ~/.local/bin/caddy - Windows, готовый файл с GitHub:
Remove-Item -Recurse $env:LOCALAPPDATA\caddy - Linux, apt, репозиторий проекта:
sudo apt purge caddy && sudo rm -f /etc/apt/sources.list.d/caddy-stable.list /usr/share/keyrings/caddy-stable-archive-keyring.gpg
Что нужно для работы
- Свой домен и открытые порты 80 и 443 (в отдельных случаях) - нужны только для сертификата, которому доверяют все браузеры: по документации записи DNS домена должны указывать на сервер до запуска Caddy
Системы
- macOS - готовые архивы для Apple Silicon и Intel на странице выпуска. На Mac мы не проверяли.
- Windows - готовые архивы для x64 и ARM64 на странице выпуска. На Windows мы не проверяли.
- Linux - мы проверяли на Ubuntu 24.04 x86-64 через репозиторий apt проекта. Пакеты есть для Debian, Ubuntu, Raspbian, Fedora, RHEL, Arch, готовые архивы на странице выпуска для x86-64, ARM и других архитектур.
Где запускать
Ставить нужно туда, где работает агент: на твой компьютер, сервер или в контейнер.
- На сервере - основное место: сайт на своём сервере с доменом. Пакет apt по документации сразу запускает службу caddy от отдельного пользователя caddy.
- На компьютере - показать собранный сайт по адресу localhost, в том числе по HTTPS. По документации при первом выпуске локального сертификата Caddy сам пытается поставить свой корневой сертификат в хранилище доверенных сертификатов, без прав может спросить пароль. Чтобы хранилище не трогать, заранее задай в Caddyfile skip_install_trust, как в нашем прогоне.
- В контейнере - мы проверяли в контейнере Ubuntu 24.04 от root, без systemd: служба после установки не запустилась, Caddy запускали командами. У проекта есть официальный образ Docker caddy, его мы не запускали.
Сколько ресурсов нужно
- Место на диске
- Apt в прогоне скачал пакет caddy размером 18,1 МБ и написал «52.0 MB of additional disk space will be used», сам файл /usr/bin/caddy 51 953 826 байт. В архиве для Mac на Apple Silicon файл caddy 50 195 026 байт, в архиве для Windows x64 caddy.exe 53 159 936 байт. Сертификаты и ключи Caddy хранит в своей папке данных, после локального сертификата в прогоне она заняла 3 524 байт.
- Память
- Память мы не мерили.
- Видеокарта
- Прогон шёл в контейнере без видеокарты, вся задача прошла на процессоре.
- Сеть
- Установка через apt ходит в сеть: в прогоне netwatch записал dl.cloudsmith.io (13.227.173.x и адреса 2600:9000:21f7:..., CloudFront), archive.ubuntu.com и security.ubuntu.com (91.189.91.x, 91.189.92.x, 185.125.190.x) и deb.nodesource.com (104.20.45.190, 172.66.150.169). Последний источник был настроен в образе нашей песочницы заранее, к Caddy он отношения не имеет. Адрес 127.0.0.11:53 принадлежит DNS внутри контейнера. Во время работы с localhost внешних соединений не было, записаны только 127.0.0.1:53 и ::1:53: так Go, на котором написан Caddy, проверяет маршрут к адресу без отправки пакетов. С доменом по документации Caddy обращается к центрам сертификации Let's Encrypt или ZeroSSL, а сайт открыт всем на портах 80 и 443.
Лицензия и платные замены
Лицензия Apache-2.0. Свободная лицензия, текст лежит в репозитории и в архиве выпуска. Официальные пакеты собраны только со стандартными модулями. Текст лицензии
Цена: Бесплатно. Программа бесплатная, лицензия Apache-2.0.
Платные замены
- NGINX Plus (F5) - Платная версия NGINX от F5, в ней балансировка нагрузки, обратный прокси, API-шлюз и раздача содержимого. По описанию F5 она добавляет к бесплатному NGINX возможности для крупных компаний. Цены на странице продукта нет.
Бесплатные замены
- python -m http.server - Встроенный в Python простой сервер файлов из текущей папки, командой python -m http.server раздаёт их по HTTP. Документация Python не советует его для работы в интернете.
О чём помнить
- Безопасность. Агент запускает caddy в терминале сам (exec). Программа читает Caddyfile и файлы из папки root (read) и раздаёт эти файлы по сети (acts): на сервере с доменом всё содержимое папки root увидит любой посетитель. Сертификаты, ключи и последнюю настройку Caddy пишет в свои папки, на Linux ~/.local/share/caddy и ~/.config/caddy (write). Команда caddy fmt --overwrite переписывает Caddyfile, caddy upgrade заменяет сам файл программы, apt purge стирает /etc/caddy и /var/lib/caddy вместе с сертификатами службы (acts). Входа в учётные записи и ключей программа не просит.
- Пакет apt при работающем systemd сразу включает и запускает службу caddy: по стандартному Caddyfile сервер слушает порт 80. Ставь его на сервер, где этот порт свободен, или останавливай службу после установки.
- Для localhost Caddy заводит свой центр сертификации и при первом запуске пытается поставить его корневой сертификат в хранилище доверенных сертификатов компьютера, по документации может спросить пароль. В прогоне мы это отключили настройкой skip_install_trust. Хранилище осталось прежним, curl без этого сертификата отказал с ошибкой 60. Снять доверие можно командой caddy untrust.
- У запущенного Caddy по документации открыта админка на localhost:2019: через неё меняют настройку и останавливают сервер, в прогоне GET /config/ отдал текущую настройку. Документация советует защитить админку, если на сервере выполняется код, которому вы не доверяете. caddy file-server админку не включает.
- Сертификат для домена мы не получали: в песочнице нет домена и открытых портов. По документации при неудаче Caddy повторяет попытки с растущей паузой до суток между ними, до 30 дней.
Частые проблемы
curl: (60) SSL certificate problem, когда открываешь localhost по HTTPS
Клиент не доверяет локальному центру сертификации Caddy. В прогоне так вышло, когда установку корневого сертификата отключили. Передай клиенту корневой сертификат из ~/.local/share/caddy/pki/authorities/local/root.crt (у curl ключ --cacert) или по «да» поставь его в систему командой caddy trust.
adapting config using caddyfile: Broken:2: unrecognized directive: file_servr
Опечатка в имени директивы Caddyfile. caddy validate вернул код 1 и показал файл и строку. Исправь директиву в указанной строке и снова запусти caddy validate.
Ошибка прав (permissions error) при запуске caddy file-server
file-server по умолчанию слушает порт 80. По документации такая ошибка, вероятно, значит, что система запрещает этому пользователю занимать низкие порты. Задай высокий порт, например caddy file-server --listen :2015.
Проверка
✓ Проверено 13.10.2026: Ubuntu 24.04 (x86_64) в одноразовом контейнере Docker на сервере, от root, без systemd: Caddy 2.11.7 из репозитория apt проекта.
- Когда
- 13.10.2026
- Среда
- Ubuntu 24.04 (x86_64) в одноразовом контейнере Docker на сервере, от root, без systemd: Caddy 2.11.7 из репозитория apt проекта
- Объём
- Установили и прогнали задачу на тестовых данных
- Что именно сделали
- Одноразовый контейнер Ubuntu 24.04 без данных и ключей. Поставили Caddy командами со страницы установки: ключ и список репозитория Cloudsmith, apt update, apt install caddy. caddy version вывел v2.11.7.
- Скрипт прогона сам сделал папку site с двумя страницами HTML и файлом CSS и записал их контрольные суммы.
- caddy file-server раздал папку на 127.0.0.1:8080: обе страницы совпали с файлами, на несуществующую страницу пришёл ответ 404.
- Написали Caddyfile для localhost:8443 с отключённой установкой корневого сертификата, сжатием gzip и заголовком X-Test. caddy validate ответил «Valid configuration».
- Запустили caddy run. Через 372 мс главная страница пришла по HTTPS и совпала с файлом, заголовок X-Test на месте, сертификат подписал локальный центр Caddy. CSS пришёл в gzip (129 байт вместо 11 600) и после распаковки совпал с исходным. Без корневого сертификата curl отказал с кодом 60, запрос по HTTP получил перенаправление 308.
- Хранилище доверенных сертификатов Ubuntu осталось прежним. Админка на localhost:2019 отдала текущую настройку, caddy stop остановил сервер.
- Caddyfile с опечаткой в директиве дал код 1 с номером строки. Файлы сайта после всех шагов совпали по sha256, во время работы внешних соединений не было. Каждый результат скрипт сверил сам и только после этого напечатал TASK_OK.
- Удалили пакет командой apt purge caddy, убрали список репозитория и ключ, проверили, что команда caddy больше не находится и пользователя caddy нет. Контейнер после прогона удалён.
| Дата | Версия | Объём | Где | Итог |
|---|---|---|---|---|
| 13.10.2026 | 2.11.7 | задача | контейнер, Linux | получилось |
«Проверено» ставим, только когда сами поставили программу и прогнали её на задаче. Сверка ссылок и вывод версии так не называются.
Похожие программы
Программу делают её авторы. Мы сверяем официальные источники и описываем, что ей нужно, но код остаётся чужим. Перед установкой посмотри план агента: что он поставит и что поменяет в системе.