В состав SoftWLC включен WEB-портал, с помощью которого реализуется модель авторизации hotspot-клиентов. Неизвестный системе пользователь может свободно (без получения заранее логина и пароля) подключиться к точке доступа, но при попытке выйти в интернет через браузер пользователь перенаправляется на страницу WEB-портала, на которой может по выбору пройти процедуру авторизации или получения данных для авторизации (например, с помощью SMS). В процессе выполнения процедуры авторизации абонент может наблюдать рекламные сообщения в виде баннеров, кастомизированных в соответствии с требованиями оператора.
Данный сервис используется для отображения страниц виртуальных порталов и проведения регистрации и авторизации пользователей Wi-Fi, подключающихся к точкам доступа Eltex или при помощи ESR/BRAS.
Во время инициализации сервиса eltex-portal и до полной его загрузки, вместо портала будет отображаться страница "Warming up", что свидетельствует о том, что портал еще в процессе инициализации, а модули сервиса находятся в процессе конфигурации. После того как сервис eltex-portal полностью загрузился, будет произведен автоматический редирект пользователя на главную страницу портала.
Пример страницы инициализации портала:
apt-get install eltex-portal |
Действие | Команда | Ответ | |||||
---|---|---|---|---|---|---|---|
Проверка состояния |
|
| |||||
Запуск сервиса |
|
| |||||
Остановка сервиса |
|
| |||||
Перезапуск сервиса |
|
|
Чтобы сервис eltex-portal получил доступ для работы с БД MySQL необходимо создать пользователя.
eltex-potal create-db-user -h <server_ip> |
При выполнении данной команды происходит подключение к БД и создание пользователя указанного в настройка конфигурационного файла /etc/eltex-portal-constructor/application.conf
Cодержит основные настройки сервиса:
portal { defaultRedirectUrl = "http://eltex-co.ru" scheduler { tariffCheckerPeriod = 1d promoBindingsCleaner { period = 1d bindingsLifetime = 5d } paymentsCleanerPeriod = "0 0 * * * ?" } } jetty { https { port = 9443 keystorePass = 12345 keystoreFile = /etc/eltex-portal/localhost.pfx keystoreType = PKCS12 keyAlias = 1 ciphers = [ TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA ] } } database { host = localhost port = 3306 name = ELTEX_PORTAL user = javauser password = javapassword pool { # Time to wait for a connection connectionTimeout = 10s # Time to wait for connection validation validationTimeout = 3s min = 1 max = 10 } cache { # Limit of cached simple entries count (for each query type) maxEntries = 1000 # Limit of total cached portal resources size maxResourceBytes = 32m # Maximum time to retain items in the cache expireTime = 2m } } // JWT validation. You need a key from Eltex Doors. // Or you could generate it yourself. validation { public_key = "etc/eltex-doors/keys/public.pem" } |
Параметры | Описание |
---|---|
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 |
Cодержит параметры, необходимые для инициализации сервиса.
# Eltex-Portal daemon parameters # Port for use by Eltex Portal PORT=9000 # Initial size of Java heap JAVA_INIT_HEAP=16m # Maximum size of Java heap JAVA_MAX_HEAP=256m # Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-portal" |
Параметры | Описание |
---|---|
PORT | Порт, на который сервис будет принимать соединения |
JAVA_INIT_HEAP | Количество памяти, выделяемое на работу сервиса при старте. Рекомендуется выставлять равное JAVA_MAX_HEAP. |
JAVA_MAX_HEAP | Максимальное количество памяти, которое может зарезервировать сервис |
JAVA_OPTS | Дополнительные опции для запуска jvm |
Содержит настройки логирования работы сервиса.
<?xml version="1.0" encoding="UTF-8"?> <Configuration monitorInterval="10"> <Properties> <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> <Property name="logPattern">%d{ISO8601} [%t] %-5p %logger{12} %C{1}.%M(line:%L). %m%n</Property> <Property name="dateSuffix">%d{yyyyMMdd}</Property> <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> </Properties> <Appenders> <Console name="STDERR" target="System.err"> <PatternLayout pattern="${logPattern}"/> </Console> <RollingFile name="RollingFile" fileName="${baseDir}/portal.log" filePattern="${baseDir}/log/portal-%i.log.gz"> <PatternLayout pattern="${logPattern}"/> <Policies> <SizeBasedTriggeringPolicy size="${maxFileSize}"/> <OnStartupTriggeringPolicy /> </Policies> <DefaultRolloverStrategy max="${maxCount}"> <Delete basePath="${baseDir}" maxDepth="3"> <IfFileName glob="*/portal-*.log.gz"> <IfAny> <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/> <IfLastModified age="${lastModified}"/> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> <RollingFile name="AccessRollingFile" fileName="${baseDir}/access.log" filePattern="${baseDir}/access/access_${dateSuffix}.log"> <PatternLayout pattern="%m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies> <DefaultRolloverStrategy max="${maxCount}"> <Delete basePath="${baseDir}" maxDepth="3"> <IfFileName glob="*/access_*.log"> <IfAny> <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/> <IfLastModified age="${lastModified}"/> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> <RollingFile name="AuthRollingFile" fileName="${baseDir}/auth.log" filePattern="${baseDir}/auth/auth_${dateSuffix}.log"> <PatternLayout pattern="%d{ISO8601} %m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies> <DefaultRolloverStrategy max="${maxCount}"> <Delete basePath="${baseDir}" maxDepth="3"> <IfFileName glob="*/auth_*.log"> <IfAny> <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/> <IfLastModified age="${lastModified}"/> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> <Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-portal" extractStackTrace="true" originHost="%host{fqdn}" maximumMessageSize="8192" > <Field name="thread" pattern="%t"/> <Field name="level" pattern="%level"/> <Field name="severity" pattern="%-5level"/> <Field name="logger" pattern="%logger{12}"/> <Field name="location" pattern="%C{1}.%M(line:%L)"/> </Gelf> </Appenders> <Loggers> <Root level="${rootLevel}"> <AppenderRef ref="RollingFile"/> <AppenderRef ref="STDERR" level="OFF"/> <AppenderRef ref="Gelf" level="${gelfLevel}"/> </Root> <Logger name="AccessLogger" additivity="false"> <AppenderRef ref="AccessRollingFile"/> <!--"custom" for custom format with BRAS parameters and AP headers--> <!--"default" for NCSA format--> <Property name="format">default</Property> <!--Customizable parts of the access log--> <Property name="cookies">true</Property> <Property name="headers">true</Property> <Property name="bras">true</Property> </Logger> <Logger name="AuthLogger" additivity="false" level="INFO"> <AppenderRef ref="AuthRollingFile"/> <AppenderRef ref="Gelf" level="${gelfLevel}"/> </Logger> <Logger name="org.springframework" level="ERROR"/> <Logger name="org.eclipse.jetty" level="ERROR"/> <Logger name="org.apache.tomcat" level="ERROR"/> <logger name="io.grpc.netty" level="ERROR"/> <Logger name="io.netty" level="ERROR"/> <!--SQL logging--> <Logger name="org.jooq.tools.LoggerListener" level="OFF"/> <Logger name="jndi" level="OFF"/> <Logger name="org.quartz" level="OFF"/> <Logger name="com.zaxxer" level="OFF"/> <Logger name="org.apache" level="OFF"/> <Logger name="org.jooq.impl.DefaultConnectionProvider" level="OFF"/> </Loggers> </Configuration> |
<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> |
<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'} |
Сервис может быть запущен в docker-контейнере. Для этого необходимо подготовить файл с переменными окружения .env и docker-compose.yml
version: "3" services: eltex-portal: container_name: eltex-portal image: hub.eltex-co.ru/eltex-portal:1.19-<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 |
Вместо <tag> необходимо указать актуальную версию, которую можно посмотреть по ссылке. |
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 |
Запуск сервиса
-Xms
-Xmx
Логирование
Подключение к БД
Конфигурация eltex-portal
Доступ через HTTPS
Валидация JWT
Файлы .env и docler-compose.yml должны находиться в одной папке. Контейнер запускается командой:
docker-compose up |