Перейти до змісту

Як інсталювати останню версію веб-сервера Caddy на Rocky Linux

Вступ

Caddy — веб-сервер, розроблений для сучасних веб-додатків. Caddy простий у налаштуванні та має автоматичне Let's Encrypt, тому ваші веб-сайти завжди захищені за замовчуванням. Це веб-сервер автора.

Ось короткий перелік функцій Caddy:

  • Базовий веб-сервер
  • Зворотний проксі для спрямування трафіку на кілька сайтів
  • Модулі для багатьох робочих навантажень, включаючи TCP, SSH тощо
  • Вбудований балансир навантаження для керування трафіком на кількох веб-сайтах
  • Вбудована автоматизована підтримка Let's Encrypt
  • API для програмної переналаштування сервера
  • Підтримка PHP FastCGI
  • Та IPv6

Передумови та припущення

Вам потрібно:

  • Підключена до Інтернету машина або сервер Rocky Linux.
  • Базове знайомство з командним рядком.
  • Можливість запускати команди від імені користувача root або за допомогою sudo.
  • Текстовий редактор на ваш вибір, будь то графічний або заснований на командному рядку. Для цього підручника автор використовує vim.
  • Ім’я домену чи інше ім’я хоста вказує на публічну IP-адресу вашого сервера.

Встановлення Caddy

По-перше, переконайтеся, що на вашій машині встановлено останні оновлення:

sudo dnf update

Потім встановіть репозиторій програмного забезпечення epel-release:

sudo dnf install -y epel-release

Далі встановіть веб-сервер caddy:

sudo dnf install -y caddy

Налаштування брандмауера

Якщо ви спробуєте переглянути веб-сторінку за IP-адресою чи доменним іменем вашого комп’ютера з іншого комп’ютера, ймовірно, ви нічого не отримаєте. Так буде, якщо брандмауер запущено.

Щоб відкрити необхідні порти, щоб фактично «бачити» ваші веб-сторінки, ви скористаєтеся вбудованим брандмауером Rocky Linux, firewalld. Команда firewalld для цього — firewall-cmd.

Щоб відкрити служби http і https, служби, які обробляють веб-сторінки, запустіть:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https

Розбираючи це:

  • Прапор -–permanent вказує брандмауеру застосовувати цю конфігурацію щоразу, коли перезапускаються брандмауер та сервер.
  • –-zone=public вказує брандмауеру дозволити вхідні підключення до цього порту від усіх.
  • Нарешті, --add-service=http і --add-service=https вказують firewalld передавати весь трафік HTTP і HTTPS на сервер.

Ці конфігурації не почнуть діяти, доки ви не примусово усунете проблему. Для цього скажіть firewalld перезавантажити свої конфігурації:

sudo firewall-cmd --reload

Примітка

Тепер є мінімальний шанс, що це не спрацює. У тих рідкісних випадках змусьте `firewalld` виконувати ваші ставки за допомогою старої функції вимкнути і знову ввімкнути.

```bash
systemctl restart firewalld
```

Щоб забезпечити доступність портів, запустіть firewall-cmd --list-all. Правильно налаштований брандмауер виглядатиме приблизно так:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp9s0
  sources:
  services: cockpit dhcpv6-client ssh http https
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Це має бути все, що вам потрібно, з точки зору брандмауера.

Налаштування Caddy

На відміну від традиційних веб-серверів, таких як Apache і Nginx, формат конфігурації Caddy значно простіший. Минули ті часи, коли вам доводилося налаштовувати дрібниці, як-от модель потоків веб-сервера або сертифікати SSL, якщо ви цього не хотіли.

Щоб відредагувати файл конфігурації Caddy:

vim /etc/caddy/Caddyfile

Мінімальна статична конфігурація веб-сервера може бути подібною до цієї:

example.com {
    root * /usr/share/caddy/example.com
    file_server
}

Замініть «example.com» на ім’я хоста, яке вказує на ваш сервер.

Ви також повинні додати веб-сайт до папки в «кореневому» каталозі Caddy. Для простоти додайте односторінковий статичний веб-сайт:

mkdir -p /usr/share/caddy/example.com
echo "<h1>Hi!</h1>" >> /usr/share/caddy/example.com/index.html

Після цього увімкніть службу Caddy's systemd:

systemctl enable --now caddy

Протягом хвилини Caddy отримає сертифікати SSL від Let's Encrypt. Потім ви можете переглянути веб-сайт, який ви щойно налаштували, у браузері:

Caddy serving our demo website

Він повинен мати навісний замок SSL, який має працювати в кожному сучасному браузері, і не тільки це, але й рейтинг A+ на Qualys SSL Server Test.

Додатково: PHP FastCGI

Як згадувалося раніше, Caddy підтримує підтримку FastCGI для PHP. Хороша новина полягає в тому, що, на відміну від Apache і Nginx, Caddy автоматично обробляє розширення файлів PHP.

Щоб установити PHP, спочатку додайте репозиторій Remi (примітка: якщо ви використовуєте Rocky Linux 8.x, замініть 8 поруч із «release-» нижче):

dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Далі нам потрібно встановити PHP (примітка: якщо ви використовуєте іншу версію PHP, замініть потрібну версію на php81):

dnf install -y php81-php-fpm

Якщо вам потрібні додаткові модулі PHP (наприклад, GD), додайте їх до наведеної вище команди.

Потім нам потрібно налаштувати PHP для прослуховування TCP-сокета:

vim /etc/opt/remi/php81/php-fpm.d/www.conf

Далі знайдіть рядок:

listen = /var/opt/remi/php81/run/php-fpm/www.sock

Замініть його цим:

listen = 127.0.0.1:9000

Потім збережіть і закрийте файл www.conf і відкрийте Caddyfile:

vim /etc/caddy/Caddyfile

Перейдіть до блоку сервера, який ми створили раніше:

example.com {
    root * /usr/share/caddy/example.com
    file_server
}

Додайте наступний рядок після рядка "file_server":

    php_fastcgi 127.0.0.1:9000

Ваш серверний блок із підтримкою PHP виглядатиме так:

example.com {
    root * /usr/share/caddy/example.com
    file_server
    php_fastcgi 127.0.0.1:9000
}

Потім збережіть і вийдіть із Caddyfile і перезапустіть Caddy:

systemctl restart caddy

Щоб перевірити, чи працює PHP, давайте додамо простий файл PHP:

echo "<?php phpinfo(); ?>" >> /usr/share/caddy/rockyexample.duckdns.org/phpinfo.php

Відкрийте в браузері файл, який ви створили, і вам має бути представлена інформація PHP:

Caddy serving our PHP file

Висновок

Базове встановлення та налаштування Caddy дуже прості. Пройшли ті часи, коли ви витрачали години на налаштування Apache. Так, Nginx, безсумнівно, є вдосконаленням, але йому все ще бракує сучасних, але важливих функцій, таких як Let's Encrypt і підтримка входу Kubernetes, яку вбудовано в Caddy. Натомість у Nginx (і Apache) ви повинні додавати їх окремо.

Я використовую Caddy з 2019 року як свій веб-сервер, і він просто чудовий. Насправді, щоразу, коли я маю справу з Apache, Nginx або IIS, це майже як повертати машину часу в 2010 рік або раніше.

Author: Neel Chauhan

Contributors: Steven Spencer, Ganna Zhyrnova