2024-11-08

Настройка Caddy на Linux: веб-сервер, который пытается сделать работу за тебя

Простое и юмористическое руководство по установке Caddy на Linux, запуску базовой HTML-страницы, использованию Caddyfile и маленькой тихой магии автоматического HTTPS.

Настройка Caddy на Linux: веб-сервер, который пытается сделать работу за тебя

Итак, ты хочешь настроить веб-сервер.

Отлично.

Это значит, что ты готов войти в древний мир:

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

Но сегодня мы не выбираем страдание как основную рабочую модель.

Сегодня мы используем Caddy.

Caddy — это современный веб-сервер, который может отдавать статические файлы, работать как reverse proxy и автоматически управлять HTTPS, если ты используешь настоящий домен.

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

Не всю, конечно.
Это всё ещё Linux.
Ты не полностью свободен.

Но уже очень близко.

Почему Caddy?

Caddy популярен потому, что делает типичные задачи веб-сервера удивительно простыми.

С Caddy ты можешь:

  • запускать простой статический сайт;
  • делать reverse proxy для приложения;
  • использовать чистую и понятную конфигурацию;
  • получить автоматический HTTPS с настоящим доменом;
  • перезагружать конфигурацию без превращения вечера в драматический технический сериал.

Если Nginx иногда похож на чтение юридических документов, написанных очень серьёзным роботом, то Caddy звучит примерно так:

“Скажи мне, какой сайт ты хочешь, и я постараюсь не делать из этого странную историю.”

Очень освежает.


Установка Caddy на Linux

Установим Caddy на Arch Linux, Fedora и Ubuntu.

Выбери свой дистрибутив и выполни соответствующие команды.

Никакая духовная церемония не требуется.

Скорее всего.


Arch Linux: путь смелых

На Arch Linux установка прекрасна своей простотой.

Запусти:

sudo pacman -Syu caddy

И всё.

Пользователи Arch любят, когда всё просто, потому что тогда у них остаётся больше времени объяснять, почему они используют Arch.

Проверь, установлен ли Caddy:

caddy version

Если видишь номер версии — Caddy готов.

Твой терминал одобрил эту операцию.

Пока что.


Fedora: чисто, современно и немного серьёзно

На Fedora установи Caddy командой:

sudo dnf install caddy

Потом проверь версию:

caddy version

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

Caddy здесь очень хорошо подходит.


Ubuntu: несколько шагов больше, потому что традиция

На Ubuntu сначала добавим официальный репозиторий Caddy.

Установи нужные пакеты:

sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

Добавь GPG-ключ Caddy:

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

Добавь репозиторий Caddy:

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
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list

Обнови список пакетов и установи Caddy:

sudo apt update
sudo apt install caddy

Теперь проверь версию:

caddy version

Если он отвечает — поздравляю.

Ubuntu и Caddy начали общаться.

Это уже больше коммуникации, чем в некоторых production-системах.


Создаём простой сайт

Перед тем как настраивать что-то серьёзное, создадим маленькую HTML-страницу.

Без драмы.

Просто достаточно, чтобы доказать: сервер живой и не осуждает нас молча.

Создай папку:

mkdir my_website
cd my_website

Создай файл index.html:

nano index.html

Добавь этот HTML:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Привет от Caddy</title>
</head>
<body>
  <h1>Привет, мир!</h1>
  <p>Этот простой сайт работает через Caddy.</p>
</body>
</html>

Сохрани файл.

Теперь у тебя есть сайт.

Маленький, да.

Но и Рим, говорят, начинался с одного подозрительно положенного камня.


Тестирование Caddy без Caddyfile

Теперь запустим отдачу этой папки напрямую.

Убедись, что ты внутри папки my_website:

pwd

Потом запусти:

caddy file-server --listen :8080

Открой браузер и перейди по адресу:

http://localhost:8080

Если видишь свою страницу — Caddy работает.

Это прекрасный момент, когда браузер что-то показывает, а ты на несколько секунд чувствуешь себя системным администратором.

Наслаждайся.

Это чувство может длиться недолго.


Создание Caddyfile

Запускать Caddy из командной строки удобно для тестов.

Но для реальной конфигурации обычно нужен Caddyfile.

Caddyfile — это конфигурационный файл Caddy.

Он говорит Caddy, что отдавать, откуда отдавать и насколько драматичным должен быть вечер.

В папке my_website создай файл с названием Caddyfile:

nano Caddyfile

Добавь это:

localhost:8080 {
  root * .
  file_server
}

Это говорит Caddy:

  • слушать на localhost:8080;
  • использовать текущую папку как root сайта;
  • отдавать файлы из этой папки.

Теперь запусти Caddy с использованием Caddyfile:

caddy run

Открой:

http://localhost:8080

Если страница снова появляется — всё работает.

Caddy прочитал твои инструкции и ведёт себя как ответственный взрослый.

Редко, но красиво.


Форматирование Caddyfile

Caddy может сам форматировать свой конфигурационный файл.

Это полезно, потому что компьютеры часто форматируют лучше, чем люди, которые пытаются настроить сервер после ужина.

Запусти:

caddy fmt --overwrite Caddyfile

Это приведёт форматирование в порядок.

Аккуратный Caddyfile — счастливый Caddyfile.

Или хотя бы менее подозрительный.


Проверка конфигурации

Перед тем как использовать конфигурацию серьёзно, проверь её:

caddy validate --config Caddyfile

Если Caddy говорит, что конфигурация правильная — хорошо.

Если жалуется — внимательно прочитай ошибку.

Ошибки Caddy обычно вежливее, чем ошибки многих других веб-серверов.

Это не значит, что они всегда приятные.

Но по крайней мере они стараются.


Использование настоящего домена с HTTPS

Вот здесь Caddy становится действительно интересным.

Если у тебя есть настоящий домен, который указывает на твой сервер, можно написать что-то такое:

example.com {
  root * /var/www/example.com
  file_server
}

С настоящим доменом Caddy может автоматически управлять HTTPS-сертификатами.

Это значит: никакой ручной борьбы с сертификатами.

Никаких длинных ритуалов со случайными файлами.

Никакой эмоциональной битвы с обновлением сертификата в 01:13 ночи.

Просто чистая конфигурация и автоматический HTTPS.

Почти слишком приятно, чтобы не быть подозрительным.


Более реалистичная конфигурация статического сайта

На реальном сервере ты, скорее всего, не захочешь держать сайт в случайной папке в домашней директории.

Типичное место для сайтов — /var/www.

Создай папку для своего сайта:

sudo mkdir -p /var/www/example.com

Скопируй туда HTML-файл:

sudo cp index.html /var/www/example.com/index.html

Теперь отредактируй системный Caddyfile:

sudo nano /etc/caddy/Caddyfile

Используй такую конфигурацию:

example.com {
  root * /var/www/example.com
  file_server
}

Замени example.com на свой настоящий домен.

Потом перезагрузи Caddy:

sudo systemctl reload caddy

Если по какой-то причине reload не работает, перезапусти сервис:

sudo systemctl restart caddy

Reload — более деликатный.

Restart — это метод “выключить и включить снова”.

Оба имеют своё место в священной истории IT.


Запуск Caddy как системного сервиса

Если ты установил Caddy через пакетный менеджер своего дистрибутива, его можно запускать через systemd.

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

sudo systemctl enable caddy

Запусти его сейчас:

sudo systemctl start caddy

Или сделай обе вещи сразу:

sudo systemctl enable --now caddy

Проверь статус:

sudo systemctl status caddy

Если видишь:

active (running)

Caddy живой и работает.

Теперь у твоего сервера есть маленький работник, который никогда не спит.

Относись к нему лучше, чем многие компании относятся к стажёрам.


Перезагрузка Caddy после изменений

Когда изменяешь /etc/caddy/Caddyfile, перезагрузи Caddy:

sudo systemctl reload caddy

Это применит новую конфигурацию без полной остановки сервиса.

Перед reload можно также проверить системный Caddyfile:

sudo caddy validate --config /etc/caddy/Caddyfile

Это хорошая привычка.

Не захватывающая.

Но многие хорошие привычки скучные.

Именно поэтому они спасают нас от будущих страданий.


Просмотр логов Caddy

Если что-то не работает, проверь логи:

sudo journalctl -u caddy -f

Это показывает логи Caddy в реальном времени.

Это немного похоже на то, как твой сервер шепчет:

“Вот точная причина, почему я отказываюсь сотрудничать.”

Иногда логи полезные.

Иногда обучающие.

Иногда выглядят как личная атака, написанная техническим языком.

Всё равно читай их.


Полезные команды Caddy

Вот несколько удобных команд.

Проверить версию Caddy

caddy version

Запустить Caddy в текущей папке

caddy file-server --listen :8080

Запустить Caddy с Caddyfile

caddy run

Форматировать Caddyfile

caddy fmt --overwrite Caddyfile

Проверить Caddyfile

caddy validate --config Caddyfile

Перезапустить системный сервис

sudo systemctl restart caddy

Перезагрузить системный сервис

sudo systemctl reload caddy

Посмотреть логи

sudo journalctl -u caddy -f

Маленькая заметка о портах

Для локальных тестов порт 8080 очень удобен.

Обычно он не требует специальных прав и не конфликтует с другими веб-серверами.

Для настоящих сайтов обычно используют:

  • порт 80 для HTTP;
  • порт 443 для HTTPS.

Если другой сервис уже использует эти порты, Caddy может отказаться запускаться.

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

sudo ss -tulpn

Потом ищи :80 или :443.

Если найдёшь там другой веб-сервер — поздравляю.

У тебя теперь есть маленькая серверная дискуссия, которую нужно решить.


Финальные мысли

Готово.

Ты установил Caddy, создал простую HTML-страницу, запустил её локально, написал Caddyfile и научился запускать Caddy как системный сервис.

Неплохо.

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

Он не построит сайт за тебя.

Не исправит твой CSS.

Не объяснит, почему JavaScript работает только после двух обновлений страницы.

Но он может отдавать твой сайт, управлять HTTPS и спокойно работать в фоне.

И, честно говоря, это уже очень много.

Наслаждайся своим новым веб-сервером.

И помни:

Лучшая серверная конфигурация — это та, которую ты всё ещё понимаешь через три месяца.