Novij Backup Agent

Linux-агент для создания резервного копирования на базе Novij Protocol.

Linux backup agent for Novij Protocol.

RU EN

Последняя версияLatest: 0.6.06.071813

Стабильная версияStable: 0.6.05.280100

Установка

Install

Последняя:

Latest:

curl -fsSL https://packages.novij.tech/agents/backup/install.sh | sudo bash

Стабильная:

Stable:

curl -fsSL https://packages.novij.tech/agents/backup/install.sh | sudo env NOVIJ_PACKAGE_CHANNEL=stable bash

Релизы

Releases

Команды

Commands

novij-backup init [--wizard] [--project id] [--path path]
Создаёт базовый config.yaml.Creates the base config.yaml.
novij-backup config validate
Проверяет конфиг.Validates configuration.
novij-backup service-key import <file> [--passphrase value]
Импортирует service-key.Imports the service key.
novij-backup run --job <name> | run --all-enabled
Запускает backup.Runs backup jobs.
novij-backup list [--project id] [--agent id] [--job name]
Показывает локальный индекс backup.Shows the local backup index.
novij-backup verify <backup_id> [--repair-zk]
Проверяет backup и ZK coverage.Verifies backup data and ZK coverage.
novij-backup test zk-coverage [--repair-zk]
Проверяет активные и expired блоки в ZK.Checks active and expired blocks in ZK.
novij-backup restore <backup_id> --to <path>
Восстанавливает backup.Restores a backup.
novij-backup update [--check] [--force] [--dry-run] [--channel latest|stable]
Проверяет и ставит обновление.Checks and installs updates.
novij-backup zk status | zk sync
Показывает статус и синхронизирует ZK.Shows status and syncs ZK.
novij-backup retention plan | retention apply
Планирует и применяет retention.Plans and applies retention.
novij-backup agent status
Показывает состояние агента.Shows agent status.

Частые сценарии

Common Scenarios

1. Первичная настройка после установки 1. Initial setup after install

Создайте базовый конфиг, импортируйте service-key, проверьте конфигурацию и включите systemd timer.

Create the base config, import the service key, validate configuration, and enable the systemd timer.

sudo novij-backup init --wizard
sudo novij-backup service-key import ./novij-backup-agent.service-key.json
sudo novij-backup config validate
sudo systemctl enable --now novij-backup.timer
2. Создание конфига вручную 2. Manual config creation

Основной файл: /etc/novij-backup/config.yaml. После любых изменений запускайте валидацию.

Main file: /etc/novij-backup/config.yaml. Validate it after every change.

Неинтерактивный старт для простого сайта:

Non-interactive start for a simple site:

sudo novij-backup init   --project main-site   --agent web-01   --path /var/www/main-site   --path /etc/nginx   --postgres app   --postgres-user app   --pgpass-file /root/.pgpass

sudo novij-backup config validate
3. Обязательные секции конфига 3. Required config sections
agentстабильные ID сервера и рабочие каталоги: fleet_id, project_id, agent_id, data_dir, log_dir, temp_dir.stable server IDs and work directories: fleet_id, project_id, agent_id, data_dir, log_dir, temp_dir.
novijпуть к service-key, Relay/Storage из service-key, protocol: "v3", crypto_profile: "ntp-pq-v1".service key path, Relay/Storage from service key, protocol: "v3", crypto_profile: "ntp-pq-v1".
zkproduction backup требует required: true, auto_sync: true, запас coverage через min_days_left и target_days.production backup requires required: true, auto_sync: true, coverage reserve via min_days_left and target_days.
securityлокальный master key, passphrase-файлы, шифрование remote manifest. Для production оставляйте remote_manifest_encryption: true и allow_plaintext_remote_manifest: false.local master key, passphrase files, remote manifest encryption. In production keep remote_manifest_encryption: true and allow_plaintext_remote_manifest: false.
jobsчто сохранять: paths, SQL dumps в databases, Docker volumes/paths, retention.what to back up: paths, SQL dumps in databases, Docker volumes/paths, retention.
updatesавтообновления из latest или stable; base URL должен быть https://packages.novij.tech/agents/backup.auto updates from latest or stable; base URL must be https://packages.novij.tech/agents/backup.
4. Пример production-конфига 4. Production config example
agent:
  id: "web-01"
  fleet_id: "production"
  project_id: "main-site"
  agent_id: "web-01"
  data_dir: "/var/lib/novij-backup"
  log_dir: "/var/log/novij-backup"
  temp_dir: "/var/tmp/novij-backup"
  compression: "zstd"
  compression_level: 6

novij:
  service_key_path: "/etc/novij-backup/service-key.json"
  relay_url: "from_service_key"
  storage_url: "from_service_key"
  protocol: "v3"
  crypto_profile: "ntp-pq-v1"

zk:
  required: true
  zk_id: "from_service_key_or_config"
  auto_sync: true
  min_days_left: 14
  target_days: 180

security:
  service_key_passphrase_file: "/etc/novij-backup/service-key.pass"
  backup_key_passphrase_file: "/etc/novij-backup/backup-key.pass"
  backup_key_path: "/etc/novij-backup/backup-key.json"
  remote_manifest_encryption: true
  require_encrypted_remote_metadata: true
  allow_plaintext_remote_manifest: false

updates:
  enabled: true
  interval: "1h"
  auto_install: true
  base_url: "https://packages.novij.tech/agents/backup"
  channel: "latest"
5. Сценарий: файлы сайта 5. Scenario: site files

В paths добавляйте данные, которые нужны для восстановления: код, uploads, nginx, systemd units, docker compose, env-файлы.

Add data needed for restore to paths: code, uploads, nginx, systemd units, docker compose, env files.

jobs:
  - name: "main"
    enabled: true
    schedule: "daily"
    paths:
      - "/var/www/site"
      - "/etc/nginx/sites-enabled"
      - "/etc/systemd/system/site.service"
    exclude:
      - "node_modules"
      - "vendor"
      - ".git"
      - "*.log"
    databases: []
    docker:
      enabled: false
      volumes: []
      containers: []
    retention:
      strategy: "gfs"
      daily: { keep_last: 7 }
      weekly: { keep_last: 1, anchor: "sunday" }
      monthly: { keep_last: 1, anchor: "last_day" }
      quarterly: { keep_last: 1, anchor: "last_day" }
6. Сценарий: PostgreSQL или MySQL 6. Scenario: PostgreSQL or MySQL

Пароли храните в root-only файлах, а не в CLI. PostgreSQL обычно читает /root/.pgpass, MySQL/MariaDB - /root/.my.cnf.

Keep passwords in root-only files, not in CLI. PostgreSQL usually reads /root/.pgpass, MySQL/MariaDB reads /root/.my.cnf.

databases:
  - type: "postgres"
    name: "app"
    mode: "host"
    database: "app"
    user: "app"
    command: "pg_dump"
    pgpass_file: "/root/.pgpass"

  - type: "mysql"
    name: "shop"
    mode: "host"
    database: "shop"
    user: "shop"
    command: "mysqldump"
    defaults_file: "/root/.my.cnf"
7. Сценарий: Docker 7. Scenario: Docker

Для БД в контейнере используйте SQL dump через mode: "docker". Volumes подходят для uploads/storage, но не как основной способ backup живой базы.

For a DB in a container use SQL dump via mode: "docker". Volumes are fine for uploads/storage, not as the main live DB backup method.

jobs:
  - name: "main"
    enabled: true
    schedule: "daily"
    paths:
      - "/root/app.env"
      - "/var/lib/novij-backup/static/docker-compose.yml"
    databases:
      - type: "mariadb"
        name: "app_db"
        mode: "docker"
        container: "db"
        database: "app_db"
        user: "app"
        command: "mariadb-dump"
        env_file: "/etc/novij-backup/mysql.env"
    docker:
      enabled: true
      volumes:
        - "app_uploads"
      containers:
        - name: "app"
          paths:
            - "/app/storage/app/public"
8. Расписание и retention 8. Schedule and retention

Пакет ставит systemd timer. Для ежедневного запуска в 00:00 переопределите timer и примените daemon-reload.

The package installs a systemd timer. For daily 00:00 runs override the timer and apply daemon-reload.

sudo mkdir -p /etc/systemd/system/novij-backup.timer.d
sudo tee /etc/systemd/system/novij-backup.timer.d/override.conf >/dev/null <<'EOF'
[Timer]
OnCalendar=
OnCalendar=*-*-* 00:00:00
Persistent=true
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now novij-backup.timer
retention:
  strategy: "gfs"
  daily: { keep_last: 7 }
  weekly: { keep_last: 4, anchor: "sunday" }
  monthly: { keep_last: 6, anchor: "last_day" }
  quarterly: { keep_last: 4, anchor: "last_day" }
9. Проверка, восстановление, обслуживание 9. Verify, restore, maintenance
sudo novij-backup run --job main
novij-backup list --project main-site --agent web-01 --job main
novij-backup show <backup_id> --project main-site --agent web-01
novij-backup verify <backup_id> --project main-site --agent web-01
sudo novij-backup restore <backup_id> --to /restore/path --project main-site --agent web-01 --job main
novij-backup zk status
novij-backup test zk-coverage --repair-zk
novij-backup retention plan --job main
sudo novij-backup retention apply --job main

Важно: потеря backup-key.json или passphrase означает потерю доступа к зашифрованным backup.

Important: losing backup-key.json or its passphrase means losing access to encrypted backups.