Закрытый контур на Astra Linux с SSL¶
Внимание
Дисклеймер.
Инструкция содержит примерный порядок действий по установке. Инструкция призвана описать логику действий по установке на простом абстрактном примере. В зависимости от инфраструктуры сервера (кластера) и его конфигурации вам могут понадобиться дополнительные/иные шаги.
Эта инструкция не должна восприниматься буквально, а использоваться в качестве основы действий.
При старте системы требуется проверить backend лог на предмет ошибок ERROR. В случае их наличия - обратитесь к разработчику.
Примечание
Ниже приведен пример установки системы в закрытом контуре (без интернета) на Astra Linux 1.7.X "Смоленск". В инструкцию включена настройка SSL.
Предупреждение
Инструкция актуальна для установки Юниверс DG версии 2.5 и старше, так как система перешла с Elasticsearch на Opensearch.
В Юниверс DG версии 2.10 было осуществлено обновление PostgreSQL, в связи с этим для ОС Astra Linux теперь требуется обязательная установка PostgrePRO и расширения TimescaleDB. Перед установкой рекомендуется проверить совместимость вашей версии PostgreSQL и версии TimescaleDB.
Предварительные действия:
Архив с дистрибутивом предоставляется клиенту при приобретении продукта через менеджера компании "Юниверс Дата".
Распакуйте архив дистрибутива, который содержит скрипты для установки, в любое место. Содержимое будет храниться в каталоге MDM_manual_install_Astra_1.7. Далее этот каталог будет именоваться как <OFFLINE_REP>.
Скопируйте содержимое <OFFLINE_REP> на целевой сервер.
Установка JAVA¶
Примечание
Java требуется установить на всех серверах, где планируется запускать Opensearch, Tomcat.
Все пакеты, необходимые для корректной установки openJDK, располагаются в каталоге Java.
Для установки Java:
Перейдите в директорию Java.
Распакуйте содержимое архива с установочными пакетами.
В распакованном каталоге выполните команду:
sudo dpkg -i *.deb
Установка Opensearch¶
Для установки Opensearch:
Перейдите в каталог Opensearch и используйте команду:
sudo dpkg -i *.deb
Для установки OpenSearch версии 2.12 и новее необходимо определить пользовательский пароль администратора, чтобы настроить конфигурацию безопасности. Используйте следующую команду:
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> dpkg -i opensearch-2.14.0-linux-x64.deb
Для OpenSearch версии 2.11 и более ранних версий используйте команду:
sudo dpkg -i opensearch-2.14.0-linux-x64.deb
Пропишите пароль в файле backend.properties. Длина пароля должна быть 8 символов с использованием цифр и спец.символов.
Включите OpenSearch как службу:
sudo systemctl enable opensearch
Запустите службу OpenSearch:
sudo systemctl start opensearch
Убедитесь, что OpenSearch запущен правильно:
sudo systemctl status opensearch
Установка словарей¶
Скопируйте директорию ./<OFFLINE_REP>/Opensearch/hunspell в /etc/opensearch/:
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> dpkg -i opensearch-2.17.0-linux-x64.deb
Выдайте права для новой директории:
sudo chown -R root:opensearch /etc/opensearch/hunspell/
См. также инструкцию по настройке библиотеки Hunspell.
Установка плагина¶
Предварительные действия:
Архив с дистрибутивом предоставляется клиенту при приобретении продукта через менеджера компании "Юниверс Дата".
Распакуйте архив дистрибутива, который содержит скрипты для установки, в любое место. Содержимое будет храниться в каталоге DG_manual_install_Astra_1.7. Далее этот каталог будет именоваться как <OFFLINE_REP>.
Скопируйте содержимое <OFFLINE_REP> на целевой сервер.
Выполните команду с указанием полного пути до архива analysis-icu-*.zip:
sudo /usr/share/opensearch/bin/opensearch-plugin install /<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
Результат выполнения команды будет иметь вид:
Installed analysis-icu with folder name analysis-icu
Конфигурация Opensearch¶
Очистите файл конфигурации и откройте следующий файл с помощью любого редактора:
sudo cp -i /etc/opensearch/opensearch.yml /etc/opensearch/opensearch.yml_before_ssl && > /etc/opensearch/opensearch.yml # Очистка файла sudo vi /etc/opensearch/opensearch.yml
Укажите параметр
cluster.name
, например:cluster.name: dg-os-cluster
Имя кластера будет использоваться в настройках приложения для подключения. Каждый параметр в файле указываем с новой строки.
По умолчанию Opensearch прослушивает только localhost, если приложение Tomcat устанавливается на другой сервер, и/или Opensearch будет использоваться в кластере, то необходимо разрешить подключения с других интерфейсов, указав параметр:
network.host: 0.0.0.0
Также необходимо открыть порт 9200 для нод/приложений, которые будут подключаться к Opensearch.
Если планируется использование только одной ноды Opensearch - укажите параметр:
discovery.type: single-node
Укажите каталог для логов и данных:
path.data: /var/lib/opensearch path.logs: /var/log/opensearch
Если не требуется SSL шифрование и авторизация, то укажите параметр:
plugins.security.disabled: true
Пример итогового файла для запуска 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 на каждом сервере измените ряд настроек:
Задайте уникальный node.name для каждой ноды кластера Opensearch:
# для первого сервера: node.name: node01 # для N сервера # node.name: nodeN
Перечислите все 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"]
Закомментируйте или уберите следующий параметр, т.к. он противоречит кластерной настройке:
#discovery.type: single-node
Серверы кластера Opensearch взаимодействуют между собой, используя порт 9300, который должен быть открыт между ними.
Настройки потребления RAM Opensearch¶
Необходимо настроить объем выделяемого ОЗУ в файле /etc/opensearch/jvm.options. Действие выполняется на каждом узле кластера.
Значения выделяемой ОЗУ не должно быть более 50% от общего объема RAM (при условии, что на сервере не устанавливаются другие ресурсоемкие приложения) и не более 32 Гб. Xms должен быть равен Xmx. В примере, указанном ниже, значение равно 16 Гб:
-Xms16g
-Xmx16g
Настройка SSL Opensearch¶
Совет
Если не требуется подключение по ssl, то описанные шаги можно пропустить.
Для работы SSL требуются сертификаты, генерация которых происходит на одной ноде, затем они копируются на остальные ноды.
На каждом узле удалите или переместите стандартные демо сертификаты в сторонний каталог, т.к. они могут помешать запуску:
cd /etc/opensearch && mkdir -p /opt/_os_default_demo_certs_ && mv *.pem /opt/_os_default_demo_certs_
Сгенерируйте сертификаты (на одной из нод) и перейдите в каталог для сертификатов:
mdkir -p /etc/opensearch/ssl && cd /etc/opensearch/ssl
Создайте корневой сертификат и сертификат администратора, который потребуется для управления настройками:
# Root CA openssl genrsa -out root-ca-key.pem 2048 openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/O=ORG/OU=UNIT/CN=root-ca.dns.record" -out root-ca.pem -days 9999 # 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=CA/O=ORG/OU=UNIT/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 9999 # очистите промежуточные файлы, которые больше не нужны rm admin-key-temp.pem rm admin.csr # days n - срок действия сертификата в днях
Создайте сертификат для каждой ноды кластера Opensearch:
# Node cert 1 openssl genrsa -out node1-key-temp.pem 2048 openssl pkcs8 -inform PEM -outform PEM -in node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node1-key.pem openssl req -new -key node1-key.pem -subj "/C=CA/O=ORG/OU=UNIT/CN=opensearch-node-1" -out node1.csr echo 'subjectAltName=DNS:opensearch-node-1' > node1.ext openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node1.pem -days 9999 -extfile node1.ext # Node cert 2 openssl genrsa -out node2-key-temp.pem 2048 openssl pkcs8 -inform PEM -outform PEM -in node2-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node2-key.pem openssl req -new -key node2-key.pem -subj "/C=CA/O=ORG/OU=UNIT/CN=opensearch-node-2" -out node2.csr echo 'subjectAltName=DNS:opensearch-node-2' > node2.ext openssl x509 -req -in node2.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node2.pem -days 9999 -extfile node2.ext # очистите промежуточные файлы, которые больше не нужны rm node1-key-temp.pem rm node1.csr rm node1.ext rm node2-key-temp.pem rm node2.csr rm node2.ext
Выше представлен пример для двух нод. Для каждой последующей ноды важно:
Заменить все названия файлов в команде, содержащие nodeN (т.е.
node1-key-temp.pem
->node3-key-temp.pem
;node1-key.pem
->node3-key.pem
и т.д.)Указать в параметре CN= действительный hostname/dns адрес для каждой ноды opensearch:
-subj "/C=CA/O=ORG/OU=UNIT/CN=opensearch-node-1"
Скопируйте на все ноды Opensearch получившиеся файлы в каталог /etc/opensearch/ssl и выдайте права на каталог и файлы:
chown opensearch:opensearch -R /etc/opensearch/ssl chown +x /etc/opensearch/ssl chmod 600 /etc/opensearch/ssl/* chmod 644 /etc/opensearch/ssl/root-ca.pem
Конфигурация файла opensearch.yml (SSL)¶
На каждой ноде очистите файл конфигурации и откройте файл (любым редактором):
sudo cp -i /etc/opensearch/opensearch.yml /etc/opensearch/opensearch.yml_before_ssl && > /etc/opensearch/opensearch.yml # Очистка файла sudo vi /etc/opensearch/opensearch.yml
Вставьте следующее содержимое:
cluster.name: universe-os-cluster network.host: opensearch-node-1 node.name: node01 cluster.initial_master_nodes: ["opensearch-node-1","opensearch-node-2"] discovery.seed_hosts: ["opensearch-node-2"] # для кластера параметр ниже должен быть удален, или закомментирован #discovery.type: single-node plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/ssl/node1.pem plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/ssl/node1-key.pem plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/ssl/root-ca.pem plugins.security.ssl.transport.enforce_hostname_verification: false # enable ssl 9200 plugins.security.ssl.http.enabled: true plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/ssl/node1.pem plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/ssl/node1-key.pem plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/ssl/root-ca.pem plugins.security.allow_default_init_securityindex: true plugins.security.authcz.admin_dn: - 'CN=A,OU=UNIT,O=ORG,C=CA' plugins.security.nodes_dn: - 'CN=opensearch-node-1,OU=UNIT,O=ORG,C=CA' - 'CN=opensearch-node-2,OU=UNIT,O=ORG,C=CA' 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 plugins.security.allow_unsafe_democertificates: false path.data: /var/lib/opensearch path.logs: /var/log/opensearch
Замените описания следующих параметров:
Общие для кластера параметры в файле:
cluster.name
- должен быть одинаковый для всех узлов кластера.cluster.initial_master_nodes
- указываются все ноды кластера.network.host: 0.0.0.0
- при указании 0.0.0.0 используются все доступные интерфейсы и IP-адреса, в ином случае можно указать конкретный IP-адрес текущего узла, доступный для всех нод.plugins.security.authcz.admin_dn
- указываются атрибуты админского ключа, получить значение в требуемом формате можно командойopenssl x509 -subject -nameopt RFC2253 -noout -in admin.pem
.В параметре
plugins.security.nodes_dn
указываются все ноды кластера. Должны быть указаны те атрибуты, которые были использованы в команде при генерации сертификатов:CN=opensearch-node-1,OU=UNIT,O=ORG,C=CA
CN=opensearch-node-2,OU=UNIT,O=ORG,C=CA
. Формат отличается от того, что указан при генерации. Чтобы отобразить в требуемом виде, можно выполнить команды для каждого сертификата:openssl x509 -subject -nameopt RFC2253 -noout -in node1.pem openssl x509 -subject -nameopt RFC2253 -noout -in node2.pem openssl x509 -subject -nameopt RFC2253 -noout -in nodeN.pem
.
Уникальные для каждой ноды параметры:
Уникальный
node.name
.Для параметров укажите путь к сертификатам для текущей ноды кластера, например:
plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/ssl/node1.pem
plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/ssl/node1-key.pem
Укажите соседние ноды кластера в параметре
discovery.seed_hosts
. Если используются 3 ноды, то дляopensearch-node-1
параметр будет выглядеть следующим образом["opensearch-node-2", "opensearch-node-3"]
.
Создание хранилища ключей для использования в приложении при подключении к Opensearch (SSL)¶
Создайте truststore и поместите туда сертификат открытого ключа узла:
keytool -import -trustcacerts -file node1.pem -keystore app-truststore.jks
Введите и подтвердите пароль. Например, для
MY-TrustStore-pswd
введитеyes
на вопросTrust this certificate?
Создайте keystore и пометите туда сертификат открытого ключа узла:
openssl pkcs12 -export -in admin.pem -inkey admin-key.pem -out admin.p12 -CAfile root-ca.srl -caname root keytool -importkeystore -destkeystore app-keystore.jks -srckeystore admin.p12 -srcstoretype PKCS12
Введите и подтвердите пароль. Например,
MY-p_12-pswd
:keytool -importkeystore -destkeystore app-keystore.jks -srckeystore admin.p12 -srcstoretype PKCS12
Задайте новый пароль и подтвердить его, он потребуется в конфигурации приложения. Например,
MY-keyStore-pswd
.Введите ранее введенный пароль
MY-p_12-pswd
.Команду можно выполнить без интерактивного ввода паролей, передав их через аргументы, например:
keytool -importkeystore -deststorepass MY-keyStore-pswd -destkeypass MY-keyStore-pswd -destkeystore app-keystore.jks -srckeystore admin.p12 -srcstoretype PKCS12 -srcstorepass MY-p_12-pswd
Удалите промежуточный файл:
rm -f admin.p12
Пароли и полученные файлы .jks потребуются при настройке приложения
Запуск Opensearch¶
Обновите службы:
sudo systemctl daemon-reload
Добавьте Opensearch в автозагрузку:
sudo systemctl enable opensearch.service
Запустите Opensearch:
sudo systemctl start opensearch.service
Проверьте статус:
sudo systemctl status opensearch.service
Проверка запуска Opensearch¶
Проверьте ноды Opensearch:
curl 'https://localhost:9200' -k -u 'admin:admin'
Проверьте статус кластера:
curl 'https://localhost:9200/_cluster/health?pretty' -k -u 'admin:admin'
Примечание
Важно, чтобы "status" = "green", а имя статуса и количество нод совпадали с настроенным значением.
Смена логина/пароля для доступа к Opensearch¶
Пользователи Opensearch хранятся в файле /etc/opensearch/opensearch-security/internal_users.yml. Пароль указан в виде хэша, пример:
admin:
hash: "$2a$12$VcCDgh2NDk07JGN0rjGbM.Ad41qVR/YFJcgHp0UGns5JDymv..TOG"
Чтобы получить хэш пароля, который необходимо использовать, нужно выполнить команду, ввести свой пароль, и получить хэш, который можно вставить в данный конфиг:
bash /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh
Для применения настроек файла выполните скрипт:
cd /usr/share/opensearch/plugins/opensearch-security/tools && \ ./securityadmin.sh -cd /etc/opensearch/opensearch-security -icl -nhnv -h localhost \ -cacert /etc/opensearch/ssl/root-ca.pem \ -cert /etc/opensearch/ssl/admin.pem\ -key /etc/opensearch/ssl/admin-key.pem
Результат успешного выполнения команды:
Done with success
Скрипт записывает данные в индекс для всего кластера, чтобы избежать несогласованности и возможного применения команды с другого узла, следует перенести изменения данного файла на все ноды кластера.
В файле internal_users.yml также можно переименовать пользователя admin, всех остальных удалить и применить конфигурацию.
Установка PostgresPRO 15 из ISO-образа¶
Все пакеты, необходимые для корректной установки, располагаются в директории Postgresql.
Для установки postgresql:
Создайте каталог для размещения репозитория:
sudo mkdir -p /srv/repo/postgrespro/main
Подготовьте образ установочного диска (если на компьютере нет каталога /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
Скопируйте файлы из образа в каталог репозитория:
sudo cp -a /media/cdrom/* /srv/repo/postgrespro/main
Размонтируйте ISO-образ диска:
sudo umount /media/cdrom
Подключите файловый локальный репозиторий в менеджер пакетов:
# Отредактируйте файл vi /etc/apt/sources.list # Добавьте строку deb file:/srv/repo/postgrespro/main/astra-smolensk/1.7 1.7_x86-64 main
Добавьте ключ:
apt-key add /srv/repo/postgrespro/main/keys/GPG-KEY-POSTGRESPRO apt update
Установите PostgresPRO 15:
apt install postgrespro-std-15 systemctl status postgrespro-std-15.service
Проверите запуск:
sudo -u postgres psql -c 'select version()'
Каталог базы по умолчанию находится в /var/lib/pgpro/std-15, приложение устанавливается в /opt/.
Установка TimescaleDB из исходников для PostgresPRO¶
Примечание
Требуется лицензированный дистрибутив PostgresPRO, предоставленный вендором, поскольку открытый репозиторий не подходит.
Проверьте версию 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
Установите необходимое ПО:
apt install git apt install cmake apt install postgrespro-std-15-libs postgrespro-std-15-dev postgrespro-std-15-client
Добавьте специальный pg_config, т.к. для PRO версии стандартный не подходит:
/opt/pgpro/std-15/bin/pg-wrapper links update
Скачайте TimescaleDB:
cd /opt/ && git clone https://github.com/timescale/timescaledb cd /opt/timescaledb
Переключите версию на 2.10, т.к это минимальная версия для 15 postgres:
git checkout 2.10.1
Запустите сборку:
./bootstrap cd ./build && make
Запустите установку:
make install
Отредактируйте postgresql.conf, добавляя минимальные для запуска конфиги, и перезапустите Postgres PRO:
shared_preload_libraries = 'timescaledb' timescaledb.telemetry_level=off
Запустите 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¶
Убедитесь, что была установлена Java (инструкцию см. в начале статьи).
Рекомендуется устанавливать Orientdb на выделенный сервер, т.к. он чувствителен к нехватке ресурсов и производительности диска - использование скоростных дисков (nvme) может увеличить производительность до 16 раз.
Начиная с версии 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>
Для установки OrientDB:
Распакуйте архив /<OFFLINE_REP>/orientdb-community-3.2.32.tar.gz в каталог /opt. Переименуйте каталог /opt/orientdb-community-3.2.32 в /opt/orientdb. Версия может отличаться.
Добавьте пользователя, из-под которого будет запускаться сервис. Выдайте права на каталог:
useradd -r orientdb -s /sbin/nologin chown -R orientdb:orientdb /opt/orientdb/
Отредактируйте файл /opt/orientdb/bin/orientdb.sh, указав следующие значения в переменных:
ORIENTDB_DIR="/opt/orientdb" ORIENTDB_USER="orientdb"
Добавьте сервис, создав файл:
sudo vi /etc/systemd/system/orientdb.service
В содержимом файле настройте параметры. Введите
ORIENTDB_ROOT_PASSWORD
и при необходимости отрегулируйте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" Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64 User=orientdb Group=orientdb ExecStart=/opt/orientdb/bin/server.sh
В файле /opt/orientdb/config/orientdb-server-config.xml в директиву <storages> добавьте следующую информацию. При запуске сервиса будет создана база данных dg, которая в дальнейшем будет использоваться:
<storages> <storage name="dg" path="plocal:/opt/orientdb/databases/dg" loaded-at-startup="true" /> </storages>
При необходимости в этом же файле можно заменить порт и интерфейс, который прослушивает порт. Пример:
<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 должен быть открыт в файрволе для доступа приложения.
ip-address="0.0.0.0" - может быть заменен на конкретный интерфейс. Так же можно указать localhost для http, если требуется ограничить подключения извне к web интерфейсу OrientDB.
http порт опциональный, используется для подключения к WEB-интерфейсу через браузер, и может быть закрыт для безопасности.
Запустите сервис:
systemctl daemon-reload systemctl start orientdb.service
Для проверки работоспособности можно вызвать консоль и подключиться к базе, указав логин/пароль:
/opt/orientdb/bin/console.sh CONNECT remote:localhost/dg root OrientDBPass
В результате появится сообщение об успешном подключении. Введите exit
для выхода.
Проверьте доступность web-интерфейса. Пример ссылки:
curl http://localhost:2480/server/version
См.также
Оф. документация https://www.orientdb.org/docs/3.2.x/fiveminute/
Настройка OrientDB (SSL)¶
Если не требуется подключение по ssl, то пропустите эти шаги.
Генерация сертификатов OrientDB (SSL)¶
Для работы SSL требуются сертификаты. Для их создания выполните действия ниже.
Создайте каталог и перейдите в него для выполнения последующих команд:
cd /opt/orientdb/config/ && mkdir -p cert && cd cert
Создайте сертификат и задайте пароль:
keytool -genkey -alias orientserver -keystore orientdb.ks \ -keyalg RSA -keysize 2048 -validity 9999
Например, orientdb_KS_pass
оставьте пустыми (нажмите ENTER). В значениях атрибутов, после вопроса: Is * correct? [no]: yes
ответьте yes
.
Экспортируйте сертификат, введя пароль
orientdb_KS_pass
из прошлого шага:keytool -export -alias orientserver -keystore orientdb.ks \ -file orientdb.cert
Настройка OrientDB для работы с сертификатами (SSL)¶
Отредактируйте файл /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"/>
На строки:
<listener protocol="binary" ip-address="0.0.0.0" port-range="2434-2434" socket="ssl"/>
<listener protocol="http" ip-address="0.0.0.0" port-range="2480-2480" socket="https"/>
Порт 2424 должен быть открыт в файрволе для доступа приложения.
ip-address="0.0.0.0" - может быть заменен на конкретный интерфейс. Так же можно указать localhost для http, если требуется ограничить подключения извне к web интерфейсу OrientDB.
http порт опциональный, используется для подключения к WEB-интерфейсу через браузер, и может быть закрыт для безопасности.
В этом же файле замените содержимое директивы <network> и <sockets> на строки из примера ниже. Здесь должны быть указаны пароли, которые были использованы при создании сертификатов:
<socket implementation="com.orientechnologies.orient.server.network.OServerTLSSocketFactory" name="ssl"> <parameters> <parameter value="false" name="network.ssl.clientAuth"/> <parameter value="config/cert/orientdb.ks" name="network.ssl.keyStore"/> <parameter value="orientdb_KS_pass" name="network.ssl.keyStorePassword"/> <parameter value="config/cert/orientdb.ks" name="network.ssl.trustStore"/> <parameter value="orientdb_KS_pass" name="network.ssl.trustStorePassword"/> </parameters> </socket> <socket implementation="com.orientechnologies.orient.server.network.OServerTLSSocketFactory" name="https"> <parameters> <parameter value="false" name="network.ssl.clientAuth"/> <parameter value="config/cert/orientdb.ks" name="network.ssl.keyStore"/> <parameter value="orientdb_KS_pass" name="network.ssl.keyStorePassword"/> <parameter value="config/cert/orientdb.ks" name="network.ssl.trustStore"/> <parameter value="orientdb_KS_pass" name="network.ssl.trustStorePassword"/> </parameters>
Отредактируйте файл подключения из консоли /opt/orientdb/bin/console.sh. Включите SSL, укажите актуальные пароли и сертификаты в следующих параметрах:
KEYSTORE="$ORIENTDB_HOME/config/cert/orientdb-console.ks" KEYSTORE_PASS=orientdb_CONSOLE_pass TRUSTSTORE="$ORIENTDB_HOME/config/cert/orientdb-console.ts" TRUSTSTORE_PASS=orientdb_TS_pass SSL_OPTS="-Dclient.ssl.enabled=true"
Запустите / перезагрузите сервис:
systemctl daemon-reload systemctl restart orientdb.service
Для проверки работоспособности можно вызвать консоль и подключиться к базе, указав логин/пароль:
/opt/orientdb/bin/console.sh CONNECT remote:localhost:2434/dg root OrientDBPass
В результате появится сообщение об успешном подключении. Введите exit для выхода.
Проверьте доступность web-интерфейса. Пример ссылки:
curl http://localhost:2480/server/version
Установка Tomcat¶
Для запуска Tomcat требуется Java (описание установки см. выше).
Создайте пользователя для запуска tomcat:
sudo useradd -r tomcat -s /sbin/nologin
Распакуйте дистрибутив из каталога apache-tomcat-9.0.x.tar.gz в каталог /opt/.
Переименуйте каталог /opt/apache-tomcat-9.0.x в /opt/tomcat-9 (версия может отличаться).
Удалите стандартные файлы и каталоги Manager App, которые могут содержаться в дистрибутиве tomcat из каталога /opt/tomcat-9/webapps:
rm -rf /opt/tomcat-9/webapps/*
Выдайте права на директорию tomcat для пользователя tomcat:
chown -R tomcat:tomcat /opt/tomcat-9
Добавьте сервис, создав файл 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
Примените конфигурацию сервисов:
systemctl daemon-reload
Настройка SSL/TLS Tomcat¶
Примечание
В приведенном ниже примере используется имя переменной $CATALINA_BASE
для ссылки на базовый каталог, по отношению к которому разрешается большинство относительных путей. Если вы не настроили Tomcat для нескольких экземпляров, задав каталог CATALINA_BASE, то для $CATALINA_BASE
будет установлено значение $CATALINA_HOME
— каталога, в котором был установлен Tomcat.
Чтобы установить и настроить поддержку SSL/TLS на Tomcat:
Создайте файл keystore для хранения закрытого ключа и самоподписного сертификата сервера, выполнив команду:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
Укажите значение пароля "changeit".
Раскомментируйте запись
SSL HTTP/1.1 Connector
в файле $CATALINA_BASE/conf/server.xml и измените ее, как описано ниже.
Подготовка хранилища ключей сертификатов¶
Примечание
В настоящее время Tomcat работает только с хранилищами ключей формата JKS, PKCS11 или PKCS12. Каждая запись в хранилище ключей идентифицируется строкой псевдонима. Например, спецификация PKCS11 требует, чтобы псевдонимы были чувствительны к регистру. Чтобы избежать проблем, связанных с чувствительностью псевдонимов к регистру, не рекомендуется использовать псевдонимы, отличающиеся только регистром.
Совет
Чтобы импортировать существующий сертификат в хранилище ключей JKS, ознакомьтесь с оф.документацией (в пакете документации JDK) о keytool. Обратите внимание, что OpenSSL часто добавляет читаемые комментарии перед ключом, но keytool этого не поддерживает. Если в вашем сертификате есть комментарии перед ключевыми данными, удалите их перед импортом сертификата с помощью keytool.
Чтобы импортировать сертификат, подписанный вашим собственным CA, в хранилище ключей PKCS12 с помощью OpenSSL - выполните команду:
openssl pkcs12 -export -in mycert.crt -inkey mykey.key \ -out mycert.p12 -name tomcat -CAfile myCA.crt \ -caname root -chain
Для более сложных случаев см. оф.документацию OpenSSL.
Чтобы создать новое хранилище ключей JKS с нуля, содержащее один самоподписной сертификат, выполните следующие действия в командной строке терминала:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
В качестве безопасного алгоритма следует предпочесть алгоритм RSA, который также обеспечивает общую совместимость с другими серверами и компонентами.
Используемая команда создаст новый файл с именем ".keystore" в домашнем каталоге пользователя, в котором она запущена. Чтобы указать другое местоположение или имя файла, добавьте к команде keytool, указанной выше, параметр
-keystore
, за которым следует полное имя пути к вашему файлу keystore. Также необходимо отразить это новое местоположение в файле конфигурации server.xml, как описано далее. Например:$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/my/keystore
После выполнения команды введите пароль хранилища ключей ("changeit" по умолчанию). При желании вы можете указать собственный пароль. Также необходимо указать пароль в конфигурационном файле server.xml, как описано далее.
При необходимости добавьте информацию (компания, имя контактного лица и т.д.) для отображения пользователям, которые попытаются получить доступ к защищенной странице в приложении.
Введите пароль ключа, который является паролем именно для этого сертификата (в отличие от любых других сертификатов, хранящихся в том же файле keystore). Подсказка keytool сообщит вам, что при нажатии клавиши ENTER автоматически используется тот же пароль для ключа, что и для хранилища ключей. Вы можете использовать тот же пароль или выбрать собственный. Если вы выберете пароль, отличный от пароля хранилища ключей, вам также нужно будет указать пользовательский пароль в файле конфигурации server.xml.
В результате действий будет сконфигурирован файл хранилища ключей с сертификатом, который может быть использован сервером.
Более подробно см. в официальной документации Tomcat.
Настройка файла конфигурации¶
Откройте файл server.xml в текстовом редакторе (файл находится в папке conf).
В файле найдите секцию:
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 This connector uses the NIO implementation with the JSSE engine. When using the JSSE engine, the JSSE configuration attributes must be used. -->
Ниже найденного блока пропишите конфигурацию коннектора: укажите порт 8443 (параметр
port
), правильное название файла хранилища ключей (параметрkeystoreFile
) и пароль (параметрkeystorePass
).Пример конфигурации:
<Connector URIEncoding="UTF-8" port="8080" acceptCount="100" enableLookups="false" maxThreads="150" redirectPort="8443" /> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="/usr/share/tomcat/key/server.keystore" keystorePass="uWePKrfemC"/>
Запретите CORS-запросы. В файле найдите секцию:
<filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> <init-param> <param-name>cors.allowed.origins</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> </init-param> <init-param> <param-name>cors.allowed.headers</param-name> <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> </init-param> <init-param> <param-name>cors.exposed.headers</param-name> <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> </init-param> <init-param> <param-name>cors.support.credentials</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>cors.preflight.maxage</param-name> <param-value>10</param-value> </init-param> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Проверьте, что в поле filter-mapping указан URL для backend:
<filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/universe-backend/*</url-pattern> </filter-mapping>
В поле init-param должны быть указаны разрешенные IP-адреса. Если строка пустая, то доступ будет запрещен всем:
<init-param> <param-name>cors.allowed.origins</param-name> <param-value>127.0.0.1</param-value> </init-param>
Сохраните изменения в файле и перезапустите Tomcat.
Установка приложения Universe¶
Для запуска приложения требуется 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
Настройка приложения¶
Основные параметры задаются в переменных в файле setenv.sh. Отредактируйте файл:
vi /opt/tomcat-9/bin/setenv.sh
Установите/добавьте следующие переменные, установив значения соответствующие логическому имени переменной:
# имеющийся параметр 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="universe-os-cluster" export SEARCH_CLUSTER_ADDRESS="localhost:9200" # при использовании кластера Opensearch в переменной SEARCH_CLUSTER_ADDRESS перечисляются через запятую все ноды (hostname или ip), пример: # SEARCH_CLUSTER_ADDRESS=opensearch-node-1:9200,opensearch-node-2:9200,opensearch-node-3:9200
Настройка приложения для подключения к Opensearch через SSL¶
Создайте каталог для сертификатов:
sudo mkdir /opt/tomcat-9/ssl
Скопируйте созданные на предыдущих шагах .jks файлы в созданный каталог:
cp -v *\.jks /opt/tomcat-9/ssl chown -R tomcat:tomcat /opt/tomcat-9/ssl
Основные параметры задаются в переменных в файле setenv.sh. Отредактируйте файл:
vi /opt/tomcat-9/bin/setenv.sh
Установите/добавьте следующие переменные, введя значения, соответствующие логическому имени переменной:
export SEARCH_CLUSTER_NAME="universe-os-cluster" # в качестве адреса требуется использовать dns имя, которые прописано в сертификате в CN export SEARCH_CLUSTER_ADDRESS="opensearch-node-1:9200" # при использовании кластера Opensearch в переменной SEARCH_CLUSTER_ADDRESS перечисляются через запятую все ноды (hostname или ip), пример: # SEARCH_CLUSTER_ADDRESS=opensearch-node-1:9200,opensearch-node-2:9200,opensearch-node-3:9200 export SEARCH_SECURITY_ENABLED=true # учетные данные для авторизации в Opensearch export SEARCH_ADMIN_LOGIN=admin export SEARCH_ADMIN_PASSWORD=admin # укажите сформированные для Opensearch jks файлы и пароли от них export SEARCH_TRUSTSTORE_PATH=/opt/tomcat-9/ssl/app-truststore.jks export SEARCH_TRUSTSTORE_PASSWORD=MY-TrustStore-pswd export SEARCH_KEYSTORE_PATH=/opt/tomcat-9/ssl/app-keystore.jks export SEARCH_KEYSTORE_PASSWORD=MY-keyStore-pswd
Кластерная настройка приложения¶
Если планируется использование нескольких серверов Tomcat, то для настройки кластерной конфигурации приложения в файле /opt/tomcat-9/conf/universe/backend.properties на каждом сервере требуется изменить ряд настроек:
vi /opt/tomcat-9/conf/universe/backend.properties
Следующие параметры одинаковые для каждого узла приложения:
# включите распределенный кэш org.unidata.ddg.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
Параметр ниже должен быть уникальный для каждого узла в кластере приложения, пример значения параметра:
org.unidata.dg.system.node.id=node1 #org.unidata.dg.system.node.id=nodeN # для остальных N серверов
Пример сообщения в логе (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/.
После окончания установки выполните вход в систему Юниверс.
Устранение возможных проблем¶
Ошибка orientDB: переполнение памяти.
Причина: переполнение swap. Для решения требуется задать дополнительно к лимиту на память размер буфера на диске, не превышающий ограничение памяти:
<properties>
<entry name="storage.diskCache.bufferSize" value="5120" />
</properties>
storage.diskCache.bufferSize
- размер кеша в мегабайтах, по умолчанию хранит данные в оперативной памяти. Выделенный размер использует постепенно, не связан с ограничениями размера heap.
Минимальные ограничения по оперативной памяти для запуска: -Xms2048M -Xmx2048M -Dstorage.diskCache.bufferSize=2048
Минимальный желаемый размер по выделяемой оперативной памяти 4Гб. Рекомендуется 8-10 Гб.