# Roko Backup Script Скрипт для автоматического резервного копирования данных OpenClaw в Yandex Object Storage. ## Назначение Автоматизированный бэкап рабочих файлов, конфигурации, медиа и баз данных OpenClaw с загрузкой в облако (Yandex Object Storage через rclone). Включает верификацию, ротацию старых бэкапов и формирование отчётов. ## Архитектура Скрипт построен по принципу конвейера (pipeline) с разделением на классы: - **Config** — конфигурация: пути, лимиты, настройки. Загружается из env-переменных или JSON-файла. - **LockFile** — предотвращает параллельный запуск через PID-файл. - **Collector** — собирает файлы для бэкапа в staging-директорию с учётом исключений. - **Archiver** — создаёт tar.gz-архив из staging-директории. - **Uploader** — загружает архив в облако через rclone с retry-логикой (10s, 30s, 60s). - **Verifier** — проверяет наличие архива в облаке. - **Cleaner** — удаляет старые локальные и облачные бэкапы сверх лимита. - **Reporter** — пишет JSON-отчёт о результате. - **BackupPipeline** — оркестрирует все шаги: collect → archive → upload → verify → clean → report. ## Схема работы 1. **Блокировка** — создаётся lock-файл `/tmp/roko-backup.lock` для предотвращения параллельных запусков. 2. **Сбор** — файлы копируются во временную staging-директорию с учётом исключений. 3. **Архивация** — staging упаковывается в `roko-YYYYMMDD-HHMMSS.tar.gz` в `~/backups/`. 4. **Загрузка** — архив загружается в `yabackup:for-backup/roko/` через rclone (3 попытки с backoff). 5. **Верификация** — проверяется наличие архива в облаке через `rclone ls`. 6. **Очистка** — удаляются старые локальные (>3) и облачные (>14) бэкапы. 7. **Отчёт** — пишется JSON-отчёт в `~/.openclaw/workspace/roko-backup-report.json`. 8. **Разблокировка** — lock-файл удаляется. ## Запуск ### Вручную ```bash python3 ~/.openclaw/scripts/roko-backup.py ``` ### Из cron (ежедневно в 3:00) ```bash crontab -e ``` Добавить строку: ```cron 0 3 * * * /usr/bin/python3 /home/openclaw/.openclaw/scripts/roko-backup.py >> /home/openclaw/backups/roko-backup.log 2>&1 ``` ### Dry-run (проверить что будет бэкапиться) ```bash python3 ~/.openclaw/scripts/roko-backup.py --dry-run ``` ## Аргументы командной строки - `--config PATH` — путь к JSON-файлу конфигурации (по умолчанию: env-переменные или built-in defaults). - `--dry-run` — только собрать файлы, показать что будет бэкапиться, без архивации и загрузки. - `--verbose` — подробный лог (DEBUG уровень вместо INFO). ## Логи и отчёты - **Логи** — выводятся в stdout (перенаправляйте в файл при запуске из cron). - **Отчёт** — JSON-файл `~/.openclaw/workspace/roko-backup-report.json` с полями: - `timestamp` — время бэкапа - `status` — `success`, `error`, `dry-run` - `name` — имя архива - `size_bytes` — размер в байтах - `error` — сообщение об ошибке (если есть) ## Что бэкапится - `~/.openclaw/workspace/` — рабочая директория - `~/.openclaw/openclaw.json` — конфигурация - `~/.openclaw/scripts/` — скрипты - `~/.openclaw/media/` — медиа-файлы - `~/.openclaw/plugin-skills/` — навыки плагинов - `~/.openclaw/agents/main/agent/openclaw-agent.sqlite` — база данных агента ### Исключения - `node_modules/` - `__pycache__/` - `*.pyc` - `.git/` - `roko-pulse.jsonl` - `cache/` - `*.tmp` - `.cache/` ## Проксирование (NO_PROXY) Для работы с Yandex Object Storage используется переменная окружения: ```bash NO_PROXY="storage.yandexcloud.net,yandexcloud.net" ``` Это гарантирует, что запросы к `storage.yandexcloud.net` и `yandexcloud.net` идут напрямую, минуя HTTP-прокси (если он настроен в системе). Применяется автоматически во всех вызовах rclone (upload, verify, clean). ## Конфигурация через env-переменные - `ROKO_REPORT_FILE` — путь к файлу отчёта (по умолчанию: `~/.openclaw/workspace/roko-backup-report.json`) - `ROKO_ARCHIVE_DIR` — директория для локальных архивов (по умолчанию: `~/backups`) - `ROKO_RCLONE_REMOTE` — rclone remote (по умолчанию: `yabackup:for-backup/roko`) - `ROKO_MAX_CLOUD` — макс. облачных бэкапов (по умолчанию: 14) - `ROKO_MAX_LOCAL` — макс. локальных бэкапов (по умолчанию: 3) ## Требования - Python 3.10+ - rclone (должен быть в PATH) - Настроенный rclone remote `yabackup` для Yandex Object Storage