Usm satellite

    From WiKi - UserSide

    Описание

    Внешний модуль usm_satellite является прокси-сервером для выполнения сетевых запросов к оборудованию в сетях, доступ к узлам которых невозможен непосредственно из USERSIDE или значительно затруднен. usm_satellite также решает проблему больших задержек для требовательных к времени запросов, например icmp-ping.

    Внешний модуль usm_satellite взаимодействует с системой USERSIDE через протокол http (https). То есть, со стороны интерфейса USERSIDE он представляет собой WEB-API. USERSIDE обращается к модулю по протоколу http, передает ему команды и принимает результаты работы этих команд. Модуль usm_satellite, получив команду по http от системы USERSIDE выполняет ее, взаимодействуя с сетевым оборудованием по протоколам icmp, snmp, либо путем прямого обращения к оборудованию, либо выполняя консольные команды, такие как ping, arp, telnet.

    Требования

    • USERSIDE 3.13+
    • PHP 7.0+
    • PHP-extensions: mbstring, json, snmp

    Установка

    В данном разделе описывается установка модуля на операционную систему сервера. Если вам больше подходит запуск модуля в виде Docker-контейнера, обратитесь к соответствующему разделу ниже.

    Для работы модуля подойдет абсолютно любой сервер на любой операционной системе, на котором работает совместно WEB-сервер и PHP-интерпретатор. Это может быть связка Apache + PHP или Nginx + PHP-FPM или любой другой веб-сервер совместно с PHP. От сервера требуется только наличие WEB-сервера, интерпретатора РНР версии не ниже 7.0 и РНР-расширений: php-mbstring, php-snmp, php-json. Модуль может быть размещен как в отдельном виртуальном хосте, так и просто в подкаталоге уже существующего хоста (сайта), размещенного на этом сервере.

    Скачайте архив с модулем usm_satellite из личного кабинета, скопируйте его на сервер и разархивируйте. В итоге Вы получите каталог с файлами. Этот каталог следует переместить в удобное для вас место на вашем веб-сервере.

    Также настоятельно рекомендуем ограничить доступ к этому каталогу по http только с того IP-адреса, с которого к нему будет подключаться USERSIDE. Еще одним важным условием является настройка WEB-сервера таким образом, чтобы невозможно было просмотреть через http содержимое каталогов и файлов.

    Если это первая установка, перейдите в каталог config и сделайте копию файла config-example.php с именем config.php. Теперь откройте любым удобным редактором файл config.php, придумайте (а лучше сгенерируйте) длинный сложный ключ доступа для этого сателлита и впишите его в занчение переменной 'key' этого файла. Ключ должен быть минимум 8 символов, среди которых должны быть как буквы так и цифры. Лучше, если это будет сгенерированный случайным образом хэш длиной не менее 32 символов. Там же можно поменять путь к лог-файлам, если в этом есть необходимость.

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

    echo "моя сложная парольная фраза" | sha256sum
    echo "моя сложная парольная фраза" | sha1sum
    pwgen -s 32 1
    

    Проверка работоспособности

    Теперь просто откройте в браузере URL, по которому доступен usm_satellite. Вы должны увидеть ошибку аутентификации, которая выглядит следующим образом:

    {
      "code": 401,
      "name": "Unauthorized",
      "message": "Invalid authentication. Access keys do not match."
    }
    

    Если Вы видите такое сообщение об ошибке - значит все настроено корректно. Это же сообщение об ошибке вы должны видеть и в лог-файле (по умолчанию, если Вы не изменяли его местоположение, он находится в каталоге log).

    2021-10-15 15:10:08|1.1|ERROR  |401| SatelliteException[Unauthorized]: Invalid authentication. Access keys do not match.
    

    Запуск с использованием Docker

    Вместо установки и настройки WEB-сервера, PHP, расширений и всего остального, можно воспользоваться готовым Docker-образом.

    Установка

    Если вы еще не установили Docker, то это можно сделать следующим способом:

    sudo curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
    

    Следующие действия создают группу docker и добавляют в нее текущего пользователя системы (чтобы текущий пользователь имел полный доступ к Docker). Эти действия можно пропустить, если в этом нет необходимости, но тогда придется все команды запускать от имени суперпользователя (через sudo):

    sudo groupadd docker
    sudo gpasswd -a $USER docker
    newgrp docker
    

    Далее необходимо создать каталог для логов модуля:

    sudo mkdir -p /var/log/usm_satellite && sudo chown 777 /var/log/usm_satellite
    

    Теперь запустите контейнер следующим образом (вместо ключ_доступа_здесь укажите ваш желаемый ключ доступа к модулю):

    docker run -d --name usm_satellite \
        --restart always \
        -e API_KEY=ключ_доступа_здесь \
        -p 8080:8080 \
        -v /var/log/usm_satellite:/app/log \
        -v /etc/localtime:/etc/localtime:ro \
        -v /etc/timezone:/etc/timezone:ro \
        erpuserside/usm_satellite
    

    В данной конфигурации будет использован порт 8080 на сервере для трансляции в контейнер. Если вам нужен другой порт, например, стандартный порт 80, то измените параметр следующим образом (порт 8080 справа должен оставаться таким же):

    -p 80:8080 \
    

    Если бы вы хотели, чтобы usm_satellite был доступен только на определенном интерфейсе, укажите его IP-адрес следующим образом:

    -p 203.0.113.12:80:8080 \
    

    Если таких интерфейсов должно быть несколько — добавьте еще один параметр -p

    -p 203.0.113.12:80:8080 \
    -p 192.168.1.10:80:8080 \
    
    • символы \ в конце служебные и необходимы для указания того, что команда продолжается со следующей строки, а не завершается.

    Контейнер будет автоматически запускаться при старте сервера, а также перезапускаться, если произойдет какой либо внутренний сбой в работе.

    Обслуживание

    Логи модуля пишутся в каталог, который подключен к контейнеру. В примере выше это каталог /var/log/usm_satellite. В нем создается файл журнала модуля с именем usm_satellite.log. Ротация логов осуществляется автоматически раз в неделю с сохранением последних 4-х файлов.

    При отладке работы возможно понадобится записывать в лог модуля отладочную информацию. Для этого остановите контейнер:

    docker stop usm_satellite
    

    А затем запустите его снова, добавив в параметры команды, указанной выше, еще одну переменную окружения:

    -e LOG_SERENITY=debug \
    

    По завершении отладки желательно перезапустить контейнер без этого параметра, т.к. в противном случае в лог будет записываться слишком много информации.

    Кроме лога модуля также существуют логи системных процессов контейнера (nginx, fpm, supervisor и т.д.) — они, как это требуется, выводятся в стандартный вывод контейнера (stdout + stderr). Так как вышеприведенная команда запускает контейнер в фоновом режиме, то эти логи можно просмотреть командой:

    docker logs usm_satellite
    

    Либо, если нужно наблюдать за логами, то:

    docker logs usm_satellite -f
    

    Если запустить контейнер не в фоновом режиме, то системные логи будут выводиться в консоль.

    Обновление версии модуля

    Для обновления выполните следующие команды:

    docker stop usm_satellite
    docker rm usm_satellite
    docker pull erpuserside/usm_satellite
    

    После чего запустите контейнер снова, как показано выше.

    Удаление контейнера

    Если вам понадобилось удалить контейнер и связанный с ним образ, то выполните:

    docker stop usm_satellite
    docker rm usm_satellite
    docker rmi erpuserside/usm_satellite
    

    Настройка в USERSIDE

    См: Сателлиты