Резервные копии и аварийное восстановление
Для полного восстановления сохраните три компонента: базу данных, мастер-ключ и конфигурацию/артефакты установленных модулей (включая каталог медиафайлов). Помните: мастер-ключ не лежит в базе и его нужно защищать отдельно. Эта страница описывает, что копировать, как и как восстанавливаться.
Что копировать
Защищать нужно три независимые вещи:
| Что | Где | Зачем |
|---|---|---|
| База данных | PostgreSQL | Источник истины — агенты, диалоги, память, настройки, зашифрованные секреты |
| Медиафайлы | AIHUMMER_BLOB_DIR |
Медиа и вложения, на которые ссылается база |
| Мастер-ключ | AIHUMMER_MASTER_KEY |
Расшифровывает хранилище секретов; никогда не хранится в базе |
[!DANGER] Резервная копия базы без
AIHUMMER_MASTER_KEYне позволит расшифровать секреты. Создавайте резервную копиюAIHUMMER_MASTER_KEYотдельно и храните не там, где дамп базы. Хранилище секретов зашифровано конвертно под этим ключом — потеряете мастер-ключ, и зашифрованные секреты невосстановимы, даже с идеальной резервной копией базы.
PostgreSQL — источник истины
Считайте базу авторитетной. Рекомендуемая схема — ежедневный pg_dump плюс
архивация WAL для восстановления на момент времени (PITR), чтобы можно было
восстановиться на любой момент между дампами.
# Ежедневный логический дамп
pg_dump "$AIHUMMER_DATABASE_URL" --format=custom --file=aihummer-$(date +%F).dump
Дополните дампы непрерывной архивацией WAL (PITR) для точного восстановления между снимками.
Память Einstein тоже живёт в базе: человекочитаемый канонический Markdown
(MEMORY.md) и векторное хранилище v2 — её проекции, выводимые из базы, а не
отдельные авторитетные хранилища.
Резервная копия медиафайлов
Медиа и вложения лежат в каталоге AIHUMMER_BLOB_DIR. Создавайте резервную
копию этого каталога вместе с базой, чтобы восстановленные диалоги могли
разрешать свои вложения. Если
AIHUMMER_BLOB_DIR не задан, сервис медиа/файлов не активен и копировать нечего.
Команды aihummer backup и restore
CLI оборачивает рутину в две команды:
aihummer backup [dir] # записать резервную копию в [dir]
aihummer restore <file> # восстановить из файла резервной копии
Ожидаемый результат: backup печатает путь созданного файла резервной
копии; restore завершается без ошибок, после чего /readyz отвечает 200.
Используйте их для обычных операционных копий и восстановлений. Связанные
команды см. в справочнике CLI.
[!WARNING] Восстановление одной только базы — это не полное восстановление. Восстановите также каталог медиафайлов и убедитесь, что на целевом хосте присутствует тот же
AIHUMMER_MASTER_KEY— иначе хранилище секретов не расшифровать.
Аварийное восстановление
Для сценария полной потери хоста следуйте runbook по аварийному восстановлению
(docs/runbooks/disaster-recovery.md). Порядок восстановления:
- Подготовьте хост и установите ту же версию AiHummer.
- Восстановите мастер-ключ в
AIHUMMER_MASTER_KEY. - Восстановите базу (последний дамп, затем накат через WAL/PITR при наличии).
- Восстановите каталог медиафайлов в
AIHUMMER_BLOB_DIR. - Восстановите конфигурацию и артефакты установленных модулей (настройки лежат в базе; отдельные файлы конфигурации модулей верните из копии).
- Восстановите файлы памяти Einstein —
MEMORY.mdи канонический Markdown (проекция памяти) — в их каталог (или дайте перестроить их из базы). - Если используется sidecar-эмбеддер, восстановите векторное хранилище v2 (или перестройте индексы из восстановленной базы/Markdown).
- Поднимите службы (
aihummer up) и проверьте через/readyzиdeploy/host/smoke.sh.
Регулярно выполняйте тестовое восстановление в изолированном окружении и фиксируйте фактические RPO/RTO — резервная копия, которую ни разу не восстанавливали, не считается проверенной.
[!TIP] Храните
AIHUMMER_MEDIA_TOKEN_SECRETвместе с мастер-ключом. Он сохраняет подписанные URL скачивания медиа валидными между перезапусками и пересборками.
Куда дальше
- Пробы и smoke-тест для проверки восстановления: systemd и health-проверки.
- Версионирование и миграции при обновлении: Политика обновлений.