Содержание статьи
Решений для одного сервера достаточно много — «панели управления хостингом» существуют на любой вкус, и свободные, и проприетарные. Но одного сервера многим современным проектам уже не хватит. Чтобы справиться с нагрузкой и обеспечить отказоустойчивость, нужен кластер.
Радикальное решение для автоматизации управления кластером — подход infrastructure as code. Для самых крупных проектов это решение, вероятно, единственно возможное. Есть ли альтернативы для тех, кому уже нужна автоматизация работы более чем с одним сервером? Проект Roxy-WI стремится создать такую альтернативу. Давай посмотрим, насколько ему это удается.
Roxy-WI
Проект Roxy-WI стартовал в самом начале 2018 года. Он назывался HAProxy-WI (HAProxy Web Interface), но позже сменил имя, поскольку его возможности уже не ограничивались автоматизацией настройки HAProxy.
Исходный код проекта распространяется по лицензии Apache 2.0, и его можно найти на GitHub.
Для финансирования разработки авторы Roxy-WI предоставляют платный доступ к репозиториям с собранными пакетами, техническую поддержку и дополнительные сервисы, например автоматическое резервное копирование настроек.
Установка и обновление
Любой желающий может установить Roxy-WI из исходников, для этого достаточно клонировать репозиторий c GitHub и следовать инструкциям.
Авторы Roxy-WI предоставили нам пробный доступ к репозиториям, поэтому возиться с ручной установкой не пришлось. Установка из RPM на Rocky Linux 8 (идейном наследнике CentOS) не составляет большого труда.
Альтернативный вариант — развертывание на Amazon EC2 из официального образа. Образ устроен по принципу bring your own license — пользователь платит за ресурсы EC2, но не за использование ПО. В настоящий момент в этом образе установлена версия 5.2.0, в то время как самая свежая — 6.0.1.
В интерфейсе Roxy-WI есть опция проверки и установки обновлений, но нет опций настройки имени пользователя и пароля для доступа к репозиторию, так что настраивать их придется вручную, в /
или в /
.
Внутренняя структура
Проект Roxy-WI написан на Python 3, так что прекращение поддержки Python 2.7 его никак не затронуло.
Код и данные устанавливаются в каталог /
— в невидимых для пользователя частях еще сохранилось старое имя проекта.
Собственного сервиса у интерфейса Roxy-WI нет, он полагается на Apache HTTPD и генерирует конфиг в /
. Веб‑приложение организовано весьма необычным для нашего времени способом — в виде набора скриптов CGI. С одной стороны, процесс Roxy-WI не может упасть, потому что каждый скрипт выполняется веб‑сервером отдельно. С другой — все недостатки CGI остаются в силе: на запуск скриптов нужно время, и это отрицательно сказывается на отзывчивости интерфейса.
Для хранения данных Roxy-WI по умолчанию использует SQLite. Данные о пользователях, серверах и прочих сущностях хранятся в файле /
. Вообще, все данные Roxy-WI хранит в каталоге приложения: закрытые ключи для SSH в /
, конфиги серверов в /
и так далее.
Публичный доступ к этим каталогам запрещен только директивами Deny
в настройках Apache HTTPD, поэтому с настройками и путями нужно быть внимательным, если вдруг захочется их поменять.
Допускать утечку файла roxy-wi.
категорически нельзя, поскольку пароли пользователей в нем хранятся в виде хешей MD5 без использования соли и уязвимы даже к простейшей атаке по радужным таблицам.
С другой стороны, для резервного копирования или переноса установки Roxy-WI на другой сервер достаточно заархивировать каталог /
, что проще, чем если бы данные были разбросаны по множеству каталогов. Но идеальным вариантом все равно представляется отдельный каталог с данными, вроде /
, — хочется верить, что будущие версии пойдут именно этим путем.
Кроме SQLite, есть поддержка MySQL. Перейти с SQLite на MySQL можно после установки. В веб‑интерфейсе опций для этой цели нет, придется править файл настроек /
и инициализировать базу, запустив скрипт.
Веб-интерфейс
В интерфейсе Roxy-WI можно найти ряд отличных идей. Например, если какой‑то раздел настроек пуст, то пользователю показывают не просто пустую страницу, а страницу с видеоинструкцией о том, как использовать этот раздел.
С другой стороны, в интерфейсе пока что много шероховатостей. К примеру, поля для ввода адресов IP или доменных имен выдают неспецифичную ошибку, если до или после адреса оказался пробел. Поле для ввода часового пояса требует от пользователя строку для tzdata вроде Europe/
— ни выпадающего списка, ни автодополнения. Ряд полей, например ldap_enable, требуют от пользователя ввести 0 (disable) или 1 (enable), хотя гораздо логичнее был бы чекбокс. Иными словами, пользоваться можно, но простор для мелких улучшений большой.
Возможности
Теперь давай глянем на собственно возможности работы с серверами. Заявленный список весьма внушителен: Roxy-WI в той или иной степени способен управлять настройками и HAProxy, и Apache HTTPD, и Nginx.
Мы в деталях рассмотрим базовую функциональность, насколько позволяет объем статьи. Перед тем как что‑либо настраивать, нужно рассказать Roxy-WI о серверах нашего кластера.
Взаимодействие с серверами
Взаимодействие с серверами происходит по SSH. Перед тем как добавлять серверы, нужно загрузить закрытые ключи для подключения к ним. Диалог добавления пользователя и ключа использует не слишком интуитивную и стандартную терминологию: поле name — это имя набора данных для аутентификации (закрытого ключа и имени пользователя), а поле credential — имя пользователя, с которым Roxy-WI будет подключаться к серверу. Загрузить сам ключ можно только после создания записи для него. Добавление ключей, конечно, не частая операция, но интерфейс опять же можно улучшить.
Добавление серверов не представляет никакой сложности. Разве что может понадобиться обновить страницу вручную, чтобы увидеть добавленный сервер.
Порадовала возможность сразу проверить подключение по SSH: чтобы убедиться, что имя пользователя и ключ верные, достаточно нажать кнопку Check рядом с полем Credentials.
Установить HAProxy на свежий сервер Roxy-WI может автоматически, что сильно экономит время админу.
Автоматическая установка Apache HTTPD в текущей версии не поддерживается — вероятно, она появится в будущих версиях. C Nginx у меня тоже возникла проблема — на Ubuntu 22 LTS он не установился — ни с «Докером», ни без.
Но добавление серверов, конечно, всего лишь вспомогательная функция. Настоящие преимущества Roxy-WI видны в его подходе к работе с конфигами.
Работа с конфигами
Наиболее развито управление именно HAProxy, поскольку изначально проект концентрировался на нем. Функции для работы с Nginx и Apache HTTPD активно развиваются и пока уступают интерфейсу для HAProxy. Тем не менее сама концепция управления конфигами явно показывает преимущества специализации и в итоге вполне сможет составить конкуренцию решениям в духе infrastructure as code.
Конфиги HAProxy можно проверить на правильность перед отправкой на сервер. Понятно, что это обертка для haproxy
, но экономия времени очевидна. Та же функция должна работать на Nginx (и быть аналогом nginx
), но у меня Roxy-WI пропустил конфиг с ошибками синтаксиса.
Редактирование конфигов весьма продуманно. Веб‑редактор, конечно, никогда не сравнится с Vim, Emacs или VSCode в деле редактирования текста, но редактор Roxy-WI компенсирует это специализацией. К примеру, в режиме просмотра можно показать или свернуть только определенные секции конфига, а в режиме редактирования работает подсветка синтаксиса.
Важная возможность — автоматическая репликация конфигов на резервный сервер и версионирование. В рамках подхода infrastructure as code мы бы хранили конфиги или исходный материал для их создания в Git и занимались бы контролем версий сами. Roxy-WI делает это за нас: каждая редакция конфига сохраняется внутри Roxy-WI и доступна для отката, просмотра и сравнения с другими редакциями. Хотя Roxy-WI не использует систему контроля версий и хранит архивные конфиги в обычных файлах, он способен показывать различия между версиями.
Применение системы контроля версий сэкономило бы место на диске и упростило бы поддержку описаний изменений — хочется увидеть это в будущих версиях. В текущей версии поддерживается только периодическое резервное копирование в удаленный репозиторий Git и только в версии Enterprise.
Кроме того, именно для HAProxy в Roxy-WI есть широкий набор генераторов секций конфига.
Отдельно приятно то, что перед отправкой сгенерированного конфига на сервер можно просмотреть его текст, — это выгодно отличает Roxy-WI от проектов, где процесс для пользователя непрозрачен.
Дополнительные сервисы и интеграции
Тем пользователям, которые поддерживают проект финансово, доступны не только собранные пакеты с самим Roxy-WI, но и ряд дополнительных сервисов. Я уже упоминал сервис резервного копирования конфигов, но им все не ограничивается. Другой полезный сервис — Roxy-WI Checker, который помогает мониторить серверы и рассылать уведомления об инцидентах. Разумеется, мониторинг и уведомление можно настроить и самому, благо инструментов для этих целей огромное количество. Преимущество Roxy-WI Checker — в интеграции с самим Roxy-WI. Ему автоматически становится известно о серверах кластера и их сервисах, так что добавление серверов в мониторинг перестает быть отдельной задачей. Сервис может автоматически отправлять уведомление в каналы Slack или Telegram, достаточно указать токен для их API. Кроме того, уведомления о серверах из разных групп можно отправлять в разные каналы, что полезно организациям с выделенными командами админов для разных частей проекта.
Планы на будущее
Проект Roxy-WI не стоит на месте и постоянно развивается. Авторы планируют в будущих версиях добавить новые возможности настройки отказоустойчивости с помощью Keepalived, поддержку WAF (Web Application Firewall) для Nginx, а также существенно улучшить работу с Apache HTTPD (например, поддержку сбора статистики и резервного копирования конфигов). Обещают исправить и недостатки интерфейса и в целом собираются его улучшить.
Заключение
Roxy-WI, безусловно, многообещающий проект. Задача настройки и управления кластерами веб‑серверов — сложная и актуальная, и удачное решение для ее автоматизации может сэкономить админам много времени и уберечь их от ошибок. На данный момент Roxy-WI хорошо справляется с автоматизацией настройки HAProxy и движется в сторону полного решения для управления всеми компонентами кластера.
Тем не менее Roxy-WI — помощник админа кластера, а не альтернатива ему. Никакой инструмент не заменит собственные знания и опыт!