Современный мир системных администраторов обленил нас красивыми web-face-ами, что даже не охота ставить софт, где нет этого самого «гуя» (чувствую сейчас полетят камни от правоверных строчкеров), ну не через строку же постоянно туда лазить, правда? Все бы ничего, если софт поставил, настроил и забыл, а что делать, если туда надо постоянно лазить, править, ну и конечно же нет лога всех действий, не писать же каждый раз cp cfg cfg_back, со временем запутаешься и забьешь на это дело.



Много лет назад познакомился я с таким чудесным балансером, как Haproxy. Все чудесно и красиво. Стало у меня их много и задумался я о поиске GUI к нему, но его на удивление не было. Очень популярный софт, к тому же достаточно старый, ну да ладно подумал я и продолжил изредка править ручками в своем любимом vi и иметь кучу открытых вкладок со статистикой всех активных серверов. Но настало время и мне пришлось удовлетворять «хотелки» людей, которые писали софт для работы через http, вот тут и началось интересное…

Ручки зачесались, глазки загорелись и я приступил. Точнее начал думать на чем писать, вспоминать давно-давным забытый PHP, как-то не хотелось, да и казалось, что он не совсем подходит для этого дела. В итоге выбор пал на Python, в будущем точно пригодится подумал я и началось впитывание информации.

В начале задачи стояли не такие уж и сложные: возможность редактировать конфиги из веб интерфейса из одной точки входа, сохранения предыдущих версий конфигов. Данный, не особо большой функционал получилось реализовать достаточно быстро, но тут во мне взыграла то ли админская лень, то ли пресловутый перфекционизм и мне этого показалось конечно же мало. И тут начали появляться такие фичи как: сравнение двух конфигов, логирование всех действий связанных с конфигами, Runtime API и добавления секций, через web.



И как порядочный UNIX администратор живущий за счет свободного ПО я решил поделится с миром, а в друг кому-то пригодится? Но для этого надо было сделать все так, чтобы не приходилось лазить в код, но максимум в конфиг приклады(Сейчас большинство настроек переехало в базу. Как по мне их стало удобней редактировать и при обновлении не будет ошибок из-за отсутствия в конфиге какого-либо параметра).

Спустя месяц я выложил свою поделку на Github особо не на что не рассчитывая. А зря, софт оказался слегка востребованным и тут началось самое интересное… Активная «допилка» идет уже почти год. Порой есть желание все это бросить, т.к. мои потребности перекрыты уже давно. Ну вот зачем мне возможность развернуть «кластер» с keepalived и HAProxy через веб морду, если у меня это занимает от силы пару минут? А людям оказывается надо, да и мне интересно, и есть чем заняться. Хотя конечно же есть и нужные мне функции, например, как мониторинг бэкенд серверов, доступны ли они для Haproxy. У нас конечно же есть корпоративный мониторинг, но там сидят люди, которые могут достаточно долго реагировать, + т.к. мой отдел занимается разработкой и софт то появляется, то исчезает достаточно долго пробиваться через бюрократию.



В общем решил поделится, ведь получается, что это единственный бесплатный GUI. А вдруг кому пригодится? Ссылка на GitHub.

Комментарии (23)


  1. Sleuthhound
    10.08.2018 20:24
    +4

    Все классно и уверен, что gui нужен, но вот пары моментов в install.sh меня содрогнуло:
    apt-get install… apache2…
    и ниже установка maria-db
    Эээээ зачем вы так сразу с горяча?
    Предоставьте право выбора и установки пакетов админу, ну не используют я апачь и ради gui он мне не нужен, а вы тут сразу его ставите, и мария у меня может стоит уже, причем из оф. репозитария.

    Гораздо правильней написать инструкцию как ставить ваш софт под ту или иную конфигурацию, чем писать инсталлятор. Инсталлятор в 99% случаев не заработает на сервере где уже куча зоопарка.

    А еще лучше создать docker контенер со всем что нужно.

    А так спасибо за gui.


    1. Me1ram
      10.08.2018 20:33
      +2

      согласен на счет докер образа.


    1. Aidaho12 Автор
      10.08.2018 20:35
      +4

      Спасибо за все классно )

      Docker образ есть, а инструкция спрашивает насчет выбора базы — предлагает на выбор sqlite и mariadb, если выбрать марию, то на выбор будет 2 пункта: установить или использовать уже имеющийся сервер. Так же есть инструкция по ручной установке для Apache, думаю не трудно будет ее применить для того же Nginx-a

      Все это описано в Readme репозитория :)


      1. Sleuthhound
        10.08.2018 22:11
        +1

        Ох уж этот яблокофон у меня, Readme то он как раз по умолчанию и не показал, а там и вправду все есть. Прошу прощения.


  1. larrabee
    11.08.2018 00:53
    +1

    а что делать, если туда надо постоянно лазить, править, ну и конечно же нет лога всех действий, не писать же каждый раз cp cfg cfg_back, со временем запутаешься и забьешь на это дело.

    Конфиг Haproxy в Ansible, Ansible в гит. И никаких проблем с версионированием изменений. Плюс без проблем разливается на кучу серверов.
    Для сбора статистики — экспортер в Prometheus, откуда можно вытягивать данные в Grafana и строить красивые графики.

    Ваш подход без сомнения имеет право на жизнь, но по моему описанное выше больше соответствует UNIX-way, т.к. легче масштабируется до десятков-сотен серверов и очень легко умеет в автоматизацию. Накрутить дополнительной логике в Ansible дело нескольких минут, на крайний случай часов, и вот у вас уже есть например авто дискавери бэкендов или автоматическое указание веса бэкенда в зависимости от количества процессорных ядер на нем и все остальное, что вы только сможете придумать. ;)


    1. Aidaho12 Автор
      11.08.2018 04:27

      В статье забыл указать еще одну причину написания веб интерфейса — чтобы меня реже дергали ) Чтобы некоторые программеры, которые совсем не админы могли сами периодически что-то делать, а на сервера их пускать не хотелось. Ну и как не крути, сейчас у веб морды больше возможностей чем у ansible

      Но вообще спасибо за идею, можно избавится от скриптов и перейти на ansible


  1. ALexhha
    11.08.2018 01:17
    -1

    Я может что то упустил, но почему в статья ни слова о технической составляющей проекта? Ну например:
    — почему питон? Php изначально был заточен под веб, а у вас вроде как вебморда
    — использовали какой то Фреймворк? Если да, то почему этот. Делали какое то сравнение?
    — с какими необычными проблемами столкнулись и как их в итоге решили

    Ну и т.д.

    P.S.
    У вас очепятка в readme.md, user-frendly пропущена буква i

    P.P.S
    Bash скрипты без -eu, как минимум, это рано или поздно — выстрел себе в ногу


    1. Aidaho12 Автор
      11.08.2018 04:49

      Я может что то упустил, но почему в статья ни слова о технической составляющей проекта?

      Потому что это не техническая статья )
      Но если вам интересно, то я с удовольствием расскажу

      — я вроде описал почему он. PHP — да, был заточен под веб, но именно под веб, а питон под систему и так как много придется работать именно с системой, то мне подумалось, что он лучше подходит. К тому же сейчас кучу-кучную пишут на питоне для веба
      — в начале только Python и JQuery, со временем прикрутил Jinja2, т.к. стало поддерживать «макаронный» код стало сложно. Надеюсь, что когда-нибудь перейду на Flask или Django, но это не точно )
      — самая интересная, так это то, что я не могу заставить работать апач с пост, вообще ужас… поэтому в некоторых формах пришлось использовать ajax для большей «секурности», но пост был бы лучше. Раздражает, что браузеры кэшируют по разному: ФФ кэширует формы, а хром скрипты, пару раз были из-за этого проблемы )

      P.S. спасибо, поправлю
      P.P.S. в принципе согласен, но пока хромых не замечал, даже как-то мигрировал продуктивное облако openstack в другое облако с помощью скрипта )


  1. SellerOfSmiles
    11.08.2018 03:26

    Страшно представить, что бы у вас вышло если бы вы написали этот гуй специально…
    Так держать! :)


    1. Aidaho12 Автор
      11.08.2018 04:50

      Ну не так что бы уж очень и страшно, скорее лень и интерес

      Спасибо)


  1. lioncub
    11.08.2018 09:17

    В README.md есть описание как развернуть образ из aidaho/haproxy-wi, а можно ли увидеть Dockerfile?


    1. Aidaho12 Автор
      11.08.2018 10:24
      +1

      Разве при скачке образа его нельзя посмотреть?

      А так вот он:

      FROM centos
      MAINTAINER Pavel Loginov (https://github.com/Aidaho12/haproxy-wi)
      
      ENV http_proxy ip:3128
      ENV https_proxy ip:3128
      
      COPY epel.repo /etc/yum.repos.d/epel.repo
      
      RUN yum -y install git nmap-ncat python34 dos2unix python34-pip httpd yum-plugin-remove-with-leaves svn gcc-c++ gcc gcc-gfortran python34-devel
      
      COPY haproxy-wi.conf /etc/httpd/conf.d/haproxy-wi.conf
      
      RUN git clone https://github.com/Aidaho12/haproxy-wi.git /var/www/haproxy-wi
      
      RUN mkdir /var/www/haproxy-wi/keys/
      RUN mkdir /var/www/haproxy-wi/app/certs/
      RUN chown -R apache:apache /var/www/haproxy-wi/
      RUN pip3 install -r /var/www/haproxy-wi/requirements.txt --no-cache-dir
      RUN chmod +x /var/www/haproxy-wi/app/*.py
      RUN chmod +x /var/www/haproxy-wi/app/tools/*.py
      WORKDIR /var/www/haproxy-wi/app
      RUN ./update_db.py
      RUN chown -R apache:apache /var/www/haproxy-wi/
      RUN chown -R apache:apache /var/log/httpd/
      RUN tools/checker_master.py &
      
      RUN yum -y erase git python34-pip python34-devel gcc-c++  gcc-gfortran gcc --remove-leaves
      RUN yum -y autoremove yum-plugin-remove-with-leaves
      RUN yum clean all
      RUN rm -rf /var/cache/yum
      RUN rm -f /etc/yum.repos.d/*
      
      EXPOSE 80
      VOLUME /var/www/haproxy-wi/
      
      CMD /usr/sbin/httpd -DFOREGROUND


      1. alexkuzko
        11.08.2018 11:35

        Помните что каждая команда в докере — это слой? Однородные команды лучше в одну строку запиливать. Да, и по возможности, все эти update/install выносите в самый конец, чтобы остальные слои не затрагивать при обновлениях пакетов.
        Вообще, вы молодец, много кто просто боится выложить свои наработки.


        1. alexkuzko
          11.08.2018 11:38
          +1

          и сам себе отвечу, если вам сборка была нужна только чтобы получить бинарник или выполнить скрипт (ы), используйте мульти-стейдж сборку, в конечном образе не будет мусора. Ведь эти uninstall/purge уже не помогут, файлы останутся в низлежащих слоях образа.


          1. Aidaho12 Автор
            11.08.2018 11:43

            Ну надеюсь не зря выложил )

            Надо почитать, не сильно углублялся в сборку образов, спасибо за совет


          1. Aidaho12 Автор
            12.08.2018 09:27

            Воспользовался вашим советом и объединил все в один слой, теперь образ стал на 107 МБ меньше, и dockerfile выглядит так:

            FROM centos 
            MAINTAINER Pavel Loginov (https://github.com/Aidaho12/haproxy-wi) 
            
            COPY epel.repo /etc/yum.repos.d/epel.repo 
            
            RUN yum -y install httpd
            
            COPY haproxy-wi.conf /etc/httpd/conf.d/haproxy-wi.conf 
            
            RUN yum -y install git nmap-ncat python34 dos2unix python34-pip yum-plugin-remove-with-leaves svn gcc-c++ gcc gcc-gfortran python34-devel && \ 
            git clone https://github.com/Aidaho12/haproxy-wi.git /var/www/haproxy-wi && \ 
            mkdir /var/www/haproxy-wi/keys/ && \ 
            mkdir /var/www/haproxy-wi/app/certs/ && chown -R apache:apache /var/www/haproxy-wi/ && \ 
            pip3 install -r /var/www/haproxy-wi/requirements.txt --no-cache-dir && \ 
            chmod +x /var/www/haproxy-wi/app/*.py && \ 
            chmod +x /var/www/haproxy-wi/app/tools/*.py && \ 
            chown -R apache:apache /var/www/haproxy-wi/ && \ 
            chown -R apache:apache /var/log/httpd/ && \ 
            yum -y erase git python34-pip python34-devel gcc-c++ gcc-gfortran gcc --remove-leaves && yum -y autoremove yum-plugin-remove-with-leaves && \ 
            yum clean all && \ rm -rf /var/cache/yum && \ 
            rm -f /etc/yum.repos.d/* && \ 
            cd /var/www/haproxy-wi/app && \ 
            ./update_db.py 
            
            EXPOSE 80 VOLUME /var/www/haproxy-wi/ 
            
            CMD /usr/sbin/httpd -DFOREGROUND


      1. lioncub
        11.08.2018 20:59

        Спасибо, что показали Dockerfile. У Вас не automated build образ, посмотрите в эту сторону по возможности. И ещё бы рекомендовал делать на Alpine, но это из личных убеждений…


        1. Aidaho12 Автор
          12.08.2018 06:31

          Читал, когда только создал репозиторий, но я понял так, что мне это не подходит


        1. Aidaho12 Автор
          12.08.2018 09:35

          Получилось запустить, прям CI получился )

          Как бы теперь сделать, чтобы не хранить мусор для образа в основной репе… Пока создал другой репозиторий


  1. dragoangel
    12.08.2018 15:03

    В софтварном маршрутизаторе pfsense пакет haproxy тоже как и все остальное в нем настраивается через gui.


    1. Aidaho12 Автор
      12.08.2018 17:48

      Это да, но тут суть чуть-чуть другая. В pfsanse или snapt, ты можешь управлять только одним сервисом Haproxy, в случае pfsanse так еще и куча левого софта будет. А тут только хапрокси и огромное любое количество серверов… Ну и плюс плюшки, которых нет в pfasnse и snapt


      1. dragoangel
        13.08.2018 12:17

        ну как бы pfSense это шлюз, да его нет смысла держать ради HAproxy одного. HAproxy в pfSense это доп плюшка всеголишь, и он может работать в режиме Master и Slave если включить High Availability между 2мя pfSense.


        1. Aidaho12 Автор
          13.08.2018 12:22

          HAProxy тоже умеет мастер/слэйв, достаточно добавить keepalived и данная веб морда может помочь вам это сделать ;)

          ну как бы pfSense это шлюз, да его нет смысла держать ради HAproxy одного. HAproxy в pfSense это доп плюшка всеголишь

          ну я вот собственно о том же…