Документация COREmanager
Ваше мнение имеет значение!
Примите участие в опросе и помогите нам сделать продукты и сервисы ISPsystem еще лучше!
Пройти опрос

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

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

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

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

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

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

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

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

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

Пример сервера внешней настройки

  1. Создайте файл /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()
  2. В конфигурационный файл nginx добавьте следующий блок:

    server {
      listen 80;
      root /tmp;
      location /setting.py {
        fastcgi_pass 127.0.0.1:9002;
        include fastcgi_params;
      }
    }
  3. Запустите скрипт и перезапустите nginx.

Теперь, если в лицензию включить параметр settingurl с адресом вашего сервера и произвести установку панели, то будут выполнены инструкции, переданные вашим сервером.

Параметры settingurl

Панель будет обращаться к settingurl после установки/обновления каждого модуля.

В запросе будет передано два параметра. Это elid со значением install или update.

И module с именем модуля, которой был установлен (этот параметр имеет пустое значение для основного пакета)