Закрытый контур на Ubuntu¶
Внимание
Дисклеймер.
Инструкция содержит примерный порядок действий по установке. Инструкция призвана описать логику действий по установке на простом, абстрактном примере. В зависимости от инфраструктуры сервера (кластера) и его конфигурации, вам могут понадобиться дополнительные или иные шаги.
Эта инструкция не должна восприниматься буквально, а использоваться в качестве основы действий.
Примечание
Ниже приведен пример установки системы на сервер Ubuntu 22.04 minimal installation.
Предупреждение
Инструкция актуальна для установки Юниверс MDM версии 6.9 и старше, так как система перешла с Elasticsearch на Opensearch
Предупреждение
В Юниверс MDM версии 6.11 было осуществлено обновление PostgreSQL до версии 16.3, в связи с этим теперь требуется обязательная установка расширения TimescaleDB для корректной работы с большими объемами данных. Перед установкой рекомендуется проверить совместимость вашей версии PostgreSQL и версии TimescaleDB.
Предварительные действия:
Архив с дистрибутивом предоставляется клиенту при приобретении продукта через менеджера компании "Юниверс Дата".
Распакуйте архив дистрибутива, который содержит скрипты для установки, в любое место. Содержимое будет храниться в каталоге MDM_6.X_Ubuntu_22.04_offline_install. Далее этот каталог будет именоваться как <OFFLINE_REP>.
Скопируйте содержимое <OFFLINE_REP> на целевой сервер.
Установка с помощью bash скрипта¶
В корне директории MDM_6.X_Ubuntu_22.04_offline_install находится скрипт 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. Убедитесь, что вас устраивает стандартная конфигурация.
Файл 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 в opencsearch.yml,
export SEARCH_CLUSTER_ADDRESS="localhost:9200" - адрес кластера Opensearch.
Файл postgresql.conf содержит основные настойки PostgreSQL Из перечня настроек необходимо изменить следующие:
max_prepared_transactions = 300
max_connections = 1000
port = 5432
listen_addresses = '*'
Файл 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
Файл opensearch.yml содержит конфигурации Opensearch. Вы можете изменить: cluster.name: universe-os-cluster, path.data: /var/lib/opensearch, path.logs: /var/log/opensearch и другие параметры в соответствии с требованиями к настройкам системы.
Файл tomcat.service необходим в создании tomcat daemon. Не нуждается в редактировании, будет автоматически скопирован скриптом.
Запуск скрипта¶
Предоставьте скрипту права на исполнение:
sudo chmod +x ./install.sh
Запустите скрипт от имени супер-пользователя:
sudo ./install.sh
По окончании исполнения скрипта Universe будет доступна по адресу: http://ваш_IP:8080/universe-frontend (логин и пароль: admin/admin)
После введения логина и пароля система запросит файл лицензии и смену пароля.
Ручная установка¶
Установка Midnight Commander (опционально)¶
Все пакеты и зависимости для Midnight Commander располагаются по пути: ./<OFFLINE_REP>/mc
Для установки Midnight Commander перейдите в указанную директорию и выполните команду:
sudo dpkg -i *.deb
Установка Vim (опционально)¶
Все пакеты и зависимости для vim располагаются по пути: ./<OFFLINE_REP>/vim
Для установки vim перейдите в указанную директорию и выполните команду:
sudo dpkg -i *.deb
Установка Opensearch¶
Используйте один из вариантов установки с помощью команд:
wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.14.0/opensearch-2.14.0-linux-x64.deb
sudo dpkg -i opensearch-2.14.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.14.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 словарей
Словари hunspell располагаются по пути: ./<OFFLINE_REP>/Opensearch/hunspell
Для установки скопируйте директорию /<OFFLINE_REP>/Opensearch/hunspell в /etc/opensearch/:
sudo cp -rv /path/to/hunspell /etc/opensearch
Выдайте права для новой директории:
sudo chown -R root:opensearch /etc/opensearch/hunspell/
В случае если готовая директория со словарями отсутствует - составьте ее:
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/
См. также инструкцию по настройке библиотеки Hunspell.
Конфигурация cluster.name:
Откройте файл конфигурации (также доступно в mc):
sudo vi /etc/opensearch/opensearch.yml
Замените параметр cluster.name, например, на universe-os-cluster
После внесенных изменений перезапустите Opensearch:
sudo systemctl restart opensearch
Проверка запуска доступна с помощью команды:
curl -X GET '127.0.0.1:9200'
Установка PostgreSQL и TimescaleDB¶
Установите обязательные пакеты:
sudo apt install gnupg postgresql-common apt-transport-https lsb-release wge
Запустите скрипт установки пакета PostgreSQL:
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
Добавьте пакет TimescaleDB:
echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
Установите ключ TimescaleDB GPG:
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/timescaledb.gpg
Обновите список локальных репозиториев:
sudo apt update
Установите TimescaleDB версии 2.15.2:
sudo apt-get install timescaledb-2-postgresql-16='2.15.2*' timescaledb-2-loader-postgresql-16='2.15.2*'
Настройте свой экземпляр PostgreSQL для TimescaleDB:
sudo timescaledb-tune
Этот скрипт включен в timescaledb-tools пакет при установке TimescaleDB. Для получения дополнительной информации см. официальную документацию по конфигурации.
Основные конфигурационные файлы postgresql находятся по пути: /etc/postgresql/16/main/postgresql.conf и /etc/postgresql/16/main/pg_hba.conf
В файле /etc/postgresql/16/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
.Секции файла /etc/postgresql/16/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
После установки и настройки измените пароль пользователю postgres ('notpostgres' - пароль пользователя postgres):
sudo su su postgres psql alter user postgres with password 'notpostgres';
Создайте базу данных universe с помощью команды:
CREATE DATABASE universe;
Добавьте расширение TimescaleDB в вашу базу данных. Подключитесь к базе данных на вашем экземпляре PostgreSQL:
psql -d "postgres://<username>:<password>@<host>:<port>/<universe>"
Добавьте TimescaleDB в базу данных:
CREATE EXTENSION IF NOT EXISTS timescaledb;
Проверьте, установлен ли TimescaleDB:
\dx
Нажмите
q
, чтобы выйти из списка расширений.
Установка openJDK¶
Все пакеты необходимые для корректной установки openJDK располагаются по пути: ./<OFFLINE_REP>/java
Для установки openjdk необходимо перейти в эту директорию и выполнить команду:
sudo dpkg -i *.deb
Установка Tomcat¶
Создайте пользователя:
sudo useradd -m -U -d /opt/tomcat-9 -s /bin/false tomcat
Каталог с tomcat находится в /<OFFLINE_REP>/tomcat-9.
После выполнения команды будет создан пользователь tomcat с домашним каталогом /opt/tomcat-9. Скопируйте этот каталог в /opt/:
sudo cp -rv /<OFFLINE_REP>/tomcat-9/* /opt/tomcat-9
Для создания демона скопируйте файл ./<OFFLINE_REP>/conf_files/tomcat.service в /etc/systemd/system/:
cp -v MDM_6.X_Ubuntu_22.04_offline_install/conf_files/tomcat.service /etc/systemd/system/
Перезагрузите демоны:
systemctl daemon-reload
Установка приложения Universe¶
Дистрибутив Universe находится по пути /<OFFLINE_REP>/universe-6.х (6.х - номер версии системы Universe).
Для установки нужно перейти в данную директорию:
cd /<OFFLINE_REP>/universe-6.x/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/ &&\ sudo cp -v webapps/* /opt/tomcat-9/webapps/
Предоставьте права директории tomcat-9:
chown -R tomcat:tomcat /opt/tomcat-9
Предоставьте права на запуск исполняемым файлам:
chmod +x /opt/tomcat-9/bin/*.sh
Настройка системы:
Для корректного запуска системы необходимо измените следующие файлы:
/opt/tomcat-9/bin/**setenv.sh - приведите к следующему виду (значение настроек описано в секции "Перед запуском скрипта:
export JAVA_OPTS="${JAVA_OPTS} -Dunidata.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.mdm.system.bitronix.tm.journal.disk.logPart1Filename=${CATALINA_HOME}/logs/btm1.tlog org.unidata.mdm.system.bitronix.tm.journal.disk.logPart2Filename=${CATALINA_HOME}/logs/btm2.tlog
Запуск системы:
Перезагрузите tomcat:
sudo systemctl restart tomcat
После окончания установки перейдите по адресу: http://ВАШ-IP:8080/universe-frontend (логин и пароль: admin/admin)
Далее выполните вход в систему Юниверс.
Конфигурация безопасности¶
Конфигурация безопасности необходима для:
Генерации сертификатов или их получения из авторитетного источника;
Размещения сертификатов в Opensearch и Юниверс MDM.
Настройки credentials MDM клиента.
Примечание
Ниже представлен пример генерации самоподписанных сертификатов
Генерация сертификатов¶
# 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=MDM/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=MDM/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=MDM/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=MDM,O=UNIVERSE,L=SAINT-PETERSBURG,ST=SAINT-PETERSBURG,C=RU'
plugins.security.nodes_dn:
- 'CN=universe-os-cluster,OU=MDM,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
Конфигурация Юниверс MDM¶
Создайте truststore, положив туда сертификат открытого ключа узла:
keytool -import -file node.pem -keystore my-truststore.jks
Создайте 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
Настройте файл backend.properties:
# If any security measures are enabled (credentials, encryption) org.unidata.mdm.search.security.enabled=true # Credentials used by MDM to access search cluster org.unidata.mdm.search.admin.login=admin org.unidata.mdm.search.admin.password=admin # Truststore of type JKS, stores public certificates of search nodes for MDM to verify org.unidata.mdm.search.truststore.path=/path/to/my-truststore.jks org.unidata.mdm.search.truststore.password=my-truststore-pass # Keystore of type JKS, stores public+private .p12 certificate of MDM for it to establish an encrypted connection org.unidata.mdm.search.keystore.path=/path/to/my-keystore.jks org.unidata.mdm.search.keystore.password=my-keystore-pass
Последний шаг также можно выполнить через соответствующие переменные окружения:
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