Репозиторий 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:

  1. Перед работой с репозиторием, убедитесь, что он добавлен в исключения антивируса.

  2. Убедитесь, что ссылка на репозиторий с дистрибутивом вашего продукта в наличии. О получении ссылки см. выше.

  3. Клонируйте репозиторий из Gitlab или Docker. Пример команды:

    git clone [your-link-universe-platform-deploy.git]
    
  4. Перейдите в каталог с кодом. Пример команды:

    cd universe-platform-deploy
    
  5. Для запуска системы используйте команду:

    docker-compose up -d
    

По умолчанию пользовательский интерфейс доступен для просмотра на localhost:8080.

Логин и пароль по умолчанию: admin/admin. После введения логина и пароля система запросит файл лицензии и смену пароля.

Пользовательская установка с Docker Compose

Примечание

Версия docker-compose должна быть 1.29 или выше

При необходимости используйте docker-compose.yml для создания собственного образа. В файле .env содержится полный перечень доступных переменных.

  1. Создайте файл docker-compose.yml.

  2. Создайте папку hunspell со словарями. См. также инструкцию по настройке библиотеки Hunspell.

  3. Вы можете пересоздать 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