Skip to content

Runbook — бэкапы и восстановление

Audience: operator. Что бэкапится, как восстановить, и где известные пробелы.

Что бэкапится

ДанныеКудаМеханизмЧастота
Ops-мозг CTO (memory + agent role-prompts + CLAUDE.md)kontinuum/claude-ops (GitLab)cron на head: /root/bin/sync-claude-ops.shкаждые 27 мин
Секреты (шифротекст)kontinuum/secrets (GitLab)ручной commit/push (см. секреты)при изменении
Корневой age-ключ ~/.git-keyменеджер паролей (off-machine)ручной — обязателенпри выпуске
Исходники (все submodule)GitLab + клоны на worker/headgitпри коммите

Ops-мозг — детали

/root/bin/sync-claude-ops.sh (на head, cron */27):

  • rsync memory/ + agents/ + CLAUDE.md с head на worker:~/claude-ops;
  • на воркере git add -A; если есть изменения — commit + push в kontinuum/claude-ops. Идемпотентно: нет изменений → нет коммита.
  • Лог: /root/.claude-ops-sync.log на head.

Проверка:

bash
crontab -l | grep sync-claude-ops              # на head: строка */27
tail -5 /root/.claude-ops-sync.log             # последние прогоны
ssh worker 'cd ~/claude-ops && git log -1 --oneline'

Восстановление ops-мозга: склонировать kontinuum/claude-ops и разложить memory/, agents/, CLAUDE.md по местам на новой head.

Восстановление секретов

  1. Поставить age, восстановить ~/.git-key из менеджера паролей в worker:~/.git-key (chmod 600).
  2. Склонировать kontinuum/secrets~/secrets-repo.
  3. age -d -i ~/.git-key <файл>.age по необходимости.

Без шага 1 шаги 2–3 бесполезны — шифротекст нерасшифруем.

Recovery quick-refs

ssh worker не отвечает

reverse-SSH воркера самовосстанавливается: head-tunnel.service на воркере (ServerAlive* + Restart=always через autossh) переподнимает туннель worker→head. Если воркер физически жив, туннель вернётся сам.

  • Last resort: laptop-jump — временный обходной путь, выводится из эксплуатации, на него нельзя закладываться.

Диск воркера /home (252 GB) забит → ломается CI

Хронический источник падений CI.

bash
ssh worker 'df -h /home'
  • НЕ удалять активный CI cargo-target: /home/gitlab-runner/cargo-target.
  • Чистить вместо него: лишние дубли cargo-target, эмуляторные qcow2, /tmp. Эмуляторы убивать по PID.

Туннели лежат

См. runbook туннелей — почти всегда systemctl restart нужного юнита на нужном хосте.

✅ Бэкап данных самого GitLab (закрыто, #78)

Ранее это был известный пробел. Сейчас данные инстанса GitLab (БД, issues, MR, CI-конфиг, registry, LFS, артефакты) бэкапятся ежедневно + вывозятся off-host на worker, вместе с отдельно сохраняемыми gitlab-secrets.json + gitlab.rb.

См. runbook: GitLab бэкап и восстановление — что/куда/расписание/retention и точная процедура restore (секреты ДО gitlab-backup restore).