Внешняя настройка приложений
Иногда, после установки приложений, необходимо выполнить его первоначальную настройку в соответствии с определенными требованиями. В Core встроен механизм внешней настройки установленного приложения как при их непосредственной установке, так и при обновлении и в любой другой момент эксплуатации.
Как это работает
Во время установки панели управления ispmanager, после проверки лицензии, панель получает из лицензии специальный адрес сервера настройки "settingurl". Наличие этого адреса сообщает панели о том, что для дальнейшей установки необходимо получить инструкции по указанному адресу.
Далее, панель выполняет переход по указанному адресу, где в качестве параметра запроса указывает идентификатор текущей лицензии.
Сервер производит поиск лицензии и в случае её обнаружения, возвращает XML-документ ответа зашифрованный при помощи алгоритма XXTEA и преобразованный в его шестнадцатеричное представление. В качестве ключа шифрования используется ключ активации лицензии.
Панель производит расшифровку ответа с помощью известного ей ключа активации лицензии и, в случае успеха, начинает выполнение описанных там инструкций.
XML-документ ответа
Формат ответа:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<func name="xset.up.param">
<arg name="grant">x.x.x.x</arg>
</func>
<func name="имя функции">
<arg name="имя параметра">значение</arg>
</func>
...
</doc>
Таким образом, сервер присылает панели набор команд, которые необходимо выполнить в данный момент.
Список разрешенных на данный момент функций:
- ipaddrlist.delete;
- ipaddrlist.edit;
- dnsparam;
- xset.up.param;
- slaveserver.delete;
- slaveserver.edit;
- backup2.settings.
Специальная функция xset.up.param, сообщает панели с каких IP-адресов разрешено инициализировать процесс внешней настройки.
Пример сервера внешней настройки
- Создайте файл /tmp/settings.py следующего вида:
#!/usr/bin/env python from flup.server.fcgi import WSGIServer from xxtea import encrypt import struct def app(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><doc><func name=\"ipaddrlist.edit\">ваши настройки</func></doc>" key = "1515848-bXy1Avllp4E5VnyI1394582400" # ключ активации моей лицензии! вам необходимо получить его из биллинга по переданному ID ln = len(data) data += "\0" * ((4 — (ln % 4)) & 3) data += struct.pack("i", ln); return [ encrypt(data, key, True) ] WSGIServer(app, bindAddress=('localhost', 9002)).run()
- В конфигурационный файл nginx добавьте следующий блок:
server { listen 80; root /tmp; location /setting.py { fastcgi_pass 127.0.0.1:9002; include fastcgi_params; } }
- Запустите скрипт и перезапустите nginx.
Теперь, если в лицензию включить параметр settingurl с адресом вашего сервера и произвести установку панели, то будут выполнены инструкции, переданные вашим сервером.
Параметры settingurl
Панель будет обращаться к settingurl после установки/обновления каждого модуля.
В запросе будет передано два параметра. Это elid со значением install или update.
И module с именем модуля, которой был установлен (этот параметр имеет пустое значение для основного пакета).