Закрытый контур на Ubuntu
Внимание
Дисклеймер.
Инструкция содержит примерный порядок действий по установке. Инструкция призвана описать логику действий по установке на простом, абстрактном примере. В зависимости от инфраструктуры сервера (кластера) и его конфигурации, вам могут понадобиться дополнительные или иные шаги.
Эта инструкция не должна восприниматься буквально, а использоваться в качестве основы действий.
Примечание
Ниже приведен пример установки системы на сервер Ubuntu 22.04 minimal installation.
Примечание
Ограничьте права доступа на файл backend properties. Сервер приложений должен иметь права только на чтение файла. Администратор должен иметь права на чтение и редактирование. Также рекомендуется ограничить доступ ко всей директории с конфигурацией, оставив доступ на чтение и редактирование только серверу приложений и администратору.
Предварительные действия:
Архив с дистрибутивом предоставляется клиенту при приобретении продукта через менеджера компании "Юниверс Дата".
Распакуйте архив дистрибутива, который содержит скрипты для установки, в любое место. Содержимое будет храниться в каталоге 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-2.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 wget
Запустите скрипт установки пакета 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