OmegaBI инструкция по установке на Astra Linux

Задача: собрать работающую систему OmegaBI на одной ВМ у клиента внутри ВМ с установленной ОС Astra Linux 1.6 Smolensk. Развернуть готовый образ ВМ не представляется возможным.

URL проекта сделаем https://omegabi2

General

user_add

Скрипт добавления пользователя /ust/local/bin/user_add

#!/bin/bash
uname=$1
groupadd -r $uname
#adduser --system --home /data/$uname --shell /bin/false --no-create-home $uname
useradd -r -g $uname -d /data/$uname -s /usr/sbin/nologin $uname

bi-ctl

Скрипт управления всеми сервисами

#!/bin/bash
ACT=$1
BSS="
nginx
couchdb
postgresql
keycloak
druid
kafka
payara
nifi
"

if [[ -z $1 ]]; then ACT='status'; fi

for BS in $BSS; do
   echo $BS
   clear; systemctl $ACT $BS
   sleep 3
done

#/data/nifi/bin/nifi.sh $ACT

echo "Payara Control"
#su -c "/data/payara/bin/asadmin start-domain" payara
#su -c "/data/payara/bin/asadmin ping-connection-pool analytics" payara
#su -c "/data/payara/bin/asadmin list-applications" payara

Java

Apache Druid официально поддерживает только Java 8. Поэтому надо ставить эту версию.

Все другие версии java лучше удалить, или надо устанавливать переменную окружения

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre

Nginx

Install from source code

Пакета nginx в Astra Linux нет. Ставим из исходников.

apt install build-essential libpcre3-dev zlib1g-dev
cd /opt
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1d.tar.gz
tar xvf openssl-1.1.1d.tar.gz
wget https://nginx.org/download/nginx-1.21.0.tar.gz
tar xvf nginx-1.21.0.tar.gz
cd nginx-1.21.0
./configure --with-openssl=/opt/openssl-1.1.1d --with-http_ssl_module --with-stream --with-http_v2_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-stream_ssl_module
make && make install

Проверим:

/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.21.0
built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
configure arguments:

Сборка angular-приложения

Сборка окружения делается только в том случае, если необходимо поменять URL доступа к приложению. В штатном варианте это https://omegabi2 - тогда не пересобираем.

Приложение frontend angular лежит в папке /data/nginx/omegabi-02

Далее все действия будем производить в корневой папке проекта: /data/nginx/omegabi-02 Добавить в файл описания конфигураций angular.json секцию с параметрами нового проекта:

               "bio6-gkomega-ru": {
              "budgets": [
                {
                  "type": "anyComponentStyle",
                  "maximumWarning": "6kb"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.bio6-gkomega-ru.ts"
                }
              ],
              "assets": [
                {
                  "glob": "favicon.ico",
                  "input": "src/assets/conf/bio6-gkomega-ru/",
                  "output": "/"
                },
                {
                  "input": "src/assets/",
                  "output": "/assets/",
                  "glob": "**/*",
                  "ignore": [
                    "conf/*.json",
                    "**/*.*~"
                  ]
                },
                {
                  "input": "src/assets/conf/bio6-gkomega-ru/",
                  "output": "/assets/",
                  "glob": "keycloak.json"
                }
              ]
            },
  1. Добавить папку проекта bio6-gkomega-ru в подкаталог src/assets/conf и исправляем параметр auth-server-url на выбранный нами домен в файле src/assets/conf/bio6-gkomega-ru/keycloak.json
cat src/assets/conf/bio6-gkomega-ru/keycloak.json
{
  "realm": "analytics",
  "auth-server-url": "https://bio6.gkomega.ru/auth/",
  "ssl-required": "none",
  "resource": "app-analytics",
  "public-client": true,
  "verify-token-audience": true,
  "use-resource-role-mappings": true,
  "confidential-port": 0
}

Если запрос идет через внешний прокси по HTTPS, то “ssl-required”: “external”

  1. Создаем файл переменных окружения src/environments/environment.bio6-gkomega-ru.ts
   import { version } from '../../package.json';

   export const environment = {
     title: 'OmegaBI',
     production: true,
     version: version,
     host: 'https://bio6.gkomega.ru',
     base: 'https://bio6.gkomega.ru',
     api: 'https://bio6.gkomega.ru/arm/api',
     druid: {
       broker: 'https://bio6.gkomega.ru/druid/v2',
       coordinator: 'https://bio6.gkomega.ru/druid/coordinator/v1',
       indexer: 'https://bio6.gkomega.ru/druid/indexer/v1'
     },
     cdb: {
       api: "https://bio6.gkomega.ru/cdb",
       cred: "YWRtaW46YWRtaW4="
     },
     thetaSketchSize: 262144,
     restrictedColumns: [],
     defaults: {
       "pivot-report": {
         "статистика сайта ГИСП": {
           "columns": ["Год", "Месяц"],
           "rows": ["Тип ссылки"]
         }
       },
       "PLOTTING-TR-4": {
         "title": "Круговая диаграмма с детализацией",
         "dataSource": "Проект ПФХД",
         "dimensions": ["Этап "],
         "metrics": ["Сумма"],
         "reportType": "Over a period",
         "sortType": "Do not sort",
         "drillLevel1": "Распорядитель",
         "drillLevel2": "Типология",
         "drillLevel3": "Учреждение",
         "allowCrossFilter": false,
       },
       "PLOTTING-BAR": {
         "title": "Столбчатая диаграмма с детализацией",
         "dataSource": "Проект ПФХД",
         "dimensions": ["Этап "],
         "metrics": ["Сумма"],
         "reportType": "Over a period",
         "sortType": "Do not sort",
         "drillLevel1": "Распорядитель",
         "drillLevel2": "Типология",
         "drillLevel3": "Учреждение",
         "drillLevel4": ""
       },
       "plotting-hierarchy": {
         "title": "Иерархия",
         "dataSource": "Проект ПФХД",
         "dimensions": ["Распорядитель", "Типология", "Учреждение"],
         "metrics": ["Сумма"],
         "reportType": "Over a period",
         "sortType": "Do not sort",
         "drillLevel1": "Распорядитель",
         "drillLevel2": "Типология",
         "drillLevel3": "Учреждение"
       },
       "plotting-heatmap": {
         "title": "Тепловая карта",
         "dataSource": "Проект ПФХД",
         "dimensions": ["Учреждение", "Этап "],
         "metrics": ["Сумма"],
         "reportType": "Over a period",
         "sortType": "Do not sort",
         "drillLevel1": "Группа должности",
         "drillLevel2": "",
         "drillLevel3": "",
       },
       "Voting": {
         "title": "Опросник",
         "dataSource": "Структура базового норматива затрат",
         "dimensions": ["НаименованиеГосУслуги"],
         "metrics": ["Доля", "Сумма"],
         "reportType": "Over a period",
         "sortType": "Do not sort"
       },
       "Radar": {
         "title": "Радар",
         "dataSource": "Структура базового норматива затрат",
         "dimensions": ["Распорядитель", "ТипПоказателя"],
         "metrics": ["Сумма"],
         "reportType": "Over a period",
         "sortType": "Do not sort",
         "groupBy": "ТипПоказателя",
         "sliderBy": "Распорядитель",
         "scale": "linear",
         "percentView": false,
         "showCenterSumm": false,
         "isPercentView": false,
         "allowCrossFilter": false,
         "showAxisLabels": true,
       },
       "PLOTTING-TR-8": {
         "title": "Датчик",
         "dataSource": "Принято Уволено от ДИТ",
         "dimensions": [],
         "reportType": "Over a period",
         "metrics": ["Уволено"]
       },
       "PLOTTING-TR-9": {
         "title": "Линейная диаграмма с детализацией",
         "dataSource": "Проект ПФХД",
         "dimensions": ["Этап "],
         "metrics": ["Сумма"],
         "reportType": "Over a period",
         "sortType": "Metric",
         "drillLevel1": "Учреждение",
         "drillLevel2": "НаименованиеВидаРасходов",
         "drillLevel3": "НаименованиеОСГУ",
         "drillLevel4": ""
       }
     },
     kc: {
       "realm": 'analytics',
       "clientId": 'app-analytics',
       "url": 'https://bio6.gkomega.ru/auth'
     }
   };

В этом файле надо проверить, чтобы везде были правильные ссылки: https://omegabi2

  1. Запускаем сборку angular-проекта:
$ export NODE_OPTIONS="--max-old-space-size=4096"
ng build -c bio6-gkomega-ru

После успешной сборки увидим такую картинку:

angular-proj-build

PostgreSQL

Установка

Устанавливаем и настраиваем СУБД PostgreSQL.

$ sudo apt-get install language-pack-ru
$ sudo locale-gen ru_RU.UTF-8
$ sudo localectl set-locale LANG=ru_RU.UTF-8
$ sudo apt install postgresql
$ sudo -u postgres
$ createdb analytics -E UTF8 -l ru_RU.UTF-8 -T template
$ sudo -u postgres psql
postgres=# CREATE USER analytics WITH PASSWORD '123456';
postgres=# GRANT ALL PRIVILEGES ON DATABASE analytics TO analytics;
postgres=# \q
$  psql -d analytics < analytics-210226.sql
$ echo -e "host\tanalytics\tanalytics\t10.33.8.52/24\tmd5" >> /etc/postgresql/9.6/main/pg_hba.conf
$ echo -e "listen_addresses = '*'" >> /etc/postgresql/9.6/main/postgresql.conf
$ exit
$ sudo systemctl restart postgresql

Импортируем БД из дампа:

$ psql -d analytics < analytics.sql

OLAP

Проверим настройки OLAP куба:

analytics=# select * from olap_properties;
  id  |     code      |          name           |                    prop_value
------+---------------+-------------------------+--------------------------------------------------
 8551 | broker        | Брокер                  | http://omegabi.gkomega.ru/druid/v2
 8301 | indexer       | Индексатор              | http://omegabi.gkomega.ru/druid/indexer/v1
 8302 | coordinator   | Координатор             | http://omegabi.gkomega.ru/druid/coordinator/v1
 8552 | historical    | Исторический узел       | http://omegabi.gkomega.ru/druid/historical/v1
 8553 | middleManager | Менеджер среднего звена | http://omegabi.gkomega.ru/druid/middleManager/v1
(5 rows)

Необходимо поменять на URL (endpoint) текущего хоста:

analytics=# update olap_properties set prop_value = 'https://omegabi2/druid/v2' where id = 8551;
analytics=# update olap_properties set prop_value = 'https://omegabi2/druid/indexer/v1' where id = 8301;
analytics=# update olap_properties set prop_value = 'https://omegabi2/druid/coordinator/v1' where id = 8302;
analytics=# update olap_properties set prop_value = 'https://omegabi2/druid/historical/v1' where id = 8552;
analytics=# update olap_properties set prop_value = 'https://omegabi2/druid/middleManager/v1' where id = 8553;

После этих обновлений запросы в OLAP-куб пойдут по локальной сети на “местный” druid, а не в “обход” через интернет.

Чтобы это работало, необходимо убедиться, что есть соответствующая запись в файле /etc/hosts

$ grep omegabi2 /etc/hosts
127.0.1.1       omegabi2

Авторизация

Добавим авторизацию по паролю из нашей сети:

echo -e "host\tanalytics\tanalytics\t127.0.0.1/32\tmd5" >> /etc/postgresql/9.6/main/pg_hba.conf

MAC

Но БД в этой ОС с payara работать не будет, т.к. надо еще урегулировать Mandatory Access Control => SELinux/AppArmor/

psql -U analytics -h omegabi2 analytics
Пароль пользователя analytics:
psql: СБОЙ:  error obtaining MAC configuration for user "analytics"

Исправляем ошибку MAC: в файле /etc/parsec/mswitch.conf, параметр zero_if_notfound установить в yes

# Return zero data instead of ENOENT/ENODATA in the absence of record
zero_if_notfound: yes

Payara

Скачиваем (для пример 5.20)

wget https://search.maven.org/remotecontent?filepath=fish/payara/distributions/payara/5.2020.2/payara-5.2020.2.zip -O payara-520.zip

Изначально, сервис payara 5.20 нормально заработал у меня только на java 11, хотя в документации сказано, что подойдет java 8 https://docs.payara.fish/enterprise/docs/release-notes/release-notes-20-0.html

Чтобы задать версию java, надо добавить в файл /data/payara/glassfish/config/asenv.conf строку:

#AS_JAVA="/usr/lib/jvm/java-11-openjdk-amd64"
# для Java 8 в Astra
AS_JAVA="/usr/lib/jvm/java-se-8u41-ri"

На Astra Linux payara нормально заработала с восьмой версией java.

Сервис Payara

Создаем файл сервиса /lib/systemd/system/payara.service

[Unit]
Description=Payara Server
After=network.target remote-fs.target

[Service]
User=payara
WorkingDirectory=/data/payara/glassfish
Environment=DOMAIN=domain1
#Environment=DOMAIN=production
#Environment=JAVA_PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin
#Environment=PATH=/data/payara/glassfish/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/lib/jvm/java-8-openjdk-amd64/db/bin:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin
Environment=PATH=/data/payara/glassfish/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin:/usr/lib/jvm/java-11-openjdk-amd64/db/bin:/usr/lib/jvm/java-11-openjdk-amd64/jre/bin
#Environment=PATH=/data/payara/glassfish/bin:/data/payara/bin
Type=oneshot
RemainAfterExit=yes
ExecStart=/data/payara/glassfish/bin/asadmin start-domain $DOMAIN
ExecReload=/data/payara/glassfish/bin/asadmin restart-domain $DOMAIN
ExecStop=/data/payara/glassfish/bin/asadmin stop-domain $DOMAIN
TimeoutStartSec=300
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target

Создание пула

Скачать и добавить драйвер jdbc для postgres

cd /data/payara
wget https://jdbc.postgresql.org/download/postgresql-42.2.14.jar && mv postgresql-42.2.14.jar glassfish/domains/domain1/lib
chown -R payara:payara glassfish/domains/domain1/lib
systemctl restart payara

Создать пул соединений jdbc:

/data/payara/bin/asadmin create-jdbc-connection-pool --datasourceclassname org.postgresql.xa.PGXADataSource --restype javax.sql.XADataSource --property serverName=localhost:portNumber=5432:databaseName=analytics:user=analytics:password=123456 analytics

Создать ресурс JDBC:

/data/payara/bin/asadmin  create-jdbc-resource --connectionpoolid analytics jdbc/analytics

Развернуть предоставленное приложение:

#/data/payara/bin/asadmin deploy --force --name arm --contextroot arm OmegaBI-api-web-1.0-SNAPSHOT.war
/data/payara/bin/asadmin deploy --force --name analytics --contextroot analytics OmegaBI-api-web-1.0-SNAPSHOT.war

Проверка пула

Далее, создаем запускаем домен, создаем пул и проверяем пул и приложения.

su - payara
cd ~/bin
./asadmin stop-domain
./asadmin start-domain
./asadmin ping-connection-pool analytics
./asadmin list-applications
./asadmin list-jvm-options

Запускается, как java приложение через Glassfish на порту tcp6 4848

Можно войти в ПУ payara: http://10.33.8.52:4848

Смену пароля администратора можно сделать так:

~/payara-5.201/bin/asadmin change-admin-password

На запрос о вводе текущего пароля надо ввести “пустой” пароль (enter).

Установил пароль: 123456

Далее, надо разрешить удаленные подключения к ПУ Payara:

~/payara-5.201/bin/asadmin --port 4848 enable-secure-admin
~/payara-5.201/bin/asadmin stop-domain
~/payara-5.201/bin/asadmin start-domain

При подключении будет такая картинка:

payara-dash

Удаление пула

Иногда необходимо переделать неверно созданный пул

/data/payara/bin/asadmin list-resource-refs
/data/payara/bin/asadmin delete-resource-ref jdbc/analytics
/data/payara/bin/asadmin list-jdbc-connection-pools
/data/payara/bin/asadmin  delete-jdbc-connection-pool --cascade=true analytics

Deploy backend from sources

Забираем исходный код:

cd /data/payara/work
git clone http://gitlab.gkomega.ru/omegabi/omegabi-api

Смотрим список профилей:

cd omegabi-api/OmegaBI-api-web
mvn help:all-profiles

При сборке возникла ошибка:

Non-resolvable parent POM for ru.spb.analytics:OmegaBI-api-web:1.0-SNAPSHOT: Could not find artifact ru.spb.analytics:OmegaBI-api:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 4, column 13

В этом источнике обсуждается проблема:

https://stackoverflow.com/questions/7612309/maven-non-resolvable-parent-pom

Похоже, что артефакт забирается из частного репозитория, analytics.spb.ru

Установка профиля stage

mvn clean install -P stage

После сборки в каталоге target появится артефакт - war-файл.

Деплой war-приложения:

/data/payara/glassfish/bin/asadmin deploy --force --name arm --contextroot arm target/OmegaBI-api-web-1.0-SNAPSHOT.war

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

/data/payara/glassfish/bin/asadmin undeploy arm

Проверить список установленных приложений:

su -c "/data/payara/bin/asadmin list-applications" payara

Couchdb

Setup from repository

Используемая нами версия Astra Linux 1.6 совместима по пакетам с Debian Stretch (см. здесь https://webhamster.ru/mytetrashare/index/mtb0/1583222423gp4v3aatzl)

Импортируем ключ, добавляем репозиторий и ставим couchdb из пакетов, как это описано в документации: https://docs.couchdb.org/en/latest/install/unix.html#installation-using-the-apache-couchdb-convenience-binary-packages , но с некоторыми особенностями!

sudo apt update && sudo apt install -y curl apt-transport-https gnupg dirmngr

wget https://downloads.apache.org/couchdb/KEYS
sudo gpg --import KEYS
mkdir /usr/share/keyrings/
curl https://couchdb.apache.org/repo/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/couchdb-archive-keyring.gpg >/dev/null 2>&1
source /etc/os-release
echo "deb [trusted=yes] https://apache.jfrog.io/artifactory/couchdb-deb/  stretch main" > /etc/apt/sources.list.d/couchdb.list
sudo gpg --keyserver pgpkeys.mit.edu --recv-key  0EE62FB37A00258D

sudo apt update
sudo apt install -y couchdb jq

Couchdb from source code

Сразу скажу, что у меня не получилось. Привожу заметки по этому usecase только в справочных целях.

Для версии couchdb 3.1.1 нужен Erlang версии OTP/20.

На настроенной системе это можно проверить так:

# curl -I http://localhost:5984
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 247
Content-Type: application/json
Date: Fri, 04 Jun 2021 06:44:19 GMT
Server: CouchDB/3.1.1 (Erlang OTP/20)
X-Couch-Request-ID: 161930a7f3
X-CouchDB-Body-Time: 0

В версии Astra Linux 1.6 Smolensk встроен Erlang OTP/19

Поэтому, начинаем с установки Erlang OTP/20 из исходного кода. Пробовал ставить последнюю OTP/24 - там есть прооблема со сборкой rebar ( #wget https://erlang.org/download/otp_src_24.0.tar.gz )

sudo apt install -y pkg-config erlang-reltool libicu-dev python3 python3-pip
sudo apt install -y libncurses5-dev libncursesw5-dev libmozjs-24-dev
sudo apt install -y python-sphinx 
pip3 install --upgrade sphinx_rtd_theme nose requests hypothesis
sudo apt-get install -y apt-transport-https gnupg ca-certificates git
cd /opt
git clone https://github.com/apache/couchdb.git
cd couchdb

Настройка и импорт БД

На вопрос о пароле пользователя admin, вводим “admin”

Список БД можно посмотреть так:

$ curl -u admin:admin localhost:5984/_all_dbs | jq
  "_replicator",
  "_users",
  "grid",
  "panels",
  "ref-depts",
  "ref-grades",
  "ref-oiv-groups",
  "ref-oivs",
  "ref-ov-struc",
  "ref-position-families",
  "ref-positions"

## Вариант 2.
$ ls -1 /var/lib/couchdb/shards/00000000-7fffffff/*.couch | awk '{ FS="/"; $0=$0; print $7}'

Выгружаем данные из всех баз:

$ for DBC in _replicator _users grid panels ref-depts ref-grades ref-oiv-groupd ref-oivs ref-ov-struc ref-position-families ref-positions; do curl -u admin:admin localhost:5984/$DBC/_all_docs?include_docs=true | jq '{"docs": [.rows[].doc]}' | jq 'del(.docs[]._rev)' > $DBC.json; done

Создаем базы на целевом хосте:

$ for DBC in _replicator _users grid panels ref-depts ref-grades ref-oiv-groupd ref-oivs ref-ov-struc ref-position-families ref-positions; do curl -X PUT -u admin:admin localhost:5984/$DBC; done

Загружаем данные:

for DBC in _replicator _users grid panels ref-depts ref-grades ref-oiv-groupd ref-oivs ref-ov-struc ref-position-families ref-positions; do curl -d @$DBC.json -H "Content-Type: application/json" -u admin:admin -X POST http://localhost:5984/$DBC/_bulk_docs; done

Для одной таблицы:

for DBC in panels; do curl -d @$DBC.json -H "Content-Type: application/json" -u admin:admin -X POST http://localhost:5984/$DBC/_bulk_docs; done

Чтобы работало взаимодействие с БД необходимо поменять bind listener:

$ sed -e 's/127.0.0.1/0.0.0.0/' /opt/couchdb/etc/default.d/10-bind-address.ini
$ systemctl restart couchdb

Проверка - посмотрим список всех таблиц:

curl -u admin:admin localhost:5984/_all_dbs | jq

NiFi

Скачиваем бинарный пакет:

cd /data; wget https://apache-mirror.rbc.ru/pub/apache/nifi/1.12.1/nifi-1.12.1-bin.tar.gz

Раcпаковываем и запускаем.

user_add nifi
usermod -s /bin/bash nifi
chown -R nifi:nifi /data/nifi /var/log/nifi
su -c "/data/nifi/bin/nifi.sh start" nifi

Проверим статус:

su -c "/data/nifi/bin/nifi.sh status" nifi

Java home:
NiFi home: /opt/nifi

Bootstrap Config File: /opt/nifi/conf/bootstrap.conf

2021-02-02 10:06:43,383 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi is currently running, listening to Bootstrap on port 45349, PID=14601

Unit

Создаем unit-файл /lib/systemd/system/nifi.service

[Unit]
Description=Apache Nifi Service

[Service]
Type=forking
User=nifi
Group=nifi
Environment=DRUID_SKIP_JAVA_CHECK=1
ExecStart=/data/nifi/bin/nifi.sh start
Restart=no

[Install]
WantedBy=multi-user.target

Запускаем через systemctl

su -c "/data/nifi/bin/nifi.sh status" nifi
systemctl enable nifi
systemctl start nifi
systemctl status nifi

Kafka

listeners=PLAINTEXT://localhost:9092

Keycloak

Написан на java, работает не сервере приложений WildFly

Установка

cd /data
wget https://github.com/keycloak/keycloak/releases/download/13.0.1/keycloak-13.0.1.tar.gz -O keycloak.tgz
#wget https://downloads.jboss.org/keycloak/13.0.1/keycloak-13.0.1.zip 
tar xvf keycloak.tgz
cd keycloak

Файлы конфигурации: /data/keycloak/standalone/configuration/standalone.xml, /etc/keycloak/keycloak.conf

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

user_add keycloak
mkdir -p /var/run/keycloak /etc/keycloak /var/log/keycloak
cp /data/keycloak/docs/contrib/scripts/systemd/launch.sh /data/keycloak/bin
cp /data/keycloak/docs/contrib/scripts/systemd/wildflyc.conf /etc/keycloak/
chown -R keycloak:keycloak /var/run/keycloak /etc/keycloak /var/log/keycloak 

Systemd unit

cat /etc/systemd/system/keycloak.service

[Unit]
Description=The Keycloak Server
After=syslog.target network.target
Before=httpd.service

[Service]
Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
EnvironmentFile=/etc/keycloak/keycloak.conf
User=keycloak
Group=keycloak
LimitNOFILE=102642
PIDFile=/var/run/keycloak/keycloak.pid
ExecStart=/data/keycloak/bin/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND
StandardOutput=null

[Install]
WantedBy=multi-user.target

Запускаем:

sed -i 's%WILDFLY_HOME="/opt/wildfly"%WILDFLY_HOME="/data/keycloak"%'  /data/keycloak/bin/launch.sh
systemctl enable keycloak
systemctl restart keycloak

Добавить пользователей сервиса:

/data/keycloak/bin/add-user-keycloak.sh -r master -u admin -p admin
/data/keycloak/bin/add-user.sh

В данном примере поставили пароль: admin

To represent the user add the following to the server-identities definition

# первый запуск
bin/standalone.sh

Лог-файл тут: /data/keycloak/standalone/log

Реальная панель keylock доступна по URL:

https://omegabi2/auth/admin

keycloak-dash

Здесь надо проверить и поправить все ссылки на вкладке “Клиенты”.

Druid

Ошибка 1:

WARN [Coordinator-Exec--0] org.apache.druid.server.coordinator.rules.LoadRule - No available [_default_tier] servers or node capacity to assign segment

Сервис supervisor в демо-варианте можно остановить - он нужен для взаимодействия с kafka.

Ошибка 2:

Command[zk] failed, see logfile for more details: /data/druid/var/sv/zk.log

Решается удалением каталога метаданных /data/druid/var/zk/version-2

Guides

Logs guide

Лог-файлы по сервисам:

Service Sign Logfile
payara 🌘 /home/payara/payara-5.201/glassfish/domains/domain1/logs/server.log
kafka 🐨
druid 🐲 /home/druid/apache-druid-0.19.0/var/druid/derby.log
/home/druid/apache-druid-0.19.0/var/druid/indexing-logs/*.log
keycloak 🔑 /home/keycloak/keycloak-11.0.0/standalone/log/{server.log,audit.log}
postgresql 🐘 /var/
couchdb 🛋️ /opt/couchdb/var/log/couchdb.log
nginx 🆖
nifi 🌃 /home/nifi/nifi-1.11.4/logs/nifi-bootstrap.log;
/home/nifi/nifi-1.11.4/logs/nifi-user.log

Ports map

Service Port Bind address Tcp App Parent Comment
couchdb 4369 0.0.0.0 v4 erlang epmd
couchdb 4369 v6 erlang epmd
couchdb 5984 0.0.0.0 v4 beam.smp
couchdb random 0.0.0.0 v4 beam.smp 42xxx-46xxx
druid 1527 127.0.0.1 v6 coordinator java
druid 2181 v6 zookeeper java
druid 8081 v6 coordinator java
druid 8082 v6 broker java
druid 8083 v6 historical java
druid 8091 v6 middleManager java
druid 8888 v6 router java
kafka 9092 127.0.0.1 v6 java
kafka random v6 java 32xxx-38xxx
keycloak 8087 127.0.0.1 v4 java
keycloak 8443 127.0.0.1 v4 java
keycloak 9990 127.0.0.1 v4 java
keycloak random 0.0.0.0 v4 java 36xxx-41xxx
nifi 9494 0.0.0.0 v4 java
nifi 32814 127.0.0.1 v6 java
nifi random 127.0.0.1 v4 java 39xxx-44xxx
nginx 80 0.0.0.0 v4 nginx
nginx 80 v6 nginx
payara 3700 v6 java
payara 4848 v6 java
payara 4900 10.33.8.28 v6 java
payara 7676 v6 java
payara 8080 v6 java
payara 8181 v6 glassfish java
payara 8686 v6 java
postgresql 5432 127.0.0.1 v4 postgres
postgresql 5432 1 v6 postgres

Credentials

  • hr/1
  • трудозатраты/трудозатраты
  • da/1
  • demo
  • demo_edu

Source code repos

Доступ к репозиториям:

git clone https://gitlab.gkomega.ru/omegabi/omegabi-v02.git

git clone https://gitlab.gkomega.ru/omegabi/omegabi-api.git

  1. Payara установка: https://blog.payara.fish/back-to-basics-installing-payara-server-5-on-ubuntu
  2. Настройка MAC для postgresql в Astra Linux: https://www.cyberforum.ru/postgresql/thread2023334.html
  3. Keycloak установка и настройка: https://www.keycloak.org/docs/latest/server_installation/index.html