Закрытый контур на Astra Linux без SSL

Внимание

Дисклеймер.

Инструкция содержит примерный порядок действий по установке. Инструкция призвана описать логику действий по установке на простом абстрактном примере. В зависимости от инфраструктуры сервера (кластера) и его конфигурации вам могут понадобиться дополнительные или иные шаги.

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

При старте системы требуется проверить backend лог на предмет ошибок ERROR. В случае их наличия - обратитесь к разработчику.

Примечание

Ниже приведен пример установки системы в закрытом контуре (без интернета) на Astra Linux 1.7.X "Смоленск" без использования авторизации и SSL для Opensearch.

Предупреждение

Инструкция актуальна для установки Юниверс DG версии 2.5 и новее, поскольку в релизе 2.5 был осуществлен переход с Elasticsearch на Opensearch.

Предупреждение

В Юниверс DG версии 2.10 было осуществлено обновление PostgreSQL, в связи с этим для ОС Astra Linux теперь требуется обязательная установка PostgrePRO и расширения TimescaleDB. Перед установкой рекомендуется проверить совместимость вашей версии PostgreSQL и версии TimescaleDB.

Установка JAVA

Примечание

Java требуется установить на всех серверах, где планируется запускать Opensearch, Tomcat, OrientDB.

Все пакеты, необходимые для корректной установки openJDK, располагаются в каталоге Java.

Для установки Java:

  1. Перейдите в директорию Java.

  2. Распакуйте содержимое архива с установочными пакетами.

  3. В распакованном каталоге выполните команду:

    sudo dpkg -i *.deb
    

Установка Opensearch

Для установки Opensearch:

  1. Перейдите в каталог Opensearch и используйте команду:

    sudo dpkg -i *.deb
    

Установка словарей

  1. Скопируйте директорию ./<OFFLINE_REP>/Opensearch/hunspell в /etc/opensearch/:

    sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> dpkg -i opensearch-2.17.0-linux-x64.deb
    
  2. Выдайте права для новой директории:

    sudo chown -R root:opensearch /etc/opensearch/hunspell/
    

См. также инструкцию по настройке библиотеки Hunspell.

Установка плагина

  1. Выполните команду с указанием полного пути до архива analysis-icu-*.zip:

    sudo /usr/share/opensearch/bin/opensearch-plugin install file:///opt/OFFLINE_REP/Opensearch/analysis-icu-2.14.0.zip
    
    # если вы в директории с файлом analysis-icu-*.zip
    # sudo /usr/share/opensearch/bin/opensearch-plugin install file://`pwd`/analysis-icu-2.14.0.zip
    
  2. Результат выполнения команды будет иметь вид:

    -> Installed analysis-icu with folder name analysis-icu
    

Конфигурация Opensearch

  1. Очистите файл конфигурации и откройте следующий файл с помощью любого редактора:

    sudo cp -i /etc/opensearch/opensearch.yml /etc/opensearch/opensearch.yml_default
    > /etc/opensearch/opensearch.yml # очистка файла
    sudo vi /etc/opensearch/opensearch.yml
    
  2. Укажите параметр cluster.name, например:

    cluster.name: dg-os-cluster
    

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

  1. По умолчанию Opensearch прослушивает только localhost, если приложение Tomcat устанавливается на другой сервер, и/или Opensearch будет использоваться в кластере, то необходимо разрешить подключения с других интерфейсов, указав параметр:

    network.host: 0.0.0.0
    
  2. Также необходимо открыть порт 9200 для нод/приложений, которые будут подключаться к Opensearch.

  3. Если планируется использование только одной ноды Opensearch - укажите параметр:

    discovery.type: single-node
    
  4. Укажите каталог для логов и данных:

    path.data: /var/lib/opensearch
    path.logs: /var/log/opensearch
    
  5. Если не требуется SSL шифрование и авторизация, то укажите параметр:

    plugins.security.disabled: true
    

Пример итогового файла opensearch.yml для запуска Opensearch на одной ноде без ssl и авторизации:

cluster.name: dg-os-cluster
network.host: 0.0.0.0
discovery.type: single-node
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
plugins.security.disabled: true

Настройка кластера Opensearch

Примечание

Приведен пример конфигурации без использования ssl

Для кластерной конфигурации и использования нескольких серверов Opensearch в файле /etc/opensearch/opensearch.yml на каждом сервере измените ряд настроек:

  1. Задайте уникальный node.name для каждой ноды кластера Opensearch:

    # для первого сервера:
    node.name: node01
    
    # для N сервера
    # node.name: nodeN
    
  2. Перечислите все Hostname или ip серверов, которые планируется соединить в кластер в следующих параметрах:

    cluster.initial_master_nodes: ["10.10.24.90","10.10.24.91", "10.10.24.92"]
    discovery.seed_hosts: ["10.10.24.90", "10.10.24.91", "10.10.24.92"]
    
  3. Закомментируйте или уберите следующий параметр, т.к. он противоречит кластерной настройке:

    #discovery.type: single-node
    

Серверы кластера Opensearch взаимодействуют между собой, используя порт 9300, который должен быть открыт между ними.

Настройки потребления RAM Opensearch

Необходимо настроить объем выделяемого ОЗУ в файле /etc/opensearch/jvm.options. Действие выполняется на каждом узле кластера.

Значения выделяемой ОЗУ не должно быть более 50% от общего объема RAM (при условии, что на сервере не устанавливаются другие ресурсоемкие приложения) и не более 32 Гб. Xms должен быть равен Xmx. В примере, указанном ниже, значение равно 16 Гб:

-Xms16g
-Xmx16g

Запуск Opensearch

  1. Обновите службы:

    sudo systemctl daemon-reload
    
  2. Добавьте Opensearch в автозагрузку:

    sudo systemctl enable opensearch.service
    
  3. Запустите Opensearch:

    sudo systemctl start opensearch.service
    
  4. Проверьте статус:

    sudo systemctl status opensearch.service
    

Проверка запуска Opensearch

  1. Проверьте ноды Opensearch:

    curl -X GET '127.0.0.1:9200'
    
  2. Проверьте статус кластера:

    curl -XGET 'localhost:9200/_cluster/health?pretty'
    

Примечание

Важно, чтобы "status" = "green", а имя статуса и количество нод совпадали с настроенным значением

Установка PostgresPRO 15 из ISO-образа

Все пакеты, необходимые для корректной установки, располагаются в директории Postgresql.

Для установки postgresql:

  1. Создайте каталог для размещения репозитория:

    sudo mkdir -p /srv/repo/postgrespro/main
    
  2. Подготовьте образ установочного диска (если на компьютере нет каталога /media/cdrom - создайте его):

    [ -d /media/cdrom ] || sudo mkdir /media/cdrom
    sudo mount /opt/PostgresProStdCert-11.21.2+14.9.2+15.4.2.iso /media/cdrom
    
  3. Скопируйте файлы из образа в каталог репозитория:

    sudo cp -a /media/cdrom/* /srv/repo/postgrespro/main
    
  4. Размонтируйте ISO-образ диска:

    sudo umount /media/cdrom
    
  5. Подключите файловый локальный репозиторий в менеджер пакетов:

    # Отредактируйте файл
    vi /etc/apt/sources.list
    
    # Добавьте строку
    deb file:/srv/repo/postgrespro/main/astra-smolensk/1.7 1.7_x86-64 main
    
  6. Добавьте ключ:

    apt-key add /srv/repo/postgrespro/main/keys/GPG-KEY-POSTGRESPRO
    apt update
    
  7. Установите PostgresPRO 15:

    apt install postgrespro-std-15
    systemctl status postgrespro-std-15.service
    
  8. Проверите запуск:

    sudo -u postgres psql -c 'select version()'
    

    Каталог базы по умолчанию находится в /var/lib/pgpro/std-15, приложение устанавливается в /opt/.

Установка TimescaleDB из исходников для PostgresPRO

Примечание

Требуется лицензированный дистрибутив PostgresPRO, предоставленный вендором, поскольку открытый репозиторий не подходит.

  1. Проверьте версию PostgresPRO (в примере используется версия 15.4):

    sudo su postgres psql
    # postgres=# select version();
    # PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by gcc (AstraLinuxSE 8.3.0-6) 8.3.0, 64-bit
    
  2. Установите необходимое ПО:

    apt install git
    apt install cmake
    apt install postgrespro-std-15-libs postgrespro-std-15-dev postgrespro-std-15-client
    
  3. Добавьте специальный pg_config, т.к. для PRO версии стандартный не подходит:

    /opt/pgpro/std-15/bin/pg-wrapper links update
    
  4. Скачайте TimescaleDB:

    cd /opt/ && git clone https://github.com/timescale/timescaledb
    cd /opt/timescaledb
    
  5. Переключите версию на 2.10, т.к это минимальная версия для 15 postgres:

    git checkout 2.10.1
    
  6. Запустите сборку:

    ./bootstrap
    cd ./build && make
    
  7. Запустите установку:

    make install
    
  8. Отредактируйте postgresql.conf, добавляя минимальные для запуска конфиги, и перезапустите Postgres PRO:

    shared_preload_libraries = 'timescaledb'
    timescaledb.telemetry_level=off
    
  9. Запустите psql и проверьте создание расширения (в примере создана база, которая может быть удалена после проверки):

    sudo su postgres psql
    
    CREATE database tmp_example_tdb;
    \c tmp_example_tdb
    CREATE EXTENSION IF NOT EXISTS timescaledb;
    
  • Проверкой успешной установки может являться выполненный запрос:

    INSERT INTO org_unidata_mdm_timelog_core.dg_quality_check(
         score, row_exception, check_etalon_id, execution_date, author, created_at, check_type_name, row_count, ts)
         VALUES (100, 100, 'test', null, 'test', null, 'test', 10, now());
    

Установка OrientDB

OrientDB требуется для работы некоторых компонентов Юниверс DG. Для запуска OrientDB требуется Java (описание установки см. выше).

Начиная с версии 2.10 обновлена версия OrientDB до 3.2.32, поэтому при установке новой версии необходимо указать в ${ORIENTDB_HOME}/config/orientdb-server-config.xml путь до директории с данными:

<properties>
    <entry name="server.database.path" value="/opt/homebrew/var/db/orientdb" />
</properties>

Для установки:

  1. Распакуйте архив orientdb-community-3.2.32.tar.gz в каталог /opt.

  2. Переименуйте каталог /opt/orientdb-community-3.2.32 в /opt/orientdb (версия может отличаться).

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

    useradd -r orientdb -s /sbin/nologin
    chown -R orientdb:orientdb /opt/orientdb/
    
  4. Отредактируйте файл:

    vi /opt/orientdb/bin/orientdb.sh
    
  5. Укажите следующие значения в переменных:

    ORIENTDB_DIR="/opt/orientdb"
    ORIENTDB_USER="orientdb"
    
  6. Добавьте сервис, создав файл:

    sudo vi /etc/systemd/system/orientdb.service
    

со следующим содержимым, указав ORIENTDB_ROOT_PASSWORD. Здесь же можно задать параметры потребления RAM в ORIENTDB_OPTS_MEMORY:

[Unit]
Description=OrientDB Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
Environment="ORIENTDB_OPTS_MEMORY=-Xms4G -Xmx4G"
Environment="ORIENTDB_ROOT_PASSWORD=OrientDBPass"

User=orientdb
Group=orientdb
ExecStart=/opt/orientdb/bin/server.sh
  1. В файле /opt/orientdb/config/orientdb-server-config.xml в директиву <storages> добавьте следующую информацию. При запуске сервиса будет создана база dg, которая будет использоваться в дальнейшем:

    <storages>
              <storage name="dg" path="plocal:/opt/orientdb/databases/dg"
                                        loaded-at-startup="true" />
        </storages>
    
  2. В файле /opt/orientdb/config/orientdb-server-config.xml замените порт и интерфейс, который прослушивает порт. Пример директивы:

    <listener protocol="binary" ip-address="0.0.0.0" port-range="2424-2430" socket="default"/>
              <listener protocol="http" ip-address="0.0.0.0" port-range="2480-2490" socket="default"/>
    
    • Порт 2424 должен быть открыт в фаерволе для доступа приложения.

    • http - опциональный порт, который используется для подключения к WEB интерфейсу через браузер и может быть закрыт для безопасности.

  3. Запустите сервис:

    systemctl daemon-reload
    systemctl start orientdb.service
    
  4. Для проверки работоспособности вызовите консоль:

    /opt/orientdb/bin/console.sh
    
  5. Используйте exit для выхода.

  6. Проверьте доступность web интерфейса:

    curl http://localhost:2480/server/version
    

Установка Tomcat

Для запуска Tomcat требуется Java (описание установки см. выше).

Для установки:

  1. Создайте пользователя для запуска tomcat:

    sudo useradd -r tomcat -s /sbin/nologin
    
  2. Распакуйте дистрибутив из каталога apache-tomcat-9.0.x.tar.gz в каталог /opt/.

  3. Переименуйте каталог /opt/apache-tomcat-9.0.x в /opt/tomcat-9 (версия может отличаться).

  4. Удалите стандартные файлы и каталоги Manager App, которые могут содержаться в дистрибутиве tomcat из каталога /opt/tomcat-9/webapps:

    rm -rf /opt/tomcat-9/webapps/*
    
  5. Выдайте права на директорию tomcat для пользователя tomcat:

    chown -R tomcat:tomcat /opt/tomcat-9
    
  6. Добавьте сервис, создав файл tomcat.service:

    sudo vi /etc/systemd/system/tomcat.service
    

со следующим содержимым, задав параметры потребления RAM в CATALINA_OPTS:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat-9/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-9
Environment=CATALINA_BASE=/opt/tomcat-9
Environment='CATALINA_OPTS=-Xms1024M -Xmx2048M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

WorkingDirectory=/opt/tomcat-9/

ExecStart=/opt/tomcat-9/bin/startup.sh
ExecStop=/opt/tomcat-9/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
  1. Примените конфигурацию сервисов:

    systemctl daemon-reload
    

Установка приложения Юниверс DG

Для запуска приложения требуется Tomcat и Java (описание установки см. выше).

Начало установки

  • Установка .war файлов: в каталоге Application_Tomcat содержатся 2 архива: frontend или backend. В каждом архиве содержатся .war файлы, которые необходимо скопировать в директорию /opt/tomcat-9/webapps/.

  • Установка дополнительных параметров и библиотек: в архиве backend содержится каталог Tomcat, содержимое которого необходимо скопировать в каталог /opt/tomcat-9/. Находясь в распакованном каталоге архива backend, перейдите в каталог tomcat и скопируйте файлы в директорию сервиса:

    sudo cp -v bin/setenv.sh /opt/tomcat-9/bin/ && \
    sudo cp -rv conf/universe /opt/tomcat-9/conf/ && \
    sudo cp -v libs/* /opt/tomcat-9/lib/
    
  • Предоставление прав на файлы для сервиса:

    chown -R tomcat:tomcat /opt/tomcat-9
    chmod +x /opt/tomcat-9/bin/*.sh
    

Настройка приложения

  1. Основные параметры задаются в переменных в файле setenv.sh. Отредактируйте файл:

    vi /opt/tomcat-9/bin/setenv.sh
    
  2. Установите/добавьте следующие переменные, установив значения соответствующие логическому имени переменной:

    # имеющийся параметр JAVA_OPTS НЕ затрагивается
    
    # укажите параметры подключения к базе
    export POSTGRES_ADDRESS="localhost:5432"
    export POSTGRES_USERNAME="postgres"
    export POSTGRES_PASSWORD="notpostgres_change_me"
    export DATABASE_NAME="universe"
    
    # укажите параметры подключения к Opensearch
    export SEARCH_CLUSTER_NAME="dg-os-cluster"
    export SEARCH_CLUSTER_ADDRESS="localhost:9200"
    
    # при использовании кластера Opensearch в переменной SEARCH_CLUSTER_ADDRESS перечисляются через запятую все ноды (hostname или ip), пример:
    # SEARCH_CLUSTER_ADDRESS=es_node01:9300,es_node02:9300,es_node03:9300
    
    # укажите параметры подключения к OrientDB, если данный компонент используется приложением
    export ORIENTDB_DB_ADDRESS="localhost"
    export ORIENTDB_DB_NAME="dg"
    export ORIENTDB_USER="root"
    export ORIENTDB_PASSWORD="OrientDBPass"
    

Кластерная настройка приложения

  1. Если планируется использование нескольких серверов Tomcat, то для настройки кластерной конфигурации приложения в файле /opt/tomcat-9/conf/universe/backend.properties на каждом сервере требуется изменить ряд настроек:

    vi /opt/tomcat-9/conf/universe/backend.properties
    
  2. Следующие параметры одинаковые для каждого узла приложения:

    # включаем распределенный кэш
    org.unidata.dg.system.cache.tcp-ip.enabled=true
    # перечисляем все ноды tomcat, ip или hostname
    org.unidata.dg.system.cache.tcp-ip.members=server-192-168-106-110,server-192-168-106-111
    
    # стандартный порт, при необходимости можно заменить, должен быть открыт для всех узлов кластера приложения
    org.unidata.dg.system.cache.port=5701
    
  3. Параметр ниже должен быть уникальный для каждого узла в кластере приложения, пример значения параметра:

    org.unidata.dg.system.node.id=node1
    #org.unidata.dg.system.node.id=nodeN # для остальных N серверов
    
  4. Пример сообщения в логе (logs/catalina.out), позволяющее определить то, что приложения объединились в кластер:

    INFO com.hazelcast.internal.server.tcp.TcpServerConnection.null [server-192-168-106-111]:5701 [dev] Initialized new cluster connection between /192.168.106.111:44589 and server-192-168-106-110/192.168.106.110:5701
    com.hazelcast.internal.cluster.ClusterService.null [server-192-168-106-111]:5701 [dev]
    
    Members {size:2, ver:2} [
            Member [server-192-168-106-110]:5701 - b15485d2-3121-4398-adf0-aee0147d442e
            Member [server-192-168-106-111]:5701 - c61b4e32-94da-4e6a-8f1d-269ccb7f0f10 this
    ]
    

Запуск Приложения

  • Управление осуществляется через сервис, на каждом узле tomcat:

    sudo systemctl start tomcat
    sudo systemctl status tomcat
    # sudo systemctl restart tomcat
    # sudo systemctl stop tomcat
    
  • Логи приложения находятся в каталоге /opt/tomcat-9/logs/.

После окончания установки выполните вход в систему Юниверс DG.