Репозиторий Docker¶
Внимание
Дисклеймер.
Инструкция содержит примерный порядок действий по установке. Инструкция призвана описать логику действий по установке на простом, абстрактном примере. В зависимости от инфраструктуры сервера (кластера) и его конфигурации, вам могут понадобиться дополнительные или иные шаги.
Эта инструкция не должна восприниматься буквально, а использоваться в качестве основы действий.
При старте системы требуется проверить backend лог на предмет ошибок ERROR. В случае их наличия - обратитесь к разработчику.
Рекомендуемый способ установки Юниверс – c использованием Docker. Официальная документация Docker.
Система при желании может быть установлена вручную. Такой способ установки требует специальных навыков. См. примеры инструкций ручной установки на Ubuntu в закрытом контуре и с доступом к интернету. Для корректной работы сборки необходимо, чтобы синхронизация с NTP сервером была включена на хосте, где будет запущена сборка.
Примечание
Текущая инструкция содержит пример установки через Docker. Для установки необходимо иметь репозиторий с дистрибутивом Юниверс в виде образов Docker.
Подготовка к установке¶
Подготовка сервера:
Обновите существующий список пакетов Ubuntu. Команда:
sudo apt update
Установите Docker через официальный репозиторий. Документацию см. по ссылке https://docs.docker.com/.
Установите Docker Compose (версия выше 1.29).
Настройте разрешения для Docker Compose. Пример команды:
sudo chmod +x /usr/local/bin/docker-compose
Установите Git.
Ссылка на репозиторий:
Согласно договору поставки Юниверс получите доступ к репозиторию с дистрибутивом вашего продукта.
Альтернативный путь: получите архив с Docker-образами дистрибутива, и создайте собственный репозиторий через локальный Dockerhub. Архив будет содержать файл .env, который включает теги на компоненты системы и набор образов для компонентов.
Установка с Docker¶
Чтобы установить Юниверс DG:
Перед работой с репозиторием, убедитесь, что он добавлен в исключения антивируса.
Убедитесь, что ссылка на репозиторий с дистрибутивом вашего продукта в наличии. О получении ссылки см. выше.
Клонируйте репозиторий из Gitlab или Docker. Пример команды:
git clone [your-link-universe-platform-deploy.git]
Перейдите в каталог с кодом. Пример команды:
cd universe-platform-deploy
Для запуска системы используйте команду:
docker-compose up -d
По умолчанию пользовательский интерфейс доступен для просмотра на localhost:8080.
Логин и пароль по умолчанию: admin/admin. После введения логина и пароля система запросит файл лицензии и смену пароля.
Пользовательская установка с Docker Compose¶
Примечание
Версия docker-compose должна быть 1.29 или выше
При необходимости используйте docker-compose.yml для создания собственного образа. В файле .env содержится полный перечень доступных переменных.
Создайте файл docker-compose.yml.
Создайте папку hunspell со словарями. См. также инструкцию по настройке библиотеки Hunspell.
Вы можете пересоздать docker-контейнер с новыми настройками с помощью команды:
docker-compose up -d --build --force-recreate
Пример файла docker-compose.yml:
version: '2.4'
services:
jacoco:
image: docker.universe-data.ru/universe/jacoco-agent:latest
profiles: ["jacoco"]
volumes:
- jacoco:/jacoco:ro
ui:
image: ${FRONTEND_IMAGE}
restart: always
ports:
- ${FRONTEND_PORT}:80
networks:
- dg_network
environment:
BACKEND_ADDRESS: ${BACKEND_ADDRESS}
CLIENT_MAX_BODY_SIZE: ${CLIENT_MAX_BODY_SIZE}
PROXY_SEND_TIMEOUT: ${PROXY_SEND_TIMEOUT}
PROXY_READ_TIMEOUT: ${PROXY_READ_TIMEOUT}
SEND_TIMEOUT: ${SEND_TIMEOUT}
TZ: ${TIMEZONE:-UTC}
links:
- dg
dg:
image: ${BACKEND_IMAGE}
restart: always
ports:
- ${BACKEND_PORT}:8080
- ${JACOCO_AGENT_PORT:-6300}:6300
networks:
- dg_network
volumes:
- ${BACKEND_INTEGRATION:-./universe-integration}:/usr/local/tomcat/universe-integration
- jacoco:/jacoco:ro
environment:
ORIENTDB_DB_ADDRESS: orientdb-dg:2424
ORIENTDB_DB_NAME: dg
ORIENTDB_USER: root
ORIENTDB_PASSWORD: root
POSTGRES_ADDRESS: postgres-dg:5432
POSTGRES_USERNAME: ${DG_POSTGRES_USER}
POSTGRES_PASSWORD: ${DG_POSTGRES_PASSWORD}
DATABASE_NAME: ${DG_POSTGRES_DB_NAME}
SEARCH_CLUSTER_ADDRESS: opensearch-dg:9200
SEARCH_CLUSTER_NAME: docker-cluster
EMAIL_ENABLED: ${EMAIL_ENABLED}
EMAIL_SERVER_HOST: ${EMAIL_SERVER_HOST}
EMAIL_SERVER_PORT: ${EMAIL_SERVER_PORT}
EMAIL_SSL_ENABLE: ${EMAIL_SSL_ENABLE}
EMAIL_STARTTLS_ENABLE: ${EMAIL_STARTTLS_ENABLE}
BULK_XLSX_IMPORT_BLOCK_SIZE: ${BULK_XLSX_IMPORT_BLOCK_SIZE}
EMAIL_USERNAME: ${EMAIL_USERNAME}
EMAIL_PASSWORD: ${EMAIL_PASSWORD}
EMAIL_FRONTEND_URL: ${EMAIL_FRONTEND_URL}
MODULES_BLACKLIST: ${MODULES_BLACKLIST}
GUEST_MODE: ${GUEST_MODE}
DG_DQ_ENSURE_MODEL: ${DG_DQ_ENSURE_MODEL}
DG_DIS_UPDATE_PROFILES_PROJECTS_JOB_DISABLED: ${DG_DIS_UPDATE_PROFILES_PROJECTS_JOB_DISABLED}
DG_DIS_UPDATE_PROFILES_PROJECTS_CRONEX: ${DG_DIS_UPDATE_PROFILES_PROJECTS_CRONEX}
DG_DIS_UPDATE_PROFILES_URL: ${DG_DIS_UPDATE_PROFILES_URL}
DG_DIS_UPDATE_PROJECTS_URL: ${DG_DIS_UPDATE_PROJECTS_URL}
JAVA_TOOL_OPTIONS: ${JAVA_TOOL_OPTIONS:-}
TZ: ${TIMEZONE:-UTC}
SCANNER_RUNNER_LOCAL_PARALLELISM: ${SCANNER_RUNNER_LOCAL_PARALLELISM:-2}
SCANNER_RUNNER_BUFFER_SIZE: ${SCANNER_RUNNER_BUFFER_SIZE:-128}
mem_limit: 2000m
mem_reservation: 1000m
depends_on:
postgres-dg:
condition: service_healthy
opensearch-dg:
condition: service_healthy
orientdb-dg:
condition: service_healthy
postgres-dg:
image: docker.universe-data.ru/mirror/timescale/timescaledb:2.7.0-pg12
restart: always
environment:
POSTGRES_DB: ${DG_POSTGRES_DB_NAME}
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
DG_POSTGRES_USER: ${DG_POSTGRES_USER}
DG_POSTGRES_PASSWORD: ${DG_POSTGRES_PASSWORD}
TZ: ${TIMEZONE:-UTC}
ports:
- ${POSTGRES_OUTER_PORT}:5432
networks:
- dg_network
volumes:
- ./init-db.sh:/docker-entrypoint-initdb.d/initdb.sh
- dg-postgres-data:/var/lib/postgresql/data
command: postgres -c max_prepared_transactions=200 -c max_connections=200 -c shared_preload_libraries='timescaledb'
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d $DG_POSTGRES_DB_NAME"]
interval: 10s
timeout: 1s
retries: 20
opensearch-dg:
image: docker.universe-data.ru/mirror/opensearchproject/opensearch:2.7.0
restart: always
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms1024m -Xmx1024m"
- "discovery.type=single-node"
- "DISABLE_SECURITY_PLUGIN=true"
- "TZ=${TIMEZONE:-UTC}"
volumes:
- dg-opensearch-data:/usr/share/opensearch/data
- ./hunspell:/usr/share/opensearch/config/hunspell/
- ./synonyms.txt:/usr/share/opensearch/config/synonyms.txt
- ./plugins:/usr/share/opensearch/plugins-for-install/
- ./opensearch-install-plugins-and-start.sh:/usr/share/opensearch/opensearch-install-plugins-and-start.sh
entrypoint: /usr/share/opensearch/opensearch-install-plugins-and-start.sh
ulimits:
memlock:
soft: -1
hard: -1
ports:
- ${OPENSEARCH_HTTP_OUTER_PORT}:9200
networks:
- dg_network
healthcheck:
test: >
bash -c "curl http://localhost:9200 | grep '\"cluster_name\"'"
interval: 10s
timeout: 2s
retries: 20
orientdb-dg:
image: docker.universe-data.ru/mirror/orientdb:3.2.23
restart: always
mem_limit: 2500m
mem_reservation: 1000m
environment:
ORIENTDB_ROOT_PASSWORD: root
ORIENTDB_OPTS_MEMORY: -Xmx1024m
JAVA_OPTS_SCRIPT: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
TZ: ${TIMEZONE:-UTC}
ports:
- ${ORIENTDB_HTTP_OUTER_PORT}:2480
- ${ORIENTDB_OUTER_PORT}:2424
volumes:
- dg-orientdb-data:/var/orientdb/databases
- ./orientdb_configs/orientdb-server-config.xml:/orientdb/config/orientdb-server-config.xml
networks:
- dg_network
healthcheck:
test: >
bash -c "curl http://localhost:2480/listDatabases"
interval: 10s
timeout: 2s
retries: 20
orientdb-dg-setup:
image: docker.universe-data.ru/mirror/orientdb:3.2.23
environment:
ORIENTDB_DB_NAME: ${ORIENTDB_DB_NAME}
volumes:
- ./init-orientdb.sh:/init-orientdb.sh
networks:
- dg_network
entrypoint: ["sh", "/init-orientdb.sh"]
depends_on:
orientdb-dg:
condition: service_healthy
volumes:
dg-postgres-data:
driver: local
dg-orientdb-data:
driver: local
dg-opensearch-data:
driver: local
jacoco:
driver: local
networks:
dg_network:
driver: bridge
Проверка статуса синхронизации¶
Чтобы проверить статус синхронизации, выполните команду:
timedatectl
Чтобы включить синхронизацию, выполните команду:
timedatectl -- set-ntp yes
Чтобы отключить синхронизацию, выполните команду:
timedatectl -- set-ntp no