
Долгое время я использовал контрольную панель Kloxo, а позже — KloxoMR на базе CentOS 7 для управления мини-сервером с сайтами. Это решение отлично справлялось со своими задачами, но со временем CentOS 7 устарел, а Kloxo не была адаптирована для более новых ОС, ее обновления прекратились. Пришлось задуматься о переходе на более актуальные решения.
Так как мне больше импонируют RPM-based дистрибутивы, я начал искать Open Source панель управления сервером, подходящую под такие ОС. Также было важно, чтобы это решение имело возможность расширения функционала.
Процесс поиска оказался непростым. Многие панели не подошли по ряду причин:
У некоторых был закрытый исходный код и минимальные возможности для доработки.
Некоторые проекты ограничили доступ к своим репозиториям для пользователей из России.
Другие панели требовали слишком сложной и долгой ручной настройки, что сводило на нет их удобство (в таком случае проще и быстрее править конфиги вручную).
В итоге я наткнулся на HestiaCP — свободную и активно развивающуюся панель управления, которая, несмотря на ориентацию на Debian/Ubuntu, заслуживает отдельного внимания.

Возможности данной контрольной панели:
Создание и управление DNS-записями, пользователями, FTP-ресурсами, базами данных, почтовыми ящиками.
Поддержка SSL-сертификатов Let's Encrypt, а также возможность установки других SSL-сертификатов.
Имеется файловый менеджер.
Планировщик заданий Cron.
Поддержка быстрого способа установки популярных веб-приложений: WordPress, Drupal, Joomla, Opencart, Prestashop, Laravel и Symfony (забегу вперед, для RPM-версии пока получилось адаптировать Laravel, Grav, Flarum и OpenCart).
Резервное копирование.
Удобный и функциональный интерфейс и т. д.
Я провел тестовую установку, развернул несколько сайтов, подробно изучил функционал панели. Все мои задачи контрольная панель легко решала, а также давала возможность вносить изменения. Оставалось только заставить ее работать на комфортной для меня ОС под RPM менеджер пакетов.
Исследовав ветки исходных кодов контрольной панели на github, я обнаружил, что имеется ветка с инсталлятором для AlmaLinux, это несколько воодушевило. Так что на использовании панели не был поставлен крест: я решил развернуть ее на RPM-based системе, в качестве испытуемой выбрал «МСВСфера» 9.
Почему именно ее? Во-первых, пакетные базы ОС расположены в России. Во-вторых, это RPM-based система, а система данного класса мне хорошо знакома в плане организации на ней сервера. В-третьих, я являюсь членом команды разработки данной ОС.
Подготовка к адаптации
Исходные коды HestiaCP даже в master ветке содержат шаблоны для использования в RPM-системах. Также был найден скрипт установки hst-install-rhel.sh. Я решил проверить этот скрипт и обнаружил, что он не выполняет корректную установку и настройку контрольной панели, а также устанавливает сервисы с проблемами доступа из России (например базы сигнатур clamav). Но наличие шаблонов настроек для RPM-based ОС и скрипта установки продолжали воодушевлять, — казалось, что вот-вот немного подправить и все заработает.
К рабочему состоянию систему я приводил со следующими исходными:
скрипт hst-install-rhel.sh;
исходные коды контрольной панели с шаблонами и заготовками для RPM-based ОС;
минимальная установка ОС «МСВСфера» 9.
Адаптация HestiaCP RPM Edition
Было решено:
произвести установку пошагово до ошибки;
произвести анализ ошибки;
исправить ошибку установочного скрипта и опять итерационно вернуться к пункту 1.
Шаг за шагом удалось выявить проблемные места, некорректные команды установки, и наконец установочный скрипт заработал и завершил установку. Первый этап пройден: система установлена. Теперь предстояло проверить рабочий функционал уже установленной панели управления.
На этом этапе я тоже столкнулся с ошибками: часть шаблонов оказалась не доработана, часть скриптов не готова к именам и названиям сервисов в RHEL-based системах. Немного облегчало задачу то, что систему во многом уже адаптировали для использования PHP из Remi репозитория, но я решил добавить еще и установку с альтернативными самосборными версиями PHP.
После ревизии проблемных скриптов удалось оживить и привести в работоспособное состояние контрольную панель и для RPM-системы.Осталось дело за малым, инсталляционный скрипт требует наличия контрольной панели, специальный PHP для контрольной панели и nginx в виде пакетов. Поэтому я изучил скрипты подготовки программных пакетов Hestia, собрал необходимые и выложил в отдельный репозиторий.
Дополнительная доработка контрольной панели
Чтобы расширить функционал панели для собственных нужд, я дополнительно внес в нее по мере адаптации следующие доработки:
Для контрольной панели был русифицирован сайт документации: характеристики, установка, документация — https://hestiadocs.brepo.ru.
Добавлена установка баз сигнатур clamav с зеркала доступного в России, чтобы сервис вновь стал рабочим в контрольной панели.
Кроме PHP из Remi репозитория, была добавлена возможность установки альтернативных сборок PHP. То есть Remi теперь не единственный поставщик PHP-пакетов для HestiaCP RPM. При установке по умолчанию выбирается именно установка самосборных PHP (в дальнейшем буду называть Local PHP). Установка из Remi требует отдельной настройки установщика. Для Local PHP включить/отключить модули PHP можно из веб-интерфейса контрольной панели, а не только из командной строки как в оригинальной HestiaCP.
Был добавлен режим определения текущего IP сервера не за NAT. Этот режим включен по умолчанию для того, чтобы панель можно было без дополнительных телодвижений поставить на сервере в локальной сети.
В оригинальной HestiaCP для проксирования запросов используется механизм шаблонов настроек. В текущей реализации добавлена возможность указать внутренний порт сервиса из веб-интерфейса.
Добавлен PHP cli selector — маленькая утилита, которая подменяет системный PHP и при вызове анализирует, какой пользователь вызывает PHP, после чего запускает настроенную для пользователя версию PHP.
Также был добавлен раздел «Доп. модули» в «Настройках» с дополнительными интерфейсами по расширению функционала панели: установка mod_passenger и поддержка ruby приложений, управление расширениями PHP.
Все вышеприведенные доработки описаны в документации.
А теперь хотелось бы подсветить доработки более подробно.
Что такое PHP cli selector?
PHP cli селектор заменяет системный - /usr/bin/php ссылкой на утилиту, которая анализирует конфигурационный файл пользователя HestiaCP и запускает установленную для пользователя версию PHP.
Пример:
# readlink -f /usr/bin/php
/usr/bin/hestiacp-php-selector
По умолчанию php cli селектор отключен, и системным PHP является стандартный бинарный файл PHP, приносимый пакетами системы. Для включения PHP cli селектора необходимо перейти в «Server Options» -> «Options» -> «Web-server». Найти селектор «System PHP» и под селектором установить чекбокс «Use PHP cli selector».

После данной операции для пользователя (в первую очередь в командной строке терминала и в кроне) станет доступным системный PHP установленной им версии. То есть не только его сайт будет работать с версией PHP 7.4, но и cron.
Проксирование запросов во внутренние сервисы
Srvproxy - это шаблон для конфигурации прокси для любого внутреннего сервиса, например gitea, который запускается и присоединяется к порту. При выборе этого шаблона появляется дополнительное поле «Установить порт для локального сервиса», в котором нужно указать порт внутреннего сервиса. В качестве шаблона Backend в данном случае можно выбрать no-php, так как бэкэндом будет внутренний сервис.

Это избавляет от необходимости делать файлы шаблонов в файловой системе сервера для популярных сервисов.
Дополнительные модули и mod_passenger
Модули расширения панели позволяют расширять функционал панели.
Для доступа и управления модулями расширения необходимо пользователем admin перейти в «Настройки» сервера.

Далее в строке перечня настроек выбрать «Доп. модули»

Далее откроется страница доступных модулей и их состояния. Пример страницы с демонстрационными модулями приведен ниже.

Данная страница содержит следующую информацию:
ID модуля — числовой идентификатор модуля;
имя модуля — символьный идентификатор модуля;
описание модуля — краткая информация о модуле;
состояние — включен (enabled) или выключен (disabled);
зависимости — список модулей, которые должны быть включены для работы текущего модуля;
конфигурация — дополнительные настройки модуля (при наличии).
Если модуль выключен, его состояние отображается как disabled. Для включения модуля надо нажать на кнопку «Play», для выключения — «Stop».
Список предустановленных модулей (это неокончательный список, в будущем планирую его пополнять):
puppet_installer — установить puppet. Puppet требуется для большинства модулей , чтобы изменить конфигурацию системы. Поэтому необходимо, чтобы этот модуль был включен — при включении он установит puppet в систему.
empty_module — пустой модуль, его включение или выключение ни на что не влияет. Является примером написания модулей.
passenger_manager — модуль по установке и настройке passenger в систему.
php_brepo_modules — модуль по управлению расширениями Local PHP.
Альтернативные PHP
Альтернативный PHP — это PHP-интерпретатор (Local PHP) из репозитория, из которого ставится HestiaCP RPM Edition. Адаптированная HestiaCP имеет возможность работать или с PHP из Remi репозитория, или с PHP из так называемого локального репозитория — Local PHP. Если требуется более расширенный функционал пакетов из Remi репозитория, то следует отказаться при установке панели от опции --uselocalphp yes и установить панель с опцией --uselocalphp no.
Local PHP более ограниченный в наборе расширений, но занимает меньше места на диске и приносит меньше RPM-пакетов. Подходит для большинства сборок CMS, таких как Wordpress, Drupal и т.д. Есть еще одна особенность, для данного типа PHP разработан графический интерфейс в HestiaCP по управлению подключенными расширениями.
Вот как выглядит данный интерфейс.

На рисунке выше представлена панель выбора настраиваемой версии PHP.
На следующем рисунке представлена панель подключаемых модулей для версии PHP.

Итог
Итак, на текущий момент HestiaCP выглядит работоспособной. Установка проверялась на ОС «МСВСфера» 9, AlmaLinux 9, Rocky Linux 9 и CentOS Stream 9.
Результаты доработки хранятся в репозитории на github.
Спасибо за внимание.