
Быстрый и расширяемый многоплатформенный веб-сервер HTTP/1-2-3 с автоматическим HTTPS
<p align="center"> <a href="https://caddyserver.com"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/1d6be89c-df8a-438c-b01d-cef6bf56440a"> <source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/3a5b7419-6925-48f6-ae75-d231f4a4f0c2"> <img src="https://github.com/user-attachments/assets/3a5b7419-6925-48f6-ae75-d231f4a4f0c2" alt="Caddy" width="550"> </picture> </a> <br> <h3 align="center">проект <a href="https://zerossl.com"><img src="https://user-images.githubusercontent.com/55066419/208327323-2770dc16-ec09-43a0-9035-c5b872c2ad7f.svg" height="28" style="vertical-align: -7.7px" valign="middle"></a></h3> </p> <hr> <h3 align="center">Каждый сайт на HTTPS</h3> <p align="center">Caddy — это расширяемая серверная платформа, по умолчанию использующая TLS.</p> <p align="center"> <a href="https://github.com/caddyserver/caddy/releases">Релизы</a> · <a href="https://caddyserver.com/docs/">Документация</a> · <a href="https://caddy.community">Получить помощь</a> </p> <p align="center"> <a href="https://github.com/caddyserver/caddy/actions/workflows/ci.yml"><img src="https://github.com/caddyserver/caddy/actions/workflows/ci.yml/badge.svg"></a> <a href="https://www.bestpractices.dev/projects/7141"><img src="https://www.bestpractices.dev/projects/7141/badge"></a> <a href="https://pkg.go.dev/github.com/caddyserver/caddy/v2"><img src="https://img.shields.io/badge/godoc-reference-%23007d9c.svg"></a> <a href="https://x.com/caddyserver" title="@caddyserver on Twitter"><img src="https://img.shields.io/twitter/follow/caddyserver" alt="@caddyserver on Twitter"></a> <a href="https://caddy.community" title="Caddy Forum"><img src="https://img.shields.io/badge/community-forum-ff69b4.svg" alt="Caddy Forum"></a> <br> <a href="https://sourcegraph.com/github.com/caddyserver/caddy?badge" title="Caddy on Sourcegraph"><img src="https://sourcegraph.com/github.com/caddyserver/caddy/-/badge.svg" alt="Caddy on Sourcegraph"></a> <a href="https://cloudsmith.io/~caddy/repos/"><img src="https://img.shields.io/badge/OSS%20hosting%20by-cloudsmith-blue?logo=cloudsmith" alt="Cloudsmith"></a> </p> <p align="center"> <b>Работает на</b> <br> <a href="https://github.com/caddyserver/certmagic"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/55066419/206946718-740b6371-3df3-4d72-a822-47e4c48af999.png"> <source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/1128849/49704830-49d37200-fbd5-11e8-8385-767e0cd033c3.png"> <img src="https://user-images.githubusercontent.com/1128849/49704830-49d37200-fbd5-11e8-8385-767e0cd033c3.png" alt="CertMagic" width="250"> </picture> </a> </p> <!-- Warp sponsorship requests this section --> <div align="center" markdown="1"> <hr> <sup>Особая благодарность:</sup> <br> <a href="https://go.warp.dev/caddy"> <img alt="Warp sponsorship" width="400" src="https://github.com/user-attachments/assets/c8efffde-18c7-4af4-83ed-b1aba2dda394"> </a> ### [Warp, создан для программирования с несколькими AI-агентами](https://go.warp.dev/caddy) [Доступно для MacOS, Linux и Windows](https://go.warp.dev/caddy)<br> </div> <hr> ### Содержание - [Возможности](#features) - [Установка](#install) - [Сборка из исходников](#build-from-source) - [Для разработки](#for-development) - [С информацией о версии и/или плагинами](#with-version-information-andor-plugins) - [Быстрый старт](#quick-start) - [Обзор](#overview) - [Полная документация](#full-documentation) - [Получение помощи](#getting-help) - [О проекте](#about) ## [Возможности](https://caddyserver.com/features) - **Простая конфигурация** с помощью [Caddyfile](https://caddyserver.com/docs/caddyfile) - **Мощная конфигурация** с помощью [собственного JSON-конфига](https://caddyserver.com/docs/json/) - **Динамическая конфигурация** через [JSON API](https://caddyserver.com/docs/api) - [**Адаптеры конфигурации**](https://caddyserver.com/docs/config-adapters), если вам не нравится JSON - **Автоматический HTTPS** по умолчанию - [ZeroSSL](https://zerossl.com) и [Let's Encrypt](https://letsencrypt.org) для публичных имён - Полностью управляемый локальный CA для внутренних имён и IP-адресов - Может координироваться с другими экземплярами Caddy в кластере - Резервное использование нескольких издателей - Поддержка Encrypted ClientHello (ECH) - **Остаётся в строю, когда другие серверы падают** из-за проблем с TLS/OCSP/сертификатами - **Готов к продакшену** после обслуживания триллионов запросов и управления миллионами TLS-сертификатов - **Масштабируется до сотен тысяч сайтов**, что доказано в продакшене - **HTTP/1.1, HTTP/2 и HTTP/3** поддерживаются по умолчанию - **Легко расширяемая** [модульная архитектура](https://caddyserver.com/docs/architecture) позволяет Caddy делать что угодно без раздувания - **Работает везде** без **внешних зависимостей** (даже без libc) - Написан на Go — языке с более высокими **гарантиями безопасности памяти**, чем у других серверов - **На самом деле им приятно пользоваться** - И многое другое, что можно [открыть](https://caddyserver.com/features) ## Установка Самый простой кроссплатформенный способ начать работу — скачать Caddy с [GitHub Releases](https://github.com/caddyserver/caddy/releases) и поместить исполняемый файл в ваш PATH. Другие инструкции по установке см. в [нашей онлайн-документации](https://caddyserver.com/docs/install). ## Сборка из исходников Требования: - [Go 1.25.0 или новее](https://golang.org/dl/) ### Для разработки _**Примечание:** Эти шаги [не встроят правильную информацию о версии](https://github.com/golang/go/issues/29228). Для этого следуйте инструкциям в следующем разделе._ ```bash $ git clone "https://github.com/caddyserver/caddy.git" $ cd caddy/cmd/caddy/ $ go build ``` Когда вы запускаете Caddy, он может пытаться привязаться к низким портам, если иное не указано в вашей конфигурации. Если ваша ОС требует повышенных привилегий для этого, вам нужно будет дать вашему новому бинарному файлу разрешение на это. В Linux это можно легко сделать с помощью: `sudo setcap cap_net_bind_service=+ep ./caddy` Если вы предпочитаете использовать `go run`, который создаёт только временные бинарники, вы всё равно можете сделать это с помощью прилагаемого `setcap.sh` следующим образом: ```bash $ go run -exec ./setcap.sh main.go ``` Если вы не хотите вводить пароль для `setcap`, используйте `sudo visudo` для редактирования вашего файла sudoers и разрешите вашей учётной записи выполнять эту команду без пароля, например: ``` username ALL=(ALL:ALL) NOPASSWD: /usr/sbin/setcap ``` заменив `username` на ваше фактическое имя пользователя. Будьте осторожны и делайте это, только если вы знаете, что делаете! Мы можем только задокументировать, как использовать Caddy, а не инструменты Go или ваш компьютер, и мы предоставляем эти инструкции только для удобства; пожалуйста, научитесь пользоваться своим компьютером на свой страх и риск и вносите любые необходимые корректировки. Затем вы можете запустить тесты во всех модулях или в конкретном: ```bash $ go test ./... $ go test ./modules/caddyhttp/tracing/ ``` ### С информацией о версии и/или плагинами Используя [наш инструмент сборки, `xcaddy`](https://github.com/caddyserver/xcaddy)... ```bash $ xcaddy build ``` ...следующие шаги автоматизированы: 1. Создайте новую папку: `mkdir caddy` 2. Перейдите в неё: `cd caddy` 3. Скопируйте [main.go от Caddy](https://github.com/caddyserver/caddy/blob/master/cmd/caddy/main.go) в пустую папку. Добавьте импорты для любых пользовательских плагинов, которые вы хотите добавить. 4. Инициализируйте модуль Go: `go mod init caddy` 5. (Опционально) Зафиксируйте версию Caddy: `go get github.com/caddyserver/caddy/v2@version`, заменив `version` на git-тег, коммит или имя ветки. 6. (Опционально) Добавьте плагины, добавив их импорт: `_ "import/path/here"` 7. Скомпилируйте: `go build -tags=nobadger,nomysql,nopgx` ## Быстрый старт На [сайте Caddy](https://caddyserver.com/docs/) есть документация, включающая руководства, руководства по быстрому старту, справочную информацию и многое другое. **Мы рекомендуем всем пользователям, независимо от уровня опыта, пройти наше [руководство по началу работы](https://caddyserver.com/docs/getting-started), чтобы ознакомиться с использованием Caddy.** Если у вас есть всего минута, [на сайте есть несколько руководств по быстрому старту](https://caddyserver.com/docs/quick-starts) на выбор! Однако после прохождения одного из них, пожалуйста, прочитайте больше документации, чтобы понять, как работает программное обеспечение. 🙂 ## Обзор Caddy чаще всего используется как HTTPS-сервер, но он подходит для любой долго работающей программы на Go. Прежде всего, это платформа для запуска Go-приложений. «Приложения» Caddy — это просто программы на Go, реализованные как модули Caddy. Два приложения — `tls` и `http` — поставляются стандартно с Caddy. Приложения Caddy мгновенно получают выгоду от [автоматизированной документации](https://caddyserver.com/docs/json/), изящного онлайн-[изменения конфигурации через API](https://caddyserver.com/docs/api) и унификации с другими приложениями Caddy. Хотя [JSON](https://caddyserver.com/docs/json/) является родным языком конфигурации Caddy, Caddy может принимать входные данные от [адаптеров конфигурации](https://caddyserver.com/docs/config-adapters), которые могут преобразовывать практически любой формат конфигурации по вашему выбору в JSON: Caddyfile, JSON 5, YAML, TOML, конфиг NGINX и другие. Основной способ настройки Caddy — через [его API](https://caddyserver.com/docs/api), но если вы предпочитаете файлы конфигурации, [интерфейс командной строки](https://caddyserver.com/docs/command-line) также их поддерживает. Caddy предоставляет беспрецедентный уровень контроля по сравнению с любым существующим веб-сервером. В Caddy вы обычно устанавливаете фактические значения инициализированных типов в памяти, которые управляют всем — от ваших HTTP-обработчиков и TLS-рукопожатий до вашего носителя данных. Caddy также невероятно расширяем, с мощной системой плагинов, которая значительно превосходит другие веб-серверы. Чтобы использовать мощь этой конструкции, вам нужно знать, как структурирован документ конфигурации. Пожалуйста, посетите [наш сайт документации](https://caddyserver.com/docs/) для получения подробной информации о [структуре конфигурации Caddy](https://caddyserver.com/docs/json/). Почти вся конфигурация Caddy содержится в одном документе конфигурации, а не разбросана по флагам CLI, переменным окружения и файлу конфигурации, как на других веб-серверах. Это делает управление конфигурацией вашего сервера более простым и уменьшает количество скрытых переменных/факторов. ## Полная документация На нашем сайте есть полная документация: **https://caddyserver.com/docs/** Документация также имеет открытый исходный код. Вы можете внести свой вклад здесь: https://github.com/caddyserver/website ## Получение помощи - Мы советуем компаниям, использующим Caddy, заключить контракт на поддержку через [Ardan Labs](https://www.ardanlabs.com) до того, как возникнет необходимость. - [Спонсорство](https://github.com/sponsors/mholt) имеет большое значение! Мы можем предложить частную помощь спонсорам. Если Caddy приносит пользу вашей компании, пожалуйста, рассмотрите возможность спонсорства. Это не только помогает финансировать работу на полную ставку для обеспечения долгосрочности проекта, но и предоставляет вашей компании ресурсы, поддержку и скидки, которые вам нужны; а также отлично выглядит для вашей компании в глазах ваших клиентов и потенциальных клиентов! - Частные лица могут бесплатно обмениваться помощью на нашем форуме сообщества по адресу https://caddy.community. Помните, что люди помогают в свободное время и из доброй воли. Лучший способ получить помощь — сначала помочь другим! Пожалуйста, используйте наш [трекер задач](https://github.com/caddyserver/caddy/issues) только для отчётов об ошибках и запросов функций, т.е. действенных пунктов разработки (вопросы поддержки обычно будут перенаправляться на форумы). ## О проекте Мэттью Холт начал разрабатывать Caddy в 2014 году, изучая компьютерные науки в Университете Бригама Янга. (Название «Caddy» было выбрано потому, что это программное обеспечение помогает с утомительными, рутинными задачами обслуживания веб-сайтов, а также является единым местом для организации нескольких вещей вместе.) Вскоре он стал первым веб-сервером, который автоматически и по умолчанию использовал HTTPS, и теперь имеет сотни участников и обслужил триллионы HTTPS-запросов. **Название «Caddy» является товарным знаком.** Название программного обеспечения — «Caddy», а не «Caddy Server» или «CaddyServer». Пожалуйста, называйте его «Caddy» или, если хотите уточнить, «веб-сервер Caddy». Caddy является зарегистрированным товарным знаком Stack Holdings GmbH. - _Проект в X: [@caddyserver](https://x.com/caddyserver)_ - _Автор в X: [@mholt6](https://x.com/mholt6)_ Caddy — проект [ZeroSSL](https://zerossl.com), компании HID Global. Хостинг репозитория пакетов Debian любезно предоставлен [Cloudsmith](https://cloudsmith.com). Cloudsmith — это единственное полностью облачное, универсальное решение для управления пакетами, которое позволяет вашей организации создавать, хранить и обмениваться пакетами в любом формате, в любом месте, с полной уверенностью.