Skip to content

Harvester

Harvester — инструмент для создания резервной копии данных платформы Sarex.

Включает следующие модули:

Документация

  • Диск
  • Документы
  • Версии

Планирование

  • Проекты
  • Задачи
  • Атрибуты

Замечания

  • Замечания
  • Согласующие
  • Наблюдатели

Рабочие процессы

  • Рабочие процессы
  • Ресурсы

Пользователи и их взаимосвязи

  • Пользователи
  • Группы
  • Департаменты

Файлы

  • Исходные файлы
  • Результаты обработки исходных файлов

Системные требования

Операционные системы:

  • Debian-based Linux (Debian 12 и выше)
  • RHEL-based Linux (RHEL 10 и выше)

CPU: от 2 ядер
RAM: от 8 GB
Свободное место на диске: должно превышать объём сохраняемых данных минимум на 20%

Инструкции по установке:

Быстрый старт

Конфигурационный файл config.yaml

Для начала работы создайте файл конфигурации приложения с расширением .yaml. В нем задаются основные параметры для резервного копирования и подключения к сервисам.

topic_mode: true # Указывает на использование мода с отправкой данных в топик

kafka:
  host: "kafka:9092" # Локальный хост kafka
  local: true        # Указывает на использование локальной kafka
  topic: "harvester-files" # Имя топика, куда будут публиковатся сообщения

backup:
  output_path: "./backup"        # Путь для сохранения резервных файлов

s3:
  host: "https://storage.yandexcloud.net" # Адрес объекта хранения (S3)
  bucket: "sarex-1-company"                # Имя бакета компании

sarex:
  company_id: 1                 # ID компании на платформе Sarex
  host: "https://lk.sarex.io"  # URL платформы Sarex
  disk_uuid: ""                 # UUID диска компании (если применимо)
  disk_id: 0                   # ID диска или документа компании
  is_project: false            # режим обхода (диск/проект)
  api_host: "https://api.sarex.io" # URL API платформы Sarex
  username: ""                 # Имя пользователя администратора компании
  password: ""                 # Пароль администратора компании

Запуск через Docker Compose

Ниже приведён пример конфигурации сервиса в файле docker-compose.yml:

version: '3.8'

services: 
  harvester:
    image: cr.yandex/crp3ccidau046kdj8g9q/harvester:v1.0.7
    restart: always
    command:
      - "--config-path=/config.yaml"
      - "--access-key=<access-key>"
      - "--secret-key=<secret-key>"
      - "--alias=<alias>"
#      - "--only-files"
    environment:
      - SLEEP_DURATION=86400  # Время ожидания между запусками (в секундах), здесь — 1 день    
    volumes:
      - ./config.yaml:/config.yaml  # Локальный конфиг монтируется внутрь контейнера
      - ./backup:/backup            # Папка для сохранения резервных копий
    depends_on:
      - kafka

  harvester-kafka-sync-app:
    image: cr.yandex/crp3ccidau046kdj8g9q/harvester-kafka-sync-app:v1.0.7
    restart: always
    volumes:
      - ./backup:/backup
    environment:
      S3_HOST: "https://storage.yandexcloud.net"
      S3_BUCKET: "documentations-prod-1-sarex"
      S3_ACCESS_KEY: "<access-key>"
      S3_SECRET_KEY: "<secret-key>"
      BACKUP_OUTPUT_PATH: /backup
      KAFKA_HOST: kafka:9092
      KAFKA_LOCAL: "true"

      PG_HOST: postgres
      PG_LOGIN: sarex
      PG_PASSWORD: sarex
      PG_DATABASE: files
      PG_PORT: 5432

    depends_on:
      - kafka

  harvester-kafka-download-app:
    image: cr.yandex/crp3ccidau046kdj8g9q/harvester-kafka-download-app:v1.0.7
    restart: always
    volumes:
      - ./backup:/backup
    environment:
      S3_HOST: "https://storage.yandexcloud.net"
      S3_BUCKET: "documentations-prod-1-sarex"
      S3_ACCESS_KEY: "<access-key>"
      S3_SECRET_KEY: "<secret-key>"
      BACKUP_OUTPUT_PATH: /backup
      KAFKA_HOST: kafka:9092
      KAFKA_LOCAL: "true"

      PG_HOST: postgres
      PG_LOGIN: sarex
      PG_PASSWORD: sarex
      PG_DATABASE: files
      PG_PORT: 5432

    depends_on:
      - kafka

  db:
    image: postgres:15
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: sarex
      POSTGRES_PASSWORD: sarex
      POSTGRES_DB: files
    volumes:
      - ./pgdata:/var/lib/postgresql/data 
      - ./init-db:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"

  zookeeper:
    image: wurstmeister/zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181

  kafka:
    image: wurstmeister/kafka
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://kafka:9098
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LOG_DIRS: /kafka/logs
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper

  kafka-ui:
    image: provectuslabs/kafka-ui
    ports:
      - '8000:8080'
    environment:
      KAFKA_CLUSTERS_0_NAME: local
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
      KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181

Для запуска сервиса db нужен файл init.sql. Он должен находиться в каталоге init-db рядом с docker-compose.yaml, потому что этот каталог монтируется в контейнер

./init-db:/docker-entrypoint-initdb.d

Содержимое файла init.sql для сервиса db:

CREATE EXTENSION IF NOT EXISTS "pgcrypto";

CREATE TABLE data_source (
    id SERIAL PRIMARY KEY,
    key TEXT NOT NULL,
    created_datetime TIMESTAMP DEFAULT NOW() NOT NULL,
    sync_datetime TIMESTAMP,
    timestamp TIMESTAMP DEFAULT NOW() NOT NULL,
    size BIGINT,
    hash TEXT
);

Release Notes