Общее описание

С версии SoftWLC 1.27 возможен запуск сервиса eltex-PCRF в контейнере.

При запуске сервиса в контейнере надо учитывать, что доступ к БД MariaDB потребуется разрешить с любого адреса.

Подготовка окружения

Разрешить доступ к БД

MariaDB

Чтобы разрешить доступ до БД  с любого адреса:

sudo cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf.bak
sudo sed -i -e "s/\(bind-address.*=.*\)/#\1/" /etc/mysql/mariadb.conf.d/50-server.cnf
sudo systemctl restart mariadb.service

Добавить права для доступа к БД:

GRANT ALL ON eltex_auth_service.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
GRANT ALL ON eltex_ems.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
GRANT ALL ON wireless.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
GRANT ALL ON radius.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
FLUSФалы H PRIVILEGES;

Разрешить доступ в RADIUS с хоста eltex-PCRF

Открыть Eltex-EMS, открыть меню "RADIUS" → "Управление точками доступа" и нажать кнопку "Добавить":

заполнить поля:

нажать кнопку "Принять".

Файлы конфигурации

Для запуска сервиса требуется создать папку для запуска контейнера и в ней подготовить файлы с переменными окружения ".env", "eltex-pcrf.env", файл конфигурации для запуска сервиса с помощью docker-compose "docker-compose.yml"

version: '3'

services:
  eltex-pcrf:
    container_name: eltex-pcrf
    image: ${ELTEX_HUB}/eltex-pcrf:${SWLC_VERSION}
    hostname: eltex-pcrf
    restart: unless-stopped
    ports:
      - "7070:7070/tcp"
      - "7080:7080/tcp"
      - "5701:5701/tcp"
      - "5801:5801/tcp"
      - "1813:1813/udp"
      - "31812:31812/udp"
      - "31813:31813/udp"
    env_file: eltex-pcrf.env
    environment:
      # Настройки таймзоны
      - TZ=${TZ}
      # Настройки логирования
      - LOG_LEVEL=DEBUG
      - CONSOLE_LEVEL=INFO
      - LOGFILE_HIKARI_LEVEL=OFF
      - LOGFILE_SERVICE_LEVEL=OFF
      - LOGFILE_HAZELCAST_LEVEL=OFF
      - LOGFILE_RADIUS_LEVEL=OFF
      - LOGFILE_GENERIC_AP_LEVEL=OFF
      - LOGFILE_LEASE_SAVER_LEVEL=OFF
      - LOGFILE_SHAPER_LEVEL=OFF
      - LOGFILE_I18N_LEVEL=OFF
      # Настройки Graylog
      - GELF_LEVEL=${GELF_LEVEL}
      - GELF_HOST=${GELF_HOST}
      - GELF_PORT=${GELF_PORT}
    volumes:
      # HeapDumpPath
      # execute before: sudo chown -R 100001:100001 ./eltex-pcrf/java-heap-dump
      - ./eltex-pcrf/java-heap-dump:/var/log/java-heap-dump
      # Logs
      # execute before: sudo mkdir -p /var/log/eltex-pcrf && sudo chown -R 100001:100001 /var/log/eltex-pcrf
#      - /var/log/eltex-pcrf:/var/log/eltex-pcrf


# Публичный docker registry: hub.eltex-co.ru/softwlc
ELTEX_HUB=hub.eltex-co.ru/softwlc

SWLC_VERSION=<tag>

# Настройки таймзоны
TZ=Asia/Novosibirsk

# Настройки Graylog
# Вместо <graylog_server_ip> нужно указать настоящий адрес сервера Graylog или localhost
GELF_LEVEL=OFF
GELF_HOST=udp:localhost
GELF_PORT=12201

Вместо <tag> необходимо указать последнюю актуальную версию SoftWLC (например 1.27).

PCRF_auth.address=0.0.0.0
PCRF_auth.port=31812
PCRF_auth.mac.open.timeout.s=3600
PCRF_auth.mac.welcome.service=WELCOME

PCRF_acct.address=0.0.0.0
PCRF_acct.ports__0=1813
PCRF_acct.ports__1=31813

PCRF_acct.sorm.address=<IP хоста SOrM2>
PCRF_acct.sorm.port=41813
PCRF_acct.sorm.mirroring.enabled=true

PCRF_lease.saver.address=0.0.0.0
PCRF_lease.saver.port=4381

PCRF_aaa.instances=5
PCRF_aaa.host=127.0.0.1
PCRF_aaa.secret=testing123
PCRF_aaa.auth.port=1812
PCRF_aaa.acct.port=1813
PCRF_aaa.rest.port=7080
PCRF_aaa.timeout=10
PCRF_aaa.attempts=1

PCRF_web.monitoring.port=7070

PCRF_cluster.enable=false
PCRF_cluster.eventBusPort=5801

PCRF_radius__url=jdbc:mysql://localhost/radius?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false
PCRF_radius__user=javauser
PCRF_radius__password=javapassword
PCRF_radius__max_pool_size=16

PCRF_session.storage__session.check.period.s=300
PCRF_session.storage__unauth.store.time.s=600
PCRF_session.storage__interval.number.expired=3
PCRF_session.storage__min.interval.s=45
PCRF_session.storage__default.interval.s=600

PCRF_bras.coa__coa.timeout=10
PCRF_bras.coa__coa.attempts=1
PCRF_bras.coa__coa.secret=testing123
PCRF_bras.coa__remote.coa.port=3799
PCRF_bras.coa__log.clean.period.s=604800
PCRF_bras.coa__log.store.period__period=14
PCRF_bras.coa__log.store.period__unit=D
PCRF_bras.coa__worker.pool.size=20

PCRF_sql.ems__url=jdbc:mysql://localhost/eltex_ems?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false
PCRF_sql.ems__user=javauser
PCRF_sql.ems__password=javapassword
PCRF_sql.ems__max_pool_size=16

PCRF_sql.wireless__url=jdbc:mysql://localhost/wireless?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false
PCRF_sql.wireless__user=javauser
PCRF_sql.wireless__password=javapassword
PCRF_sql.wireless__max_pool_size=16

PCRF_sql.pcrf__url=jdbc:mysql://localhost/eltex_pcrf?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&socketTimeout=5000
PCRF_sql.pcrf__user=javauser
PCRF_sql.pcrf__password=javapassword
PCRF_sql.pcrf__max_pool_size=60

PCRF_sql.ott__url=jdbc:mysql://localhost/eltex_ott?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&socketTimeout=5000
PCRF_sql.ott__user=javauser
PCRF_sql.ott__password=javapassword
PCRF_sql.ott__max_pool_size=32

PCRF_language=en

PCRF_radius.nbi__wdsl.url=http://localhost:8080/axis2/services/RadiusNbiService?wsdl
PCRF_radius.nbi__username=softwlc_service
PCRF_radius.nbi__password=softwlc
PCRF_radius.nbi__connection.timeout.ms=30000
PCRF_radius.nbi__request.timeout.ms=120000

PCRF_tariffs.update.interval__interval=1
PCRF_tariffs.update.interval__unit=hours
PCRF_tariffs.update.interval__apb_enabled=false
PCRF_tariffs.update.interval__apb_host=localhost
PCRF_tariffs.update.interval__apb_port=8090

PCRF_bras.cron.update.interval__interval=1
PCRF_bras.cron.update.interval__unit=hours

PCRF_filters.cache.dir=/var/lib/eltex-pcrf/filters/

PCRF_clickhouse__url=jdbc:clickhouse://localhost:8123/radius
PCRF_clickhouse__user_name=javauser
PCRF_clickhouse__user_password=javapassword
PCRF_clickhouse__actualization_period_ms=15000

PCRF_accounting.options__use_clickhouse=false
PCRF_accounting.options__use_mysql=true
PCRF_accounting.options__batch_interval_ms=300000
PCRF_accounting.options__max_queue_load=100

PCRF_generic.ap.registrar__max_aps_in_queue=30
PCRF_generic.ap.registrar__ap_register_interval_ms=600000
PCRF_generic.ap.registrar__added_ap_cache_ttl_ms=600000
PCRF_generic.ap.registrar__host=localhost
PCRF_generic.ap.registrar__port=8080
PCRF_generic.ap.registrar__worker_pool_size=8

PCRF_kafka__mcd.enabled=false
PCRF_kafka__circuit.breaker__timeout.ms=30000
PCRF_kafka__circuit.breaker__reset.ms=60000
PCRF_kafka__circuit.breaker__max.failures=3
PCRF_kafka__producer__bootstrap.servers=localhost:9092
PCRF_kafka__producer__linger.ms=1000
PCRF_kafka__producer__topic=mcd
PCRF_kafka__producer__max.block.ms=30000
PCRF_kafka__producer__request.timeout.ms=14000
PCRF_kafka__producer__delivery.timeout.ms=30000
PCRF_kafka__producer__acks=1
PCRF_kafka__producer__retries=1
PCRF_worker.pool.size=40

# Запуск кластеризации. Также потребуется настройка переменных с префиксом 'HZ' для работы в кластере
PCRF_cluster.enable=true
# Порт для обмена данными с нодами в кластере
PCRF_cluster.eventBusPort=5801
# Публичный адрес ноды
PCRF_cluster.eventBusPublicHost=127.0.0.1
# Настройки режима кластера Hazelcast (Заполнены данными для примера. Настраиваются индивидуально)
# Публичный адрес ноды
HZ_NETWORK_PUBLICADDRESS=127.0.0.1
# Порт Hazelcast. 5701 по умолчанию.
HZ_NETWORK_PORT_PORT=5701
# Список адресов членов кластера, включая себя
HZ_NETWORK_JOIN_TCPIP_MEMBERS=127.0.0.1,127.0.0.2


Запуск контейнера

Запуск на хосте, где ранее уже была проведена однохостовая установка скриптом-установщиком eltex-softwlc-helper-latest.sh

Если выполняется запуск контейнера на хосте, где ранее уже была проведена однохостовая установка скриптом-установщиком eltex-softwlc-helper-latest.sh - необходимо:

  1. Выполнить настройку файлов окружения eltex-PCRF.
  2. Остановить службу eltex-PCRF командой:

    systemctl stop eltex-pcrf


  3. Удалить пакет eltex-PCRF с сохранением БД:

    sudo apt purge eltex-pcrf


  4. Запустить контейнер командой:

    docker-compose up -d


  5. Проверить работоспособность сервиса открыв в браузере его консоль по адресу "http://<IP-адрес сервиса PCRF>:7070".

Запуск на отдельном хосте

  1. Выполнить настройку файлов окружения eltex-PCRF.
  2. Запустить контейнер командой:

    docker-compose up -d


  3. Проверить работоспособность сервиса открыв в браузере его консоль по адресу "http://<IP-адрес сервиса PCRF>:7070".

Управление логированием

В рамках поддержанных переменных окружения можно указать уровень логирования сервиса eltex-pcrf, вывод логов в консоль, отправку на сторонний сервер или использовать папку на хостовой машине для записи логов в файлы. Значения переменных задаются в файлах "docker-compose.yml" и ".env".

Переменные файла"docker-compose.yml":

LOG_LEVEL=INFO - уровень логирования сервиса eltex-pcrf.

Уровень логирования, указанный в настройках "-LOG_LEVEL" определяет максимальный уровень логирования, который может быть выведен в консоль или перенаправлен на сторонний сервер.

Переменные файла ".env" (настройки отправки логов на сторонний сервер):

Для записи файлов логов на хостовую машину требуется:

Приложения

Список используемых переменных

ПеременнаяЗначение по умолчанию
Файл .env
ELTEX_HUBhub.eltex-co.ru/softwlc
SWLC_VERSION1.<актуальная версия SoftWLC>
TZAsia/Novosibirsk
GELF_LEVELOFF
GELF_HOSTudp:localhost
GELF_PORT12201
Файл eltex-pcrf.env
PCRF_auth.address0.0.0.0
PCRF_auth.port31812
PCRF_auth.mac.open.timeout.s3600
PCRF_auth.mac.welcome.serviceWELCOME
PCRF_acct.address0.0.0.0
PCRF_acct.ports__01813
PCRF_acct.ports__131813
PCRF_acct.sorm.addresseltex-sorm2-replicator
PCRF_acct.sorm.port41813
PCRF_acct.sorm.mirroring.enabledfalse
PCRF_aaa.host127.0.0.1
PCRF_aaa.secrettesting123
PCRF_aaa.auth.port1812
PCRF_aaa.acct.port1813
PCRF_aaa.rest.port7080
PCRF_aaa.timeout10
PCRF_aaa.attempts1
PCRF_web.monitoring.port7070
PCRF_cluster.enablefalse
PCRF_cluster.eventBusPort5801
HZ_NETWORK_PUBLICADDRESS192.168.0.1
HZ_NETWORK_PORT_PORT5701
HZ_NETWORK_JOIN_TCPIP_MEMBERS192.168.0.1,192.168.0.2
PCRF_radius__urljdbc:mysql://localhost/radius?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false
PCRF_radius__userjavauser
PCRF_radius__passwordjavapassword
PCRF_radius__max_pool_size16
PCRF_sql.pcrf__urljdbc:mysql://eltex-mysql/eltex_pcrf?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&socketTimeout=5000
PCRF_sql.pcrf__userjavauser
PCRF_sql.pcrf__passwordjavapassword
PCRF_sql.pcrf__max_pool_size60
PCRF_sql.ott__urljdbc:mysql://eltex-mysql/eltex_ott?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&relaxAutoCommit=true&connectTimeout=5000&socketTimeout=5000
PCRF_sql.ott__userjavauser
PCRF_sql.ott__passwordjavapassword
PCRF_sql.ott__max_pool_size32
PCRF_session.storage__default.interval.s600
PCRF_bras.coa__coa.timeout10
PCRF_bras.coa__coa.attempts1
PCRF_bras.coa__coa.secrettesting123
PCRF_bras.coa__remote.coa.port3799
PCRF_bras.coa__log.clean.period.s604800
PCRF_bras.coa__log.store.period__period14
PCRF_bras.coa__log.store.period__unitD
PCRF_bras.coa__worker.pool.size20
PCRF_sql.ems__urljdbc:mysql://localhost/eltex_ems?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false
PCRF_sql.ems__userjavauser
PCRF_sql.ems__passwordjavapassword
PCRF_sql.ems__max_pool_size16
PCRF_sql.wireless__urljdbc:mysql://localhost/wireless?useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=5000&autoReconnect=true&useSSL=false
PCRF_sql.wireless__userjavauser
PCRF_sql.wireless__passwordjavapassword
PCRF_sql.wireless__max_pool_size16
PCRF_languageen
PCRF_radius.nbi__wdsl.urlhttp://localhost:8080/axis2/services/RadiusNbiService?wsdl
PCRF_radius.nbi__usernamesoftwlc_service
PCRF_radius.nbi__passwordsoftwlc
PCRF_radius.nbi__connection.timeout.ms30000
PCRF_radius.nbi__request.timeout.ms120000
PCRF_tariffs.update.interval__interval1
PCRF_tariffs.update.interval__unithours
PCRF_tariffs.update.interval__apb_enabledfalse
PCRF_tariffs.update.interval__apb_hostlocalhost
PCRF_tariffs.update.interval__apb_port8090
PCRF_filters.cache.dir/var/lib/eltex-pcrf/filters/
PCRF_clickhouse__urljdbc:clickhouse://localhost:8123/radius
PCRF_clickhouse__user_namejavauser
PCRF_clickhouse__user_passwordjavapassword
PCRF_clickhouse__actualization_period_ms15000
PCRF_accounting.options__use_clickhousefalse
PCRF_accounting.options__use_mysqltrue
PCRF_accounting.options__batch_interval_ms300000
PCRF_accounting.options__max_queue_load100
PCRF_generic.ap.registrar__max_aps_in_queue30
PCRF_generic.ap.registrar__ap_register_interval_ms600000
PCRF_generic.ap.registrar__added_ap_cache_ttl_ms600000
PCRF_generic.ap.registrar__hostlocalhost
PCRF_generic.ap.registrar__port8080
PCRF_generic.ap.registrar__worker_pool_size8
PCRF_kafka__mcd.enabledfalse
PCRF_kafka__circuit.breaker__timeout.ms30000
PCRF_kafka__circuit.breaker__max.failures60000
PCRF_kafka__circuit.breaker__reset.ms3
PCRF_kafka__producer__bootstrap.serverslocalhost:9092
PCRF_kafka__producer__linger.ms1000
PCRF_kafka__producer__topicmcd
PCRF_kafka__producer__max.block.ms30000
PCRF_kafka__producer__request.timeout.ms14000
PCRF_kafka__producer__delivery.timeout.ms30000
PCRF_kafka__producer__acks1
PCRF_kafka__producer__retries1
Файл docker-compose.yml
LOG_LEVELINFO
CONSOLE_LEVELINFO
LOGFILE_HIKARI_LEVELOFF
LOGFILE_SERVICE_LEVELOFF
LOGFILE_HAZELCAST_LEVELOFF
LOGFILE_RADIUS_LEVELOFF
LOGFILE_GENERIC_AP_LEVELOFF
LOGFILE_SHAPER_LEVELOFF
LOGFILE_I18N_LEVELOFF