Spec-Zone.ru › Caddy

Запуск Caddy

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

  • Служба Linux
    • Файлы единиц
    • Установка вручную
    • Использование службы
    • HTTPS для локальной среды
    • Настройки
      • Переменные окружения
      • run и reload настройка
      • Перезапуск при сбое
    • Учет SELinux
  • Служба Windows
    • sc.exe
    • WinSW
  • Docker Compose
    • Настройка
    • Использование
    • HTTPS для локальной среды

Служба Linux

Рекомендуемый способ запуска Caddy на дистрибутивах Linux с systemd — использование официальных файлов единиц systemd.

Файлы единиц

Мы предоставляем два разных файла единиц systemd, из которых вы можете выбрать, в зависимости от вашего случая:

  • caddy.service, если вы настраиваете Caddy с помощью файла Caddyfile. Если вы предпочитаете использовать другой адаптер конфигурации или файл конфигурации JSON, вы можете изменить настройки команды ExecStart и ExecReload.

  • caddy-api.service, если вы настраиваете Caddy исключительно через его API. Эта служба использует параметр --resume, который запустит Caddy с использованием autosave.json, который по умолчанию сохраняется.

Они очень похожи, но различаются в командах ExecStart и ExecReload для адаптации к рабочим процессам.

Если вам нужно переключаться между службами, вы должны отключить и остановить предыдущую, прежде чем включить и запустить другую. Например, для переключения со службы caddy на службу caddy-api:

sudo systemctl disable --now caddy
sudo systemctl enable --now caddy-api

Установка вручную

Некоторые способы установки автоматически настраивают Caddy для работы в качестве службы. Если вы выбрали метод, который этого не сделал, вы можете выполнить эти инструкции:

Требования:

  • caddy двоичный файл, который вы скачали или составили из исходного кода
  • systemctl --version 232 или более поздняя версия
  • sudo права

Переместите двоичный файл caddy в свой $PATH, например:

sudo mv caddy /usr/bin/

Проверьте, что это сработало:

caddy version

Создайте группу с именем caddy:

sudo groupadd --system caddy

Создайте пользователя с именем caddy с записываемым домашним каталогом:

sudo useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy web server" \
    caddy

Если вы используете файл конфигурации, убедитесь, что он доступен для чтения пользователем caddy, которого вы только что создали.

Далее, выберите файл единицы systemd в зависимости от вашего случая.

Проверьте директивы ExecStart и ExecReload. Убедитесь, что местоположение двоичного файла и аргументы командной строки соответствуют вашей установке! Например: если вы используете файл конфигурации, измените путь к вашему --config, если он отличается от значений по умолчанию.

Обычно файл службы сохраняется в: /etc/systemd/system/caddy.service

После сохранения файла службы вы можете впервые запустить службу с обычным действием systemctl:

sudo systemctl daemon-reload
sudo systemctl enable --now caddy

Проверьте, что она запущена:

systemctl status caddy

Теперь вы готовы использовать эту службу!

Использование службы

Если вы используете Caddyfile, вы можете редактировать конфигурацию с помощью nano, vi или вашего предпочтительного редактора:

sudo nano /etc/caddy/Caddyfile

Вы можете поместить файлы своего статического сайта в /var/www/html или /srv. Убедитесь, что пользователь caddy имеет разрешения на чтение файлов.

Чтобы проверить, что служба запущена:

systemctl status caddy

Команда status также покажет расположение текущего файла работающей службы.

При работе с нашим официальным файлом службы вывод Caddy будет перенаправлен в journalctl. Для чтения полных логов и предотвращения обрезки строк:

journalctl -u caddy --no-pager | less +G

Если вы используете файл конфигурации, вы можете перезагрузить Caddy после внесения любых изменений:

sudo systemctl reload caddy

Вы можете остановить службу командой:

sudo systemctl stop caddy

Не останавливайте службу для изменения конфигурации Caddy. Остановка сервера приведет к простоям. Используйте команду reload вместо этого.

Процесс Caddy будет выполняться как пользователь caddy, у которого установлен $HOME на /var/lib/caddy. Это означает:

  • Стандартное расположение хранения данных (для сертификатов и другой служебной информации) будет в /var/lib/caddy/.local/share/caddy.
  • Стандартное расположение хранения конфигурации (для автоматически сохраненной конфигурации JSON, в основном полезной для службы caddy-api) будет в /var/lib/caddy/.config/caddy.

HTTPS для локальной среды

При использовании Caddy для локального разработки с HTTPS вы можете использовать имя хоста, например, localhost или app.localhost. Это включает HTTPS для локальной среды с использованием локального CA для выпуска сертификатов.

Поскольку Caddy запускается как пользователь caddy при работе в качестве службы, у него не будет разрешений на установку сертификата корневого CA в хранилище доверенных сертификатов системы. Для этого запустите sudo caddy trust для установки.

Если вы хотите, чтобы другие устройства подключались к вашему серверу при использовании internal issuer, вам также нужно установить сертификат корневого CA на этих устройствах. Вы можете найти сертификат корневого CA в /var/lib/caddy/.local/share/caddy/pki/authorities/local/root.crt. Многие веб-браузеры теперь используют собственное хранилище доверенных сертификатов (игнорируя хранилище системы), поэтому вам также может потребоваться вручную установить сертификат.

Настройки

Лучший способ изменить аспекты файлов службы — использовать эту команду:

sudo systemctl edit caddy

Это откроет пустой файл с вашим текстовым редактором по умолчанию, в котором вы можете изменить или добавить директивы в определение единицы. Этот файл называется файлом «drop-in».

Переменные окружения

Если вам нужно определить переменные окружения для использования в конфигурации, вы можете сделать это так:

[Service]
Environment="CF_API_TOKEN=super-secret-cloudflare-tokenvalue"

Аналогично, если вы предпочитаете хранить переменные окружения в отдельном файле (envfile), вы можете использовать директиву EnvironmentFile следующим образом:

[Service]
EnvironmentFile=/etc/caddy/.env

Тогда ваш файл /etc/caddy/.env может выглядеть так (не используйте " кавычки вокруг значений):

CF_API_TOKEN=super-secret-cloudflare-tokenvalue

run и reload настройка

Если вам нужно изменить файл конфигурации с по умолчанию Caddyfile на файл JSON (обратите внимание, что директивы Exec* должны быть сброшены на пустые строки, прежде чем установить новое значение):

[Service]
ExecStart=
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/caddy.json
ExecReload=
ExecReload=/usr/bin/caddy reload --config /etc/caddy/caddy.json

Перезапуск при сбое

Если вы хотите, чтобы caddy перезапустился через 5 секунд после непредвиденного сбоя:

[Service]
# Automatically restart caddy if it crashes except if the exit code was 1
RestartPreventExitStatus=1
Restart=on-failure
RestartSec=5s

Затем сохраните файл и выйдите из текстового редактора, и перезапустите службу, чтобы изменения вступили в силу:

sudo systemctl restart caddy

Учет SELinux

В системах с включенным SELinux у вас есть два варианта:

  1. Установите Caddy с помощью COPR repo. Ваш файл systemd и двоичный файл caddy уже будут созданы и правильно помечены (поэтому вы можете пропустить этот раздел). Если вы хотите использовать пользовательскую сборку Caddy, вам нужно будет пометить исполняемый файл, как описано ниже.

  2. Скачайте Caddy с этого сайта или скомпилируйте его с помощью xcaddy. В любом случае вам нужно будет пометить файлы самостоятельно.

Файлы единиц systemd и их исполняемые файлы не будут запущены, если не помечены systemd_unit_file_t и bin_t соответственно.

Метка systemd_unit_file_t автоматически применяется к файлам, созданным в /etc/systemd/..., поэтому обязательно создайте свой файл caddy.service там, как указано в инструкциях по ручной установке.

Чтобы пометить двоичный файл caddy, вы можете использовать следующую команду:

semanage fcontext -a -t bin_t /usr/bin/caddy && restorecon -Rv /usr/bin/caddy

Служба Windows

Существует два способа запуска Caddy в качестве службы в Windows: sc.exe или WinSW.

sc.exe

Для создания службы выполните:

sc.exe create caddy start= auto binPath= "YOURPATH\caddy.exe run"

(замените YOURPATH на фактический путь к вашему caddy.exe)

Для запуска:

sc.exe start caddy

Для остановки:

sc.exe stop caddy

WinSW

Установите Caddy в качестве службы в Windows с помощью этих инструкций.

Требования:

  • caddy.exe двоичный файл, который вы скачали или составили из исходного кода
  • Любая .exe из последней версии WinSW оболочки службы (ниже приведённая конфигурация службы написана для релизов v2.x)

Поместите все файлы в каталог службы. В следующих примерах мы используем C:\caddy.

Переименуйте файл WinSW-x64.exe в caddy-service.exe.

Добавьте файл caddy-service.xml в тот же каталог:

<service>
  <id>caddy</id>
  <!-- Display name of the service -->
  <name>Caddy Web Server (powered by WinSW)</name>
  <!-- Service description -->
  <description>Caddy Web Server (https://caddyserver.com/)</description>
  <executable>%BASE%\caddy.exe</executable>
  <arguments>run</arguments>
  <log mode="roll-by-time">
    <pattern>yyyy-MM-dd</pattern>
  </log>
</service>

Теперь вы можете установить службу с помощью:

caddy-service install

Вы можете запустить консоль служб Windows, чтобы проверить, правильно ли работает служба:

services.msc

Обратите внимание, что перезагрузка служб Windows невозможна, поэтому вы должны напрямую указать caddy перезагрузиться:

caddy reload

Перезапуск возможен через обычные команды служб Windows, например, через вкладку «Службы» диспетчера задач.

Для настройки оболочки службы см. документацию WinSW

Docker Compose

Самый простой способ начать работу с Docker — использовать Docker Compose. См. документацию на Docker Hub для получения дополнительной информации об официальном образе Caddy Docker.

Предполагается, что вы используете Docker Compose V2, где команда теперь docker compose (пробел). вместо docker-compose (тире) в V1.

Настройка

Сначала создайте файл compose.yml (или добавьте эту службу в ваш существующий файл):

services:caddy:image:caddy:<version>restart:unless-stoppedports:- "80:80"- "443:443"- "443:443/udp"volumes:- ./Caddyfile:/etc/caddy/Caddyfile- ./site:/srv- caddy_data:/data- caddy_config:/configvolumes:caddy_data:caddy_config:

Убедитесь, что вы заполнили изображение <version> последним номером версии, который можно найти в разделе «Теги» на Docker Hub.

Что это делает:

  • Использует политику перезапуска unless-stopped, чтобы убедиться, что контейнер Caddy перезапускается автоматически при перезагрузке вашего компьютера.
  • Привязывает порты 80 и 443 соответственно для HTTP и HTTPS, а также 443/udp для HTTP/3.
  • Привязывает файл конфигурации Caddyfile, который является вашей конфигурацией Caddy.
  • Привязывает директорию site для обслуживания статических файлов вашего сайта из /srv.
  • Использует объёмы для /data и /config для сохранения важной информации.

Затем создайте файл с именем Caddyfile рядом с compose.yml и запишите в него конфигурацию Caddyfile.

Если у вас есть статические файлы для обслуживания, вы можете поместить их в директорию site/ рядом с конфигурациями, а затем установить root с помощью root * /srv. Если нет, то можно удалить привязку тома /srv.

Если вы используете Caddy для обратного проксирования к другому контейнеру, помните, что в сетях Docker localhost означает "этот контейнер", а не "этот компьютер". Поэтому, например, не используйте reverse_proxy localhost:8080, а используйте reverse_proxy other-container:8080.

Если вам нужен пользовательский сборка Caddy с плагинами, следуйте инструкциям сборки Docker по созданию пользовательского образа Docker. Создайте Dockerfile рядом с вашим compose.yml, а затем замените строку image: в вашем compose.yml на build: ..

Использование

Затем вы можете запустить контейнер:

docker compose up -d

Для перезагрузки Caddy после внесения изменений в ваш Caddyfile:

docker compose exec -w /etc/caddy caddy caddy reload

Чтобы просмотреть последние 1000 логов Caddy и f следить за потоком новых:

docker compose logs caddy -n=1000 -f

HTTPS на локальном компьютере с Docker

При использовании Docker для локального разработки с HTTPS вы можете использовать доменное имя, например, localhost или app.localhost. Это позволяет использовать локальный HTTPS с помощью локального CA Caddy для выдачи сертификатов. Это означает, что клиенты HTTP вне контейнера не будут доверять TLS-сертификату, предоставляемому Caddy. Для решения этой проблемы вы можете установить корневой сертификат CA Caddy в хранилище доверия вашей машины-хоста:

docker compose cp \
    caddy:/data/caddy/pki/authorities/local/root.crt \
    /usr/local/share/ca-certificates/root.crt \
  && sudo update-ca-certificates
docker compose cp \
    caddy:/data/caddy/pki/authorities/local/root.crt \
    /tmp/root.crt \
  && sudo security add-trusted-cert -d -r trustRoot \
    -k /Library/Keychains/System.keychain /tmp/root.crt
docker compose cp \
    caddy:/data/caddy/pki/authorities/local/root.crt \
    %TEMP%/root.crt \
  && certutil -addstore -f "ROOT" %TEMP%/root.crt

Многие веб-браузеры сейчас используют собственное хранилище доверия (игнорируя хранилище доверия системы), поэтому вам также может потребоваться установить сертификат вручную, используя файл root.crt, скопированный из контейнера в команде выше.

  • Для Firefox перейдите в Настройки > Конфиденциальность и безопасность > Сертификаты > Просмотреть сертификаты > Авторитеты > Импортировать и выберите файл root.crt.

  • Для Chrome перейдите в Настройки > Конфиденциальность и безопасность > Безопасность > Управление сертификатами > Авторитеты > Импортировать и выберите файл root.crt.

© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/running

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API