Установка бинарного файла Caddy с поддержкой Layer 4 в операционной системе Debian
У веб сервера Caddy много положительного, в том числе он умеет проксировать HTTP трафик, выступать в роли реверс-прокси для web серверов. Но проксировать TCP «из коробки» он не умеет, например если вам нужно перенаправить SSH трафик с помощью Caddy на другой порт или другой сервер.
К счастью все решается с помощью плагинов. Дополнение, которое позволяет перенаправлять TCP пакеты в зависимости от доменного имени на которое они направлены называется Layer 4.
Чтобы им воспользоваться нужно скомпилировать Caddy с учетом нового дополнения, либо скачать уже готовый бинарный файл Caddy в который включен плагин Layer 4, например здесь — https://caddyserver.com/download?package=github.com%2Fmholt%2Fcaddy-l4
Именно этим вариантом мы воспользуемся для уставновки веб сервера Caddy с поддержкой Layer 4.
Как всегда перед установкой программного обеспечения и внесения изменений на сервере вспоминаем когда вы последний раз делали резервные копии и где они у вас хранятся.
Как скачать бинарный файл Caddy на Debian
Считаем, что Caddy у вас не установлен.
Все дальнейшие действия описаны от лица ROOT.
Обновим ПО на сервере:
# apt update && apt upgrade -y
Скачивание Caddy скомпилированный с модулем layer4
# wget "https://caddyserver.com/api/download?os=linux&arch=amd64&p=github.com%2Fmholt%2Fcaddy-l4" -O caddy
Делаем файл исполняемым
# chmod +x caddy
Проверяем версию Caddy
# ./caddy version
Убеждаемся, что есть поддержка Layer 4
# ./caddy list-modules | grep -i layer4
Вывод на экран не должен быть пустой и должен содержать в строках символы «layer4».
Как установить скаченный Caddy в систему Debian
Копируем бинарный файл и назначаем ему права на исполнение
# cp caddy /usr/local/bin/ # chmod +x /usr/local/bin/caddy
Создадим жесткую ссылку
# ln -sf /usr/local/bin/caddy /usr/bin/caddy
Проверим всё ли правильно установилось
# caddy version # which caddy # caddy list-modules | grep -i layer4
Создадим для Caddy пользователя и группу
Для этого запускаем в консоли
# groupadd --system caddy # useradd --system \ --gid caddy \ --create-home \ --home-dir /var/lib/caddy \ --shell /usr/sbin/nologin \ --comment "Caddy web server" \ caddy
Создадим systemd сервис
Будем использовать редактор nano который в Debian присутствует по умолчанию, но вы в праве использовать что-то более привычное
# nano /etc/systemd/system/caddy.service
Вставьте в документ следующий текст
[Unit] Description=Caddy - Modern HTTP/2 web server with automatic HTTPS Documentation=https://caddyserver.com/docs/ After=network.target network-online.target Requires=network-online.target [Service] Type=notify User=caddy Group=caddy ExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/Caddyfile ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile TimeoutStopSec=5s LimitNOFILE=1048576 LimitNPROC=512 PrivateTmp=true ProtectSystem=full AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target
Для сохранения в nano используем комбинацию клавиш Ctrl + O
, для выхода из редактора — Ctrl + X
Создадим необходимые рабочие директории
Создадим директории
# mkdir -p /etc/caddy # mkdir -p /var/log/caddy # mkdir -p /var/lib/caddy # mkdir -p /var/www/html
И присваиваем их владельцам и назначаем необходимые права
# chown -R caddy:caddy /etc/caddy # chown -R caddy:caddy /var/log/caddy # chown -R caddy:caddy /var/lib/caddy # chown -R caddy:caddy /var/www/html # chmod 755 /etc/caddy # chmod 755 /var/log/caddy
Конфигурационный файл Caddyfile
Создадим конфигурационный файл, обратите внимание на имя файла
# nano /etc/caddy/Caddyfile
И вставим в него примерно следующий код
mysite.ru { root * /var/www/mysite.ru file_server }
В этом примере мы создали статический сайт mysite.ru файлы которого расположены по следующему адресу на сервере /var/www/mysite.ru — это корневая папка сайта.
Запуск и настройка сервиса
Перезагрузка systemd
# systemctl daemon-reload
Настроим автозагрузку Caddy при включении сервера (при старте операционной системы)
# systemctl enable caddy
Запуск Caddy
# systemctl start caddy
Проверка статуса работы Caddy
# systemctl status caddy
Постсриптум
Инструкция проверена на Debian 11 и Debian 13.