На сегодняшний день большинство провайдеров, помимо стандартных услуг хостинга, доменов и 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, и хочется его установить – инструкцию по развёртыванию можно найти здесь.
Поделиться с друзьями
-->

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


  1. 8ll
    17.08.2016 14:07
    +1

    А не проще было сделать API?


    1. citius
      18.08.2016 00:13

      Для этого же программист нужен. А тут только админ с башем в наличии.


      1. 8ll
        18.08.2016 01:08

        curl https://example.com/api/ можно и из баша дернуть.


        1. foxmuldercp
          26.08.2016 13:01

          Приблизительно так 1ска и разные црмки пинают всякие Плески и т.п платформы. только там еще хмлки генерятся кое где


    1. Nesmiyanov
      18.08.2016 06:32

      У BILLmanager API есть; документация, если нужно, находится в общедоступной Wiki. Другой момент – как Вы предполагаете использовать эту вещь для продажи нехостинговых услуг?

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


      1. 8ll
        18.08.2016 08:24

        Каким образом запускаются скрипты на стороне клиента?

        Все уже давно придумано, webhooks.


  1. rmpl
    17.08.2016 18:44

    Это правда прекрасно. Но зачем?


    1. Nesmiyanov
      18.08.2016 04:32

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


  1. rrrav
    17.08.2016 20:42

    Идея хорошая, но

    Дело в том, что скрипты проще написать: программист не нужен; знающего BASH системного администратора вполне достаточно.

    — немного обидно стало за системного администратора — какой то человек 2 сорта. А ведь кроме BASH, любой сисадмин пишет/исправляет программы и на perl, и на python, и куче других языков, которые в системе обязательно присутствуют, и является программистом-универсалом.
    А на python как-то более понятно и приятно выглядел бы код, хотя у каждого свой путь.


    1. Nesmiyanov
      18.08.2016 04:39

      Прошу прощения, не хотел никого оскорбить.
      Я имел в виду, что системный администратор чаще встречается в хостинговых компаниях-стартапах, в отличие от программиста. С shell-скриптами не нужно нанимать дополнительного человека, расходы сокращаются. К тому же обработчики нужно писать на C++. Из собственного опыта скажу: среди моих знакомых сисадминов на C++ пишет в лучшем случае четверть. По крайней мере такова ситуация у нас в регионе. Как в Вашей местности с этим дело обстоит я не знаю, но надеюсь, что гораздо позитивнее.
      Реализовать поддержку python – хорошая идея. Вынесу на обсуждение руководству.


      1. Nesmiyanov
        18.08.2016 11:40

        UPD: Пришёл с совещания. Прошу прощения, глупость сморозил; из shell-скрипта же можно вызвать скрипт на питоне, передав туда нужные параметры. Да и вообще что угодно вызвать. Так что тут у сисадмина или программиста в плане выбора языка написания кода полностью развязаны руки.


        1. jaredhared
          18.08.2016 17:39

          Шелл-скрипт изначально может быть написан не на шелле, тут выбор широкий. А вот отсутствие возможности изменить параметры уже открытой услуги — это плохо, писал уже об этом у вас на форуме. В примере с фтп-демоном это может быть например, скорость доступа к фтп, которую клиент захочет изменить с переходом на старший тариф.


          1. Nesmiyanov
            19.08.2016 06:47

            Да, к сожалению, параметры услуги после её открытия действительно не поменять. Данная возможность сейчас находится в разработке.


            1. foxmuldercp
              26.08.2016 14:57

              Вообще хорошим тоном является хранение всех настроек в SQL хранилище, и почти все сервисы умеют ходить туда за логинами, паролями и параметрами пользователей — что фтп сервера, что почтовые, что лдап с pam. Так что ничего сложного и страшного в этом нет, говорю как человек, доработавший достаточно долго в хостингах до хостмастера и пишуший свое решение по управлению услугами хостинга, т.к текущие реализации вроде Плеска или ЦПанели меня не устраивают