Документация

Резервная копия в своё хранилище

Резервное копирование в собственное хранилище — функция, которую владелец проекта включает сам. Если её настроить, Hivelore по выбранному вами расписанию выгружает копию вашего проекта — страниц, вложений и задач — в S3-хранилище, которое вы указали. Копия читается без Hivelore и разворачивается обратно в проект.

Пока функция не настроена, в ваше хранилище ничего не уходит. И уходит только копия этого проекта: ни данные других проектов, ни служебные копии сервиса туда не попадают.

Зачем это нужно

Копия в вашем хранилище лежит под вашим контролем: в вашем облаке, под вашими ключами и по вашему расписанию. Её можно открыть в любой момент и развернуть в проект. Так советует правило «3-2-1», которое рекомендуют облачные провайдеры: хотя бы одна копия данных — на независимой площадке.

Ручной архив (Импорт и экспорт, «Экспорт базы знаний») закрывает вопрос «забрать всё один раз». Копия по расписанию закрывает другой: свежая копия есть всегда, а не та, что скачали полгода назад.

Что понадобится

  • S3-хранилище в России — Yandex Object Storage, S3 Selectel, VK Cloud (регион Москва) или Cloud.ru. Копия уходит в него с наших серверов, а персональные данные из базы знаний не должны покидать Россию, поэтому форма принимает адреса только этих хранилищ. Нужно другое хранилище в России, в том числе MinIO на своём сервере, — напишите на support@hivelore.ru, добавим его адрес. Яндекс Диск, Google Drive и WebDAV не поддерживаются.
  • Бакет — приватный, под эти копии.
  • Ключ доступа (access key ID и secret access key) с правом записи в этот бакет.
  • Роль владельца проекта: раздел видит и настраивает только он.

Ключ — только на запись

Мы только кладём файлы: не читаем, не листаем и не удаляем. Поэтому просим ключ с единственным правом — s3:PutObject на этот бакет. Тогда, даже если ключ утечёт от нас, им нельзя ни прочитать ваши копии, ни стереть их — только положить лишний файл.

Образец политики бакета (у провайдеров расходятся мелочи — как называется пользователь в Principal):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": ["<идентификатор ключа или сервисного аккаунта>"] },
      "Action": ["s3:PutObject"],
      "Resource": ["arn:aws:s3:::<бакет>/<папка>/*"]
    }
  ]
}

Ещё строже — только новые объекты: условие "Condition": { "StringEquals": { "s3:if-none-match": "*" } } в том же правиле. Таким ключом нельзя затереть уже лежащую копию; Hivelore с ним работает.

Та же политика с подставленными бакетом и папкой есть в форме настройки — под строкой «Как сделать ключ только на запись», с кнопкой копирования.

Tip

Срок хранения задаёт правило жизненного цикла бакета Старые копии мы не удаляем — для этого ключу понадобилось бы право удалять, а его мы как раз просим не давать. Настройте в бакете правило «удалять объекты старше N дней». Оно же уберёт части загрузки, которая сорвалась посередине.

Настройка

Настройки → Проект → «Общее» → «Резервное копирование» → «Настроить».

Поле Что вписать
Адрес хранилища адрес S3 вашего провайдера, только https://: https://storage.yandexcloud.net, https://s3.ru-1.storage.selcloud.ru, https://hb.ru-msk.vkcloud-storage.ru, https://s3.cloud.ru
Бакет имя бакета
Папка в бакете необязательно; копии лягут в эту папку
Регион многие провайдеры его не проверяют — оставьте пустым, если не знаете
Access key ID и Secret access key ключ из раздела выше
Расписание «Ежедневно» или «Еженедельно» с днём недели, и час

Час считается по часовому поясу проекта (он рядом, в том же разделе «Общее»). Минуту выбирает сервер — чтобы копии разных проектов «в 3 ночи» не сходились в одну минуту, — поэтому расписание показано как «в 03:xx».

Кнопка «Проверить» кладёт в бакет маленький файл hivelore-check.txt — «это проверка, можно удалить». Удачно: «Подключение работает: файл hivelore-check.txt лёг в бакет». Сохранить настройку без удачной проверки нельзя: сломанная копия, которая молча падает по ночам, хуже никакой. Если ключ умеет больше, чем нужно (например, листать бакет), форма предупредит, но сохранить даст.

Ключ хранится у нас зашифрованным и обратно не показывается: в форме видны только последние четыре знака access key ID. Чтобы поменять ключ, его вводят заново целиком.

Адреса во внутренних сетях (частные, петлевые, адреса облачных метаданных) не принимаются: запрос к хранилищу уходит с наших серверов, и через эту форму нельзя достучаться до чужой внутренней сети.

Что лежит в копии

Один запуск — один zip-архив, полный снимок проекта:

hivelore-<проект>-20261015-0300Z.zip
├── manifest.json        — структура: дерево, порядок, значки, цвета, теги, вложения
├── pages/               — страницы в markdown, раскладка как у ручного экспорта
│   ├── Релизы/
│   │   ├── index.md     — сама страница «Релизы»
│   │   └── Версия 3.md
│   └── Глоссарий.md
├── files/               — вложения байтами
└── tasks.json           — задачи: название, описание, состояние, срок, исполнитель, страница-источник
  • Ссылки на картинки в тексте переписаны на файлы в архиве — распакованная папка читается в любом markdown-редакторе: Obsidian, Typora, VS Code.
  • Вики-ссылки остаются как есть — Obsidian их понимает.
  • Подключённые Google-доки и доски Miro лежат в manifest.json списком ссылок: их содержимое живёт у владельца документа.

Чего в копии нет: удалённых в корзину страниц, истории версий, комментариев, предложений правок, участников и прав, чатов. Копия — это текущее состояние знаний, а не всей работы над ними.

Important

Защищайте бакет так же, как саму базу знаний Архив — обычный zip: его содержимое читается без пароля. Держите бакет приватным, выдавайте доступ к нему только тем, кому положено видеть проект, и, если провайдер это умеет, включите шифрование на стороне хранилища.

Статус и история

В разделе видно:

  • расписание и время следующей копии — или «Выключено — копия по расписанию не снимается»;
  • последнюю удачную копию: когда, сколько весит, сколько страниц;
  • «История копий» — последние запуски, у идущего — этап («Читаем проект», «Упаковываем страницы и вложения», «Отправляем в хранилище») и полоса.

Кнопки: «Сделать копию сейчас» (вне расписания, не чаще раза в 10 минут), «Изменить», «Выключить» и «Удалить». Удаление настройки стирает у нас ключ и останавливает копии; уже снятые копии остаются в вашем хранилище — это ваши данные.

Если копия не снялась

В разделе появляется красная плашка «Копия не снялась» или «Копия не снимается: сбоев подряд — N» с причиной человеческими словами: «ключ не принят», «нет прав на запись в бакет», «хранилище не в России» и так далее.

Всем владельцам проекта приходит письмо — при первом сбое серии, а пока сбой длится, напоминание раз в неделю, а не на каждый запуск. Когда копии снова пошли — короткое письмо «копии снова идут».

Автоматически копия не выключается никогда: тихо выключенная копия — худший исход, вы бы думали, что она идёт.

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

Ключ только на запись читать не умеет, поэтому архив вы скачиваете из своего хранилища сами, а дальше:

Настройки → Проект → «Общее» → «Восстановление из копии» → «Восстановить из копии…» и выберите zip.

  • В пустой проект страницы ложатся в корень.
  • В непустой — под новую страницу «Копия «…» от …». Существующие страницы не трогаются: слияния поверх живого дерева нет.
  • Восстанавливаются дерево с порядком, значки, цвета, теги, вложения и задачи. Исполнитель задачи, которого нет в этом проекте, снимается — сама задача остаётся.
  • Восстановление идёт фоном: после загрузки архива вкладку можно закрыть. Итог — сколько легло, и поимённо, что не легло и почему, — появится в разделе и провисит сутки.

Одну и ту же копию можно восстановить и не раз — например, в новый проект, чтобы проверить, что копия рабочая. Это стоит сделать хотя бы однажды: копия, которую ни разу не разворачивали, — только надежда на копию.

Архив, распакованный и запакованный руками или собранный из другой вики, восстановлением не откроется — его забирает обычный импорт как дерево markdown.

Что пишется в журнал

Включение, правка, выключение и удаление настройки, ручной запуск и восстановление — от имени того, кто это сделал. Плановые запуски в журнал не идут: их ведёт «История копий».