Описание
В состав SoftWLC включен WEB-портал, с помощью которого реализуется модель авторизации hotspot-клиентов. Неизвестный системе пользователь может свободно (без получения заранее логина и пароля) подключиться к точке доступа, но при попытке выйти в интернет через браузер пользователь перенаправляется на страницу WEB-портала, на которой может по выбору пройти процедуру авторизации или получения данных для авторизации (например, с помощью SMS). В процессе выполнения процедуры авторизации абонент может наблюдать рекламные сообщения в виде баннеров, кастомизированных в соответствии с требованиями оператора.
Данный сервис используется для отображения страниц виртуальных порталов и проведения регистрации и авторизации пользователей Wi-Fi, подключающихся к точкам доступа Eltex или при помощи ESR/BRAS.
Во время инициализации сервиса eltex-portal и до полной его загрузки, вместо портала будет отображаться страница "Warming up", что свидетельствует о том, что портал еще в процессе инициализации, а модули сервиса находятся в процессе конфигурации. После того как сервис eltex-portal полностью загрузился, будет произведен автоматический редирект пользователя на главную страницу портала.
Пример страницы инициализации портала:
Управление сервисом
Установка сервиса
apt-get install eltex-portal
Сбособы запуска/остановки сервиса
Действие | Команда | Ответ |
---|---|---|
Проверка состояния | service eltex-portal status | Сервис работает eltex-portal start/running, process <pid> Сервис не работает eltex-portal stop/waiting |
Запуск сервиса | service eltex-portal start | Сервис успешно запущен eltex-portal start/running, process <pid> Сервис уже работает start: Job is already running: eltex-portal |
Остановка сервиса | service eltex-portal stop | Сервис успешно остановлен eltex-portal stop/waiting Сервис не остановлен, т.к. не был запущен stop: Unknown instance: |
Перезапуск сервиса | service eltex-portal restart | Сервис успешно перезапущен eltex-portal stop/waiting eltex-portal start/running, process <pid> stop: Unknown instance: eltex-portal start/running, process <pid> |
Создание пользователя в БД MySQL
Чтобы сервис eltex-portal получил доступ для работы с БД MySQL необходимо создать пользователя.
eltex-potal create-db-user -h <server_ip>
При выполнении данной команды происходит подключение к БД и создание пользователя указанного в настройка конфигурационного файла /etc/eltex-portal-constructor/application.conf
Конфигурация
/etc/eltex-portal/application.conf
Cодержит основные настройки сервиса:
Параметры | Описание |
---|---|
portal | |
defaultRedirectUrl | Адрес, на который будет выполнено перенаправление пользователя, в случае необходимости перезапуска его сессии на портале. Должен быть настроен по протоколу http. |
tariffCheckerPeriod | Интервал выполнения проверки наличия тарифных планов на порталах. В случае отсутствия тарифного плана: формируется сообщение об ошибке. |
promoBindingsCleaner | period - настройка периода проверки привязок, показанных баннеров клиенту. Указывается в минутах/часах/днях m/h/d bindingsLifetime - время жизни привязки, показанного баннера клиенту. Указывается в минутах/часах/днях m/h/d |
paymentsCleanerPeriod | Период очистки записей о неуспешной оплате тарифа в БД портала. Указывается в формате cron. |
jetty | |
https | Настройки работы контейнера по https. Необходимо указать расположение сертификата, ключ и прослушиваемый порт. port - прослушиваемый порт keystorePass - ключ от хранилища сертификатов keystoreFile - файл хранилища, содержащий сертификат keystoreType - тип хранилища certAlias - алиас сертификата в хранилище ciphers - поддерживаемые методы шифрования |
database | |
host | Адрес сервера БД |
port | Порт, на который сервер БД принимает входящее подключение |
name | Название БД |
user | Имя пользователя БД |
password | Пароль пользователя БД |
pool | Управление соединениями к БД connectionTimeout - Время жизни коннекта при бездействии validationTimeout - интервал проверки бездействующих коннектов min - минимальное количество коннектов max - максимальное количество коннектов |
cache | Настройки кэширования maxEntries - максимальное количество элементов в кэше maxResourceBytes - размер кэша expireTime - время хранения данных в кэше |
validation | Подключение к сервису eltex-doors public_key - путь до ключа для валидации JWT |
/etc/default/eltex-portal
Cодержит параметры, необходимые для инициализации сервиса.
Параметры | Описание |
---|---|
PORT | Порт, на который сервис будет принимать соединения |
JAVA_INIT_HEAP | Количество памяти, выделяемое на работу сервиса при старте. Рекомендуется выставлять равное JAVA_MAX_HEAP. |
JAVA_MAX_HEAP | Максимальное количество памяти, которое может зарезервировать сервис |
JAVA_OPTS | Дополнительные опции для запуска jvm |
/etc/eltex-portal/log4j2.xml
Содержит настройки логирования работы сервиса.
- Интервал автоматического перечитывания конфигурации логгера:
<Configuration monitorInterval="10">
- Уровень логирования:
<Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property>
- Базовая директория хранения логов:
<Property name="baseDir">/var/log/eltex-portal</Property>
- Максимально допустимый размер файла (при его превышении создается новый файл. а старый архивируется):
<Property name="maxFileSize">20 MB</Property>
- Суммарный размер логов (текущий файл + архивные). При его превышении наиболее старые файлы будут удаляться:
<Property name="accumulatedFileSize">10 GB</Property>
- Срок хранения логов, файлы модифицированные раннее этого срока будут удаляться:
<Property name="lastModified">4d</Property>
- Максимальное количество архивных файлов, при его превышении наиболее старые файлы будут перезаписываться:
<Property name="maxCount">20</Property>
- Блок настройки перенаправления логов в Graylog (уровень логирования, адрес, порт):
<Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property> <Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property> <Property name="gelfPort">${env:GELF_PORT:-12201}</Property>
Описание ошибок в логах
Лог-файл: /var/log/eltex-portal/log_ep.txt
Название | Значение | Пример |
---|---|---|
CHECK LOGIN AND PSW IN smsc_gate.conf | Проблема доступности NGW к сервису отправки SMS сообщений | 2018-08-22T09:38:56,420 [SimpleContainerScope.Executor@266376052-35] ERROR org.eltex.portal.sms.SendSmsWithPswResponseHandler SendSmsWithPswResponseHandler.onResult(line:53). Error while sending message on number: 79529056800. ErrorCode: 10, errMessage: 79529056800. Received error code = 1. CHECK LOGIN AND PSW IN smsc_gate.conf. Error in the parameters of function of dispatch sms via http protocol |
NGW_NOT_AVAILABLE | Проблема доступности портала к сервису NGW | 2020-07-09T09:45:07,827 [qtp76432244-17] ERROR org.eltex.portal.sms.NotificationClient NotificationClient.getConfigurationInfo(line:527). Can`t connect to Ngw server with code: 1601 code 1601:NGW_NOT_AVAILABLE and reason: NgwException{FAILED: 'Protocol is not supported by the server: eltex-ngw-api#1.16.5'} |
Мониторинг
Для мониторинга сервиса APB поддержаны совместимые с Prometheus метрики. Для просмотра списка метрик надо открыть:
http://<адрес сервера Eltex-portal>:9000/eltex_portal/api/metrics
Для запуска мониторинга со стороны Prometheus нужно добавить в его конфигурации:
- job_name: 'portal-server' scrape_interval: 5s metrics_path: /eltex_portal/api/metrics static_configs: # external address of the Portal server - targets: [ '<адрес сервера Eltex-portal>:9000' ]
Grafana и Prometheus можно запустить в docker используя docker-compose.yml:
version: '3' services: portal-prometheus: image: prom/prometheus:v2.25.0 volumes: - ./prometheus/:/etc/prometheus/ command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' ports: - 9090:9090 networks: - portal-monitoring portal-grafana: image: grafana/grafana:7.4.2 volumes: - ./grafana/provisioning/:/etc/grafana/provisioning ports: - 3000:3000 depends_on: - portal-prometheus networks: - portal-monitoring networks: portal-monitoring:
Шаблоны для Grafana, Prometheus и docker-compose.yml можно взять из архива: portal_monitoring.zip. Для запуска нужно извлечь данные из архива, перейти в директорию и запустить:
docker-compose up
Докеризация сервиса
Сервис может быть запущен в docker-контейнере. Для этого необходимо подготовить файл с переменными окружения .env и docker-compose.yml
version: "3" services: eltex-portal: container_name: eltex-portal image: hub.eltex-co.ru/softwlc/eltex-portal:1.20-<tag> ports: - 9000:${PORTAL_PORT} - 9443:${PORTAL_HTTPS_PORT} environment: - PORT=${PORTAL_PORT} - portal.defaultRedirectUrl=${PORTAL_DEFAULT_REDIRECT_URL} - database.host=${PORTAL_DATABASE_HOST} - database.port=${PORTAL_DATABASE_PORT} - database.name=${PORTAL_DATABASE_NAME} - database.user=${PORTAL_DATABASE_USER} - database.password=${PORTAL_DATABASE_PASSWORD} - jetty.https.port=${PORTAL_HTTPS_PORT} - jetty.https.keystorePass=${PORTAL_HTTPS_KEYSTORE_PASS} - jetty.https.keystoreFile=${PORTAL_HTTPS_KEYSTORE_FILE} - validation.public_key=${PORTAL_PUBLIC_KEY} volumes: - /etc/eltex-doors/keys/public.pem:${PORTAL_PUBLIC_KEY}:ro
PORTAL_PORT=9000 PORTAL_HTTPS_PORT=9443 PORTAL_HTTPS_KEYSTORE_PASS=12345 PORTAL_HTTPS_KEYSTORE_FILE=/etc/eltex-portal/localhost.pfx PORTAL_DEFAULT_REDIRECT_URL=http://eltex-co.ru PORTAL_PUBLIC_KEY=/etc/eltex-doors/keys/public.pem PORTAL_DATABASE_HOST=<ip-addr> PORTAL_DATABASE_PORT=3306 PORTAL_DATABASE_NAME=ELTEX_PORTAL PORTAL_DATABASE_USER=javauser PORTAL_DATABASE_PASSWORD=javapassword
Описание переменных окружения
Запуск сервиса
- PORTAL_PORT - порт, на котором будет стартовать сервис внутри контейнера
- JAVA_INIT_HEAP - аргумент запуска JVM
-Xms
- JAVA_MAX_HEAP - аргумент запуска JVM
-Xmx
- JAVA_OPTS – другие аргументы запуска JVM (может перезаписать любые другие аргументы)
Логирование
- LOG_LEVEL - уровень Root логера
- GELF_HOST - хост подключения к Gelf
- GELF_PORT - порт подключения к Gelf
- GELF_LEVEL - уровень Gelf логера
Подключение к БД
- PORTAL_DATABASE_HOST - хост подключения к БД
- PORTAL_DATABASE_PORT - порт подключения к БД
- PORTAL_DATABASE_NAME - название БД
- PORTAL_DATABASE_USER - пользователь БД
- PORTAL_DATABASE_PASSWORD - пароль БД
- database.pool.connectionTimeout - таймаут подключения к БД
- database.pool.validationTimeout - таймаут валидации соединения с БД
- database.pool.min - минимальное число idle соединений с БД в пуле
- database.pool.max - максимальное число соединений с БД в пуле
- database.cache.maxEntries - максимальное число простых кэшированных записей (для каждого типа запроса)
- database.cache.maxResourceBytes - максимальный размер кэшированных ресурсов
- database.cache.expireTime - максимальное время хранения записей в кеше
Конфигурация eltex-portal
- PORTAL_DEFAULT_REDIRECT_URL - URL редиректа пользователя по-умолчанию
- portal.scheduler.tariffCheckerPeriod - период запуска задачи "PortalTariffChecker"
- portal.scheduler.promoBindingsCleaner.period - период запуска задачи "PromoBindingsCleaner"
- portal.scheduler.promoBindingsCleaner.bindingsLifetime - время жизни привязок промо-баннеров к пользователям
- portal.scheduler.paymentsCleanerPeriod - период запуска задачи "PaymentsCleaner"
Доступ через HTTPS
- PORTAL_HTTPS_PORT - HTTPS порт сервиса внутри контейнера
- PORTAL_HTTPS_KEYSTORE_PASS - пароль к KeyStore
- PORTAL_HTTPS_KEYSTORE_FILE - путь до KeyStore
- jetty.https.keystoreType - тип KeyStore
- jetty.https.keyAlias - алиас SSL сертификата
- jetty.https.ciphers - список названий шифров
Валидация JWT
- PORTAL_PUBLIC_KEY - путь до public.pem ключа для валидации JWT
Файлы .env и docler-compose.yml должны находиться в одной папке. Контейнер запускается командой:
docker-compose up