На сегодняшний день большинство провайдеров, помимо стандартных услуг хостинга, доменов и 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”, идентификатор, а также данные для авторизации на сервере, чтобы потом передать эту информацию клиенту.
#!/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.
#!/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 и возвращаем всё как было.
#!/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.
#!/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)
rmpl
17.08.2016 18:44Это правда прекрасно. Но зачем?
Nesmiyanov
18.08.2016 04:32Если хочется продавать, скажем, копии Windows в коробках с доставкой до клиента, то стандартным BILLmanager этого не реализовать. А shell-скриптами можно. Вопрос лишь заморочиться с красивой реализацией.
Если вопрос про «зачем хостерам предоставлять нехостинговые услуги», то тут ответ прост: конкуренция же. Если продаёшь, например, сопутствующие к VDS товары, то клиенты радуются: всё что нужно в одном месте купил, никуда больше идти не надо.
rrrav
17.08.2016 20:42Идея хорошая, но
Дело в том, что скрипты проще написать: программист не нужен; знающего BASH системного администратора вполне достаточно.
— немного обидно стало за системного администратора — какой то человек 2 сорта. А ведь кроме BASH, любой сисадмин пишет/исправляет программы и на perl, и на python, и куче других языков, которые в системе обязательно присутствуют, и является программистом-универсалом.
А на python как-то более понятно и приятно выглядел бы код, хотя у каждого свой путь.Nesmiyanov
18.08.2016 04:39Прошу прощения, не хотел никого оскорбить.
Я имел в виду, что системный администратор чаще встречается в хостинговых компаниях-стартапах, в отличие от программиста. С shell-скриптами не нужно нанимать дополнительного человека, расходы сокращаются. К тому же обработчики нужно писать на C++. Из собственного опыта скажу: среди моих знакомых сисадминов на C++ пишет в лучшем случае четверть. По крайней мере такова ситуация у нас в регионе. Как в Вашей местности с этим дело обстоит я не знаю, но надеюсь, что гораздо позитивнее.
Реализовать поддержку python – хорошая идея. Вынесу на обсуждение руководству.Nesmiyanov
18.08.2016 11:40UPD: Пришёл с совещания. Прошу прощения, глупость сморозил; из shell-скрипта же можно вызвать скрипт на питоне, передав туда нужные параметры. Да и вообще что угодно вызвать. Так что тут у сисадмина или программиста в плане выбора языка написания кода полностью развязаны руки.
jaredhared
18.08.2016 17:39Шелл-скрипт изначально может быть написан не на шелле, тут выбор широкий. А вот отсутствие возможности изменить параметры уже открытой услуги — это плохо, писал уже об этом у вас на форуме. В примере с фтп-демоном это может быть например, скорость доступа к фтп, которую клиент захочет изменить с переходом на старший тариф.
Nesmiyanov
19.08.2016 06:47Да, к сожалению, параметры услуги после её открытия действительно не поменять. Данная возможность сейчас находится в разработке.
foxmuldercp
26.08.2016 14:57Вообще хорошим тоном является хранение всех настроек в SQL хранилище, и почти все сервисы умеют ходить туда за логинами, паролями и параметрами пользователей — что фтп сервера, что почтовые, что лдап с pam. Так что ничего сложного и страшного в этом нет, говорю как человек, доработавший достаточно долго в хостингах до хостмастера и пишуший свое решение по управлению услугами хостинга, т.к текущие реализации вроде Плеска или ЦПанели меня не устраивают
8ll
А не проще было сделать API?
citius
Для этого же программист нужен. А тут только админ с башем в наличии.
8ll
curl https://example.com/api/ можно и из баша дернуть.
foxmuldercp
Приблизительно так 1ска и разные црмки пинают всякие Плески и т.п платформы. только там еще хмлки генерятся кое где
Nesmiyanov
У BILLmanager API есть; документация, если нужно, находится в общедоступной Wiki. Другой момент – как Вы предполагаете использовать эту вещь для продажи нехостинговых услуг?
Если я не ответил на Ваш вопрос, то уточните, пожалуйста, какой API Вы имели в виду.
8ll
Каким образом запускаются скрипты на стороне клиента?
Все уже давно придумано, webhooks.