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
);