Закрытый контур на Ubuntu

Внимание

Дисклеймер.

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

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

Примечание

Ниже приведен пример установки системы в закрытом контуре (без интернета) на сервер Ubuntu 22.04 minimal installation

Предварительные действия:

  • Архив с дистрибутивом предоставляется клиенту при приобретении продукта через менеджера компании "Юниверс Дата".

  • Распакуйте архив дистрибутива, который содержит скрипты для установки, в любое место. Содержимое будет храниться в каталоге DG_6.X_Ubuntu_22.04_offline_install. Далее этот каталог будет именоваться как <OFFLINE_REP>.

  • Скопируйте содержимое <OFFLINE_REP> на целевой сервер.

Установка с помощью bash скрипта

В корне директории <OFFLINE_REP> находится скрипт install.sh, который устанавливает систему автоматически со стандартными настройками. Скрипт содержит 2 переменные:

  • POSTGRES_PASSWORD - берет значение из файла setenv.sh

  • TOMCAT_HOME - указана стандартная директория для установки Universe.

Также скрипт состоит из функций, последовательность которых описана в конце файла:

  • checkdirs - проверяет все ли директории, необходимые для установки на месте,

  • check_files - проверяет наличие необходимых конфигурационных файлов в папке conf_files,

  • install_mc - устанавливает Midnight Commander,

  • install_vim - устанавливает Vim,

  • install_Opensearch - устанавливает и конфигурирует Opensearch,

  • install_postgres - устанавливает и конфигурирует postgresql,

  • install_java - устанавливает и конфигурирует OpenJDK,

  • install_universe - производит все необходимые действия для запуска Universe.

Перед запуском скрипта

Файлы конфигурации находятся в папке conf_files. Убедитесь, что вас устраивает стандартная конфигурация.

  1. Файл setenv.sh содержит основные настройки Universe:

    • export POSTGRES_ADDRESS="localhost:5432" - адрес сервера Postgres,

    • export POSTGRES_USERNAME="postgres" - пользователь БД postgres,

    • export POSTGRES_PASSWORD="notpostgres" - пароль пользователя Postgres,

    • export DATABASE_NAME="universe" - имя базы данных,

    • export SEARCH_CLUSTER_NAME="universe-os-cluster" - имя кластера Opensearch, которое должно соответствовать значению параметра cluster.name в opensearch.yml,

    • export SEARCH_CLUSTER_ADDRESS="localhost:9300" - адрес кластера Opensearch.

  2. Файл postgresql.conf содержит основные настройки PostgreSQL. Из перечня настроек необходимо изменить следующие:

    • max_prepared_transactions = 300

    • max_connections = 1000

    • port = 5432

    • listen_addresses = '*'

  3. Файл pg_hba.conf содержит настройки безопасности PostgreSQL. Можно изменить данную секцию в соответствии с требуемыми настройками безопасности:

    # Database administrative login by Unix domain socket
    local all postgres peer
    # TYPE DATABASE USER ADDRESS METHOD
    # "local" is for Unix domain socket connections only
    local all all md5
    # IPv4 local connections:
    host all all 127.0.0.1/32 trust
    # IPv6 local connections:
    host all all ::1/128 trust
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    local replication all peer
    host replication all 127.0.0.1/32 scram-sha-256
    host replication all ::1/128 scram-sha-256
    
  4. Файл opensearch.yml содержит конфигурации Opensearch. Вы можете изменить: cluster.name: universe-es-cluster, path.data: /var/lib/opensearch, path.logs: /var/log/opensearch и другие параметры в соответствии с требованиями к настройкам системы.

  5. Файл tomcat.service необходим в создании tomcat daemon. Не нуждается в редактировании, будет автоматически скопирован скриптом.

Запуск скрипта

  1. Предоставьте скрипту права на исполнение:

    sudo chmod +x ./install.sh
    
  2. Запустите скрипт от имени супер-пользователя:

    sudo ./install.sh
    
  3. По окончании исполнения скрипта Universe будет доступна по адресу: http://ваш_IP:8080/universe-frontend (login: admin, password: admin)

После введения логина и пароля система запросит файл лицензии и смену пароля.

Ручная установка

Установка Midnight Commander (опционально)

  • Все пакеты и зависимости для Midnight Commander располагаются по пути: ./<OFFLINE_REP>/mc

  • Для установки Midnight Commander перейдите в указанную директорию и выполните команду:

    sudo dpkg -i *.deb
    

Установка Vim (опционально)

  • Все пакеты и зависимости для vim располагаются по пути: ./<OFFLINE_REP>/vim

  • Для установки vim перейдите в указанную директорию и выполните команду:

    sudo dpkg -i *.deb
    

Установка Java

Примечание

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

  • Все пакеты, необходимые для корректной установки openJDK, располагаются по пути: ./<OFFLINE_REP>/java

  • Для установки openjdk необходимо перейти в эту директорию и выполнить команду:

    sudo dpkg -i *.deb
    

Установка Opensearch

Используйте один из вариантов установки с помощью команд:

wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.7.0/opensearch-2.7.0-linux-x64.deb
sudo dpkg -i opensearch-2.7.0-linux-x64.deb

Или:

curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list
sudo apt-get update
sudo apt-get install opensearch=2.7.0

Запуск Opensearch:

sudo systemctl enable opensearch
sudo systemctl start opensearch

Отключение демо-конфигурации безопасности (обязательно)

В дистрибутиве opensearch по умолчанию включена демо-конфигурация безопасности, ее необходимо отключить:

export DISABLE_SECURITY_PLUGIN=true
sudo systemctl restart opensearch
  • Или добавьте plugins.security.disabled: true в /usr/share/opensearch/config/opensearch.yml

Установка плагина Analysis-ICU (обязательно)

  • Плагин Analysis-ICU для Opensearch располагается по пути: ./<OFFLINE_REP>/Opensearch/analysis-icu-7.14.0.zip

  • Для установки плагина используйте следующую команду (работает, если каталог <OFFLINE_REP> распакован в домашнюю директорию):

    sudo /usr/share/opensearch/bin/opensearch-plugin install analysis-icu
    

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

  1. Словари hunspell располагаются по пути: ./<OFFLINE_REP>/Opensearch/hunspell

  2. Для установки скопируйте директорию /<OFFLINE_REP>/Opensearch/hunspell в /etc/opensearch/:

    sudo cp -rv /path/to/hunspell /etc/opensearch
    
  3. Выдайте права для новой директории:

    sudo chown -R root:opensearch /etc/opensearch/hunspell/
    
  4. В случае если готовая директория со словарями отсутствует - составьте ее:

    cd /etc/opensearch/
    sudo mkdir hunspell
    cd hunspell/
    sudo mkdir ru_RU
    sudo mkdir en_US
    cd /etc/opensearch/hunspell/ru_RU
    sudo wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.dic
    sudo wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.aff
    cd /etc/opensearch/hunspell/en_US
    sudo wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/en/en_US.dic
    sudo wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/en/en_US.aff
    sudo chown -R root:opensearch /etc/opensearch/hunspell/
    

Конфигурация cluster.name

  1. Откройте файл конфигурации (также доступно в mc):

    sudo vi /etc/opensearch/opensearch.yml
    
  2. Замените параметр cluster.name, например, на universe-os-cluster

  3. После внесенных изменений перезапустите Opensearch:

    sudo systemctl restart opensearch
    

Проверка запуска доступна с помощью команды:

curl -X GET '127.0.0.1:9200'

Установка Postgresql-12

  1. Все пакеты необходимые для корректной установки postgres располагаются по пути: /<OFFLINE_REP>/postgres

  2. Для установки postgresql перейдите в указанную директорию и выполните команду:

    sudo dpkg -i *.deb
    
  3. Основные конфигурационные файлы postgresql находятся по путям: /etc/postgresql/12/main/postgresql.conf и /etc/postgresql/12/main/pg_hba.conf

  4. В файле /etc/postgresql/12/main/postgresql.conf раскомментируйте и измените следующие параметры:

    • #listen_addresses = 'localhost', max_connections = 100, #max_prepared_transactions = 0 замените на listen_addresses = '*', max_connections = 1000, max_prepared_transactions = 300

    • port=5433 замените на port=5432

  5. Секции файла /etc/postgresql/12/main/pg_hba.conf должны приобрести следующий вид (допускается изменение параметров под индивидуальные потребности):

    # Database administrative login by Unix domain socket
    local   all             postgres                                peer
    
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    local   all             all                                     md5
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    # IPv6 local connections:
    host    all             all             ::1/128                 trust
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    local   replication     all                                     peer
    host    replication     all             127.0.0.1/32            scram-sha-256
    host    replication     all             ::1/128                 scram-sha-256
    
  6. После установки и настройки измените пароль пользователю postgres ('notpostgres' - пароль пользователя postgres):

    sudo su
    su postgres
    psql
    alter user postgres with password 'notpostgres'
    
  7. Создайте базу данных с помощью команды:

    CREATE DATABASE universe;
    

Установка TimescaleDB

Расширение TimescaleDB для Postgresql требуется для работы некоторых компонентов Юниверс DG.

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

  1. Перейдите в каталог TimescaleDB и выполните установку:

    dpkg -i *.deb
    
  2. Далее в файле /etc/postgresql/12/main/postgresql.conf раскомментируйте и измените следующие параметры:

    shared_preload_libraries='timescaledb'
    timescaledb.telemetry_level=off
    
  3. Перезагрузите postgresql для применения настроек:

    systemctl restart postgresql-12
    

В случае, если будет использоваться другая версия Postgres/Linux, используйте следующую информацию:

  • Добавьте repo, где buster - это debian10, ядро AtraLinux 1.7:

    echo "deb https://packagecloud.io/timescale/timescaledb/debian/ buster main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
    wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo apt-key add -
    
  • Скачайте пакеты в текущую директорию определенной версии postgresql-12 и TimescaleDB2.7.0:

    apt-get download timescaledb-2-oss-2.7.0-postgresql-12  timescaledb-2-loader-postgresql-12=2.7.0~debian10 timescaledb-tools=0.14.3~debian10 timescaledb-toolkit-postgresql-12=1:1.14.0~debian10
    

Установка OrientDB

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

Также см. официальную документацию.

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

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

  2. Переименуйте каталог /opt/orientdb-community-3.2.23 в /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

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

    sudo useradd -m -U -d /opt/tomcat-9 -s /bin/false tomcat
    
  2. Каталог с tomcat находится в /<OFFLINE_REP>/tomcat-9.

  3. После выполнения команды будет создан пользователь tomcat с домашним каталогом /opt/tomcat-9. Скопируйте этот каталог в /opt/:

    sudo cp -rv /<OFFLINE_REP>/tomcat-9/* /opt/tomcat-9
    
  4. Для создания демона скопируйте файл ./<OFFLINE_REP>/conf_files/tomcat.service в /etc/systemd/system/:

    cp -v DG_2.X_Ubuntu_22.04_offline_install/conf_files/tomcat.service /etc/systemd/system/
    
  5. Перезагрузите демоны:

    systemctl daemon-reload
    

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

  1. Дистрибутив Universe находится по пути: /<OFFLINE_REP>/universe-dg-2.х (2.х - номер версии системы Universe DG)

  2. Для установки нужно перейти в данную директорию:

    cd /<OFFLINE_REP>/universe-dg-2.х/Tomcat/
    
  3. Скопируйте конфигурации:

    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/ &&\
    sudo cp -v webapps/* /opt/tomcat-9/webapps/
    
  4. Предоставьте права директории tomcat-9:

    chown -R tomcat:tomcat /opt/tomcat-9
    
  5. Предоставьте права на запуск исполняемым файлам:

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

Настройка системы:

Для корректного запуска системы необходимо измените следующие файлы:

  • /opt/tomcat-9/bin/setenv.sh - приведите к следующему виду (значение настроек описано в секции "Перед запуском скрипта"):

    export JAVA_OPTS="${JAVA_OPTS} -Duniverse.conf=${CATALINA_HOME}/conf/universe -Dlogback.configurationFile=${CATALINA_HOME}/conf/universe/logback.xml"
    #export JRE_HOME=/usr/lib/jvm/java-8-oracle
    #export JAVA_HOME=/usr/lib/jvm/java-8-oracle
    export POSTGRES_ADDRESS="localhost:5432"
    export POSTGRES_USERNAME="postgres"
    export POSTGRES_PASSWORD="notpostgres"
    export DATABASE_NAME="universe"
    export SEARCH_CLUSTER_NAME="universe-os-cluster"
    export SEARCH_CLUSTER_ADDRESS="localhost:9200"
    
  • /opt/tomcat-9/conf/universe/backend.properties - добавьте настройки пути хранения лога:

    org.unidata.dg.system.bitronix.tm.journal.disk.logPart1Filename=${CATALINA_HOME}/logs/btm1.tlog
    org.unidata.dg.system.bitronix.tm.journal.disk.logPart2Filename=${CATALINA_HOME}/logs/btm2.tlog
    

Запуск системы:

  • Перезагрузите tomcat:

    sudo systemctl restart tomcat
    
  • После окончания установки перейдите по адресу: http://ВАШ-IP:8080/universe-frontend (login: admin, password: admin)

После введения логина и пароля система запросит файл лицензии и смену пароля.

Конфигурация безопасности

Конфигурация безопасности необходима для:

  • Генерации сертификатов или их получения из авторитетного источника;

  • Размещения сертификатов в Opensearch и Юниверс DG.

  • Настройки credentials DG клиента.

Примечание

Ниже представлен пример генерации самоподписных сертификатов

Генерация сертификатов

# Root CA
openssl genrsa -out root-ca-key.pem 2048
openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=RU/ST=SAINT-PETERSBURG/L=SAINT-PETERSBURG/O=UNIVERSE/OU=DG/CN=root.dns.a-record" -out root-ca.pem -days 730
# Admin cert
openssl genrsa -out admin-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
openssl req -new -key admin-key.pem -subj "/C=RU/ST=SAINT-PETERSBURG/L=SAINT-PETERSBURG/O=UNIVERSE/OU=DG/CN=A" -out admin.csr
openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730
# Node cert
openssl genrsa -out node-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in node-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node-key.pem
openssl req -new -key node-key.pem -subj "/C=RU/ST=SAINT-PETERSBURG/L=SAINT-PETERSBURG/O=UNIVERSE/OU=DG/CN=universe-os-cluster" -out node.csr
echo 'subjectAltName=DNS:universe-os-cluster' > node.ext
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem -days 730 -extfile node.ext
# Cleanup
rm admin-key-temp.pem
rm admin.csr
rm node-key-temp.pem
rm node.csr
rm node.ext

Флаг -subj позволяет задать атрибуты x509 сертификата в скрипте (CN: CommonName, OU: OrganizationalUnit, O: Organization, L: Locality, S: StateOrProvinceName, C: CountryName). Если его пропустить, задание пройдет интерактивно.

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

CN и DNS сертификатов узлов должны совпадать со значением SEARCH_CLUSTER_NAME

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

Конфигурация Opensearch может находиться по пути: /usr/share/opensearch/config/opensearch.yml либо etc/opensearch/opensearch.yml.

Ниже представлен пример самой базовой конфигурации безопасности. Для изучения всех возможностей и настроек см. официальную документацию.

Пример конфигурации файла /usr/share/opensearch/config/opensearch.yml:

cluster.name: universe-os-cluster
network.host: 0.0.0.0
discovery.type: single-node
plugins.security.ssl.transport.pemcert_filepath: node.pem
plugins.security.ssl.transport.pemkey_filepath: node-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: node.pem
plugins.security.ssl.http.pemkey_filepath: node-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
  - 'emailAddress=my@email.com,CN=A,OU=DG,O=UNIVERSE,L=SAINT-PETERSBURG,ST=SAINT-PETERSBURG,C=RU'
plugins.security.nodes_dn:
  - 'CN=universe-os-cluster,OU=DG,O=UNIVERSE,L=SAINT-PETERSBURG,ST=SAINT-PETERSBURG,C=RU'
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
cluster.routing.allocation.disk.threshold_enabled: false
plugins.security.audit.config.disabled_rest_categories: NONE
plugins.security.audit.config.disabled_transport_categories: NONE

Отформатированную nodes_dn (admin_dn — аналогично) можно получить с помощью команды:

openssl x509 -subject -nameopt RFC2253 -noout -in node.pem

Конфигурация Юниверс DG

  1. Создайте truststore, положив туда сертификат открытого ключа узла:

    keytool -import -file node.pem -keystore my-truststore.jks
    
  2. Создайте keystore, а также скомбинируйте сертификаты открытого и закрытого ключа клиента, положив туда получившийся .p12 сертификат:

    openssl pkcs12 -export -in admin.pem -inkey admin-key.pem -out volumes/admin.p12 -CAfile root-ca.srl -caname root
    keytool -importkeystore -deststorepass my-keystore-pass -destkeypass my-keystore-pass -destkeystore my-keystore.jks -srckeystore admin.p12 -srcstoretype PKCS12 -srcstorepass my-p12-pass
    
  3. Настройте файл backend.properties:

    # If any security measures are enabled (credentials, encryption)
    org.unidata.dg.search.security.enabled=true
    
    # Credentials used by DG to access search cluster
    org.unidata.dg.search.admin.login=admin
    org.unidata.dg.search.admin.password=admin
    
    # Truststore of type JKS, stores public certificates of search nodes for DG to verify
    org.unidata.dg.search.truststore.path=/path/to/my-truststore.jks
    org.unidata.dg.search.truststore.password=my-truststore-pass
    
    # Keystore of type JKS, stores public+private .p12 certificate of DG for it to establish an encrypted connection
    org.unidata.dg.search.keystore.path=/path/to/my-keystore.jks
    org.unidata.dg.search.keystore.password=my-keystore-pass
    
  4. Последний шаг также можно выполнить через соответствующие переменные окружения:

    SEARCH_SECURITY_ENABLED=true
    
    SEARCH_ADMIN_LOGIN=admin
    SEARCH_ADMIN_PASSWORD=admin
    
    SEARCH_TRUSTSTORE_PATH=/path/to/my-truststore.jks
    SEARCH_TRUSTSTORE_PASSWORD=my-truststore-pass
    
    SEARCH_KEYSTORE_PATH=/path/to/my-keystore.jks
    SEARCH_KEYSTORE_PASSWORD=my-keystore-pass