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="uk">
<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 і спокійно працювати у фоні.

І, чесно кажучи, це вже дуже багато.

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

І пам’ятай:

Найкраща серверна конфігурація — це та, яку ти все ще розумієш через три місяці.