Внешняя настройка приложений

Материал из ISPWiki
Перейти к: навигация, поиск

Иногда, после установки приложений, необходимо выполнить его первоначальную настройку в соответствии с определенными требованиями. Во всех продуктах ISPsystem на основе Core встроен механизм внешней настройки установленного приложения как при их непосредственной установке, так и при обновлении и в любой другой момент эксплуатации.

Как это работает

Во время установки любой из наших панелей, после проверки лицензии, панель получает из лицензии специальный адрес сервера настройки "settingurl", наличие которого говорит ей о том, что для дальнейшей установки необходимо получить инструкции по указанному адресу. "settingurl" добавляется в лицензии пользователя, если для этого пользователя сделана соответствующая настройка в билинге my.ispsystem.com.

Далее, панель выполняет переход по указанному адресу, где в качестве параметра запроса указывает идентификатор текущей лицензии.

Сервер производит поиск лицензии и в случае ее обнаружения, возвращает XML-документ ответа зашифрованный при помощи алгоритма XXTEA и преобразованный в его шестнадцатеричное представление, где в качестве ключа шифрования использован ключ активации лицензии.

Панель производит расшифровку ответа с помощью известного ей ключа активации лицензии и, в случае успеха, начинает выполнение описанных там инструкций.

 Примечание:
 В случаях, когда серверу самостоятельно необходимо инициализировать внешнюю настройку, он производит вызов функции "xset.up"
 клиентской панели. После чего, панель начинает выполнение описанных выше действий и к параметрам запроса добавляет все
 параметры указанные при инициализации, т.е. вызове "xset.up". Таким образом, функция "xset.up" является своего рода обратным
 вызовом.

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 с именем модуля, которой был установлен (этот параметр имеет пустое значение для основного пакета)