BILLmanager. Теперь при помощи shell-скриптов можно продавать что угодно



    На сегодняшний день большинство провайдеров, помимо стандартных услуг хостинга, доменов и SSL, предоставляют и различные “нехостинговые” сервисы. Например, VPN или стриминг. Возникает вопрос: как организовать их подключение для клиента в BILLmanager? Можно давать доступ вручную, но что делать, если заявок на подключение прорва? Автоматизировать процесс, конечно! Недавно в BILLmanager появилось ещё одно решение для автоматизации продаж, и мы хотим об этом рассказать.

    В статье речь пойдёт о том, как при помощи shell-скриптов своими силами настроить продажу нестандартных услуг в нашей биллинговой платформе.


    Возможно, у опытных пользователей возникнет вопрос: “Но для BILLmanager же есть дополнительные модули, зачем shell-скрипты?” Дело в том, что скрипты проще написать: программист не нужен; знающего BASH системного администратора вполне достаточно.

    Итак, подумаем: для каких услуг потребуется написание скриптов. Навскидку приходит несколько вариантов: для продажи ключей активации к тому или иному ПО, для предоставления места на ftp-сервере под хранение резервных копий, для реализации стриминга, торговли черничными маффинами и смузи. Разумеется, список можно продолжить, он ограничен только фантазией.

    Рассмотрим пример продажи доступа к ftp-серверу с каким-то ценным содержимым. Пусть это будут регулярно обновляемые векторные карты местности.

    Выясним, каковы технические требования. Согласно документации необходимо 4 скрипта: для заказа, приостановки, возобновления и прекращения доступа.

    В первый скрипт (open.sh) передаются автоматически сгенерированные имя пользователя и пароль, а также могут передаваться какие-то дополнительные параметры, необходимые для работы скрипта. На выходе должна быть строка начинающаяся с “OK” и содержащая параметр “--id”: уникальный идентификатор созданной услуги. Допускается также возвращать дополнительные параметры; например, ссылку на ftp-сервер, чтобы показать её заказавшему сервис пользователю.

    В остальные скрипты (suspend.sh, resume.sh, close.sh) передаётся уникальный идентификатор созданной услуги (--id), а на выходе должна быть строка “OK”.

    Итак, приступим. Пусть в нашем случае файловым сервером будет ProFTPD.

    Для того чтобы дать клиенту доступ к картам, нужно создать пользователя и назначить ему пароль. Для этого воспользуемся теми параметрами, которые BILLmanager генерирует автоматически: так мы получаем ещё и ID услуги, поскольку юзернейм создаётся уникальным. Достаём значения из строки параметров, затем вызываем useradd, а потом назначаем пароль с помощью passwd. Осталось вернуть “OK”, идентификатор, а также данные для авторизации на сервере, чтобы потом передать эту информацию клиенту.

    Результат: open.sh
    #!/bin/bash
    for i
    do
    	if [ ${i:0:6}  = "--user" ] 
    	then
    		username=${i:7}
    	elif [ ${i:0:10} = "--password" ]
    	then
    		password=${i:11}
    	fi
    done
    useradd $username -d /home/ftp_folder -m -s /bin/false
    echo $password | passwd --stdin $username > /dev/null
    echo "OK --id=$username --username=$username --password=$password"
    


    Услугу подключили. Сделаем механизм приостановки доступа на случай, если закончится баланс на счёте клиента. По полученному ID вызываем usermod и меняем домашний каталог на /dev/null.

    Результат: suspend.sh
    #!/bin/bash
    for i
    do
    	string=${i}
    	if [ ${string:0:4} = "--id" ]
    	then
    	username=${string:5}
    	fi
    done
    usermod -d /dev/null $username
    echo "OK"
    


    Если оплата поступила, надо вернуть возможность получения карт. Снова “зовём” usermod и возвращаем всё как было.

    Результат: resume.sh
    #!/bin/bash
    for i
    do
    	string=${i}
    	if [ ${string:0:4} = "--id" ]
    	then
    	username=${string:5}
    	fi
    done
    usermod -d /home/ftp_folder $username
    echo "OK"
    


    И, наконец, если предоставление услуги по каким-либо причинам более не планируется, то нужно удалить пользователя. Используя всё тот же идентификатор, запускаем userdel.

    Результат: close.sh
    #!/bin/bash
    for i
    do
    	string=${i}
    	if [ ${string:0:4} = "--id" ]
    	then
    	username=${string:5}
    	fi
    done
    userdel $username
    echo "OK"
    


    Всё, написание кода завершено. Реализованные скрипты копируем в отдельную директорию на машину, откуда будут раздаваться карты, и применяем на них “chmod +x”. Кроме этого следует проверить, что ftp-сервер “смотрит” в /etc/passwd. За это отвечает строка AuthOrder в файле etc/proftpd.conf. Чтобы всё работало, в ней должно быть mod_auth_unix.c.

    Теперь выполним настройки в BILLmanager. Нужно создать новый тип продукта, а затем тарифный план данного типа. После этого в качестве модуля обработки выбрать Shellscripts и дождаться завершения его установки. Если возникнет запрос на создание дата-центра — создаём его. На следующем этапе указываем IP-адрес ftp-сервера, заполняем данные аутентификации и путь к папке со скриптами. После нажатия на “Далее” вписываем произвольное название обработчика. Затем повторно выбираем тип продукта, указываем наименования, обработчик и цены. Осталось обозначить дополнительные параметры, которые передаются из скрипта open.sh. В типах продуктов выбираем только что созданный тип, щёлкаем “Параметры”, “Создать”. Создаём 2 параметра в соответствии со скриптом open.sh, отмечаем в них флажок “Показывать при открытии”, а также в выпадающем списке “Доступ для изменения” выбираем “Сотрудник”.

    Настройки выполнены, и теперь услугу можно подключать клиентам.

    Итак, тема shell-скриптов раскрыта. С радостью ответим на ваши вопросы, а также будем благодарны за обратную связь по статье. Успехов в разработке услуг!

    P.S. Если у вас не установлен BILLmanager, и хочется его установить – инструкцию по развёртыванию можно найти здесь.
    ISPsystem
    165,00
    Софт для хостинга: ISPmanager, BILLmanager и др.
    Поделиться публикацией

    Комментарии 14

      +1
      А не проще было сделать API?
        0
        Для этого же программист нужен. А тут только админ с башем в наличии.
          0
          curl https://example.com/api/ можно и из баша дернуть.
            0
            Приблизительно так 1ска и разные црмки пинают всякие Плески и т.п платформы. только там еще хмлки генерятся кое где
          0
          У BILLmanager API есть; документация, если нужно, находится в общедоступной Wiki. Другой момент – как Вы предполагаете использовать эту вещь для продажи нехостинговых услуг?

          Если я не ответил на Ваш вопрос, то уточните, пожалуйста, какой API Вы имели в виду.
            0
            Каким образом запускаются скрипты на стороне клиента?

            Все уже давно придумано, webhooks.
          0
          Это правда прекрасно. Но зачем?
            0
            Если хочется продавать, скажем, копии Windows в коробках с доставкой до клиента, то стандартным BILLmanager этого не реализовать. А shell-скриптами можно. Вопрос лишь заморочиться с красивой реализацией.
            Если вопрос про «зачем хостерам предоставлять нехостинговые услуги», то тут ответ прост: конкуренция же. Если продаёшь, например, сопутствующие к VDS товары, то клиенты радуются: всё что нужно в одном месте купил, никуда больше идти не надо.
            0
            Идея хорошая, но
            Дело в том, что скрипты проще написать: программист не нужен; знающего BASH системного администратора вполне достаточно.

            — немного обидно стало за системного администратора — какой то человек 2 сорта. А ведь кроме BASH, любой сисадмин пишет/исправляет программы и на perl, и на python, и куче других языков, которые в системе обязательно присутствуют, и является программистом-универсалом.
            А на python как-то более понятно и приятно выглядел бы код, хотя у каждого свой путь.
              0
              Прошу прощения, не хотел никого оскорбить.
              Я имел в виду, что системный администратор чаще встречается в хостинговых компаниях-стартапах, в отличие от программиста. С shell-скриптами не нужно нанимать дополнительного человека, расходы сокращаются. К тому же обработчики нужно писать на C++. Из собственного опыта скажу: среди моих знакомых сисадминов на C++ пишет в лучшем случае четверть. По крайней мере такова ситуация у нас в регионе. Как в Вашей местности с этим дело обстоит я не знаю, но надеюсь, что гораздо позитивнее.
              Реализовать поддержку python – хорошая идея. Вынесу на обсуждение руководству.
                0
                UPD: Пришёл с совещания. Прошу прощения, глупость сморозил; из shell-скрипта же можно вызвать скрипт на питоне, передав туда нужные параметры. Да и вообще что угодно вызвать. Так что тут у сисадмина или программиста в плане выбора языка написания кода полностью развязаны руки.
                  0
                  Шелл-скрипт изначально может быть написан не на шелле, тут выбор широкий. А вот отсутствие возможности изменить параметры уже открытой услуги — это плохо, писал уже об этом у вас на форуме. В примере с фтп-демоном это может быть например, скорость доступа к фтп, которую клиент захочет изменить с переходом на старший тариф.
                    0
                    Да, к сожалению, параметры услуги после её открытия действительно не поменять. Данная возможность сейчас находится в разработке.
                      0
                      Вообще хорошим тоном является хранение всех настроек в SQL хранилище, и почти все сервисы умеют ходить туда за логинами, паролями и параметрами пользователей — что фтп сервера, что почтовые, что лдап с pam. Так что ничего сложного и страшного в этом нет, говорю как человек, доработавший достаточно долго в хостингах до хостмастера и пишуший свое решение по управлению услугами хостинга, т.к текущие реализации вроде Плеска или ЦПанели меня не устраивают

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое