Приложения
Vault: снимки Raft
По умолчанию Vault копируется файлами каталога данных — без согласованности: файлы читаются, пока Vault работает. Для Vault на Raft есть способ лучше — снимок через API Vault, целый на момент снимка. Его включаете вы: нужна настройка на сервере. Холодного бэкапа с остановкой Vault arcula не делает.
Какой у вас Vault
План защиты сервера → «Данные приложений». Агент называет Vault по типу хранилища:
- «Vault, Raft» — снимок возможен;
- «Vault, файловое хранилище» — снимка нет, только копия файлов. Обновление агента этого не изменит. Как перейти на Raft — ниже;
- просто «Vault» — агент не прочитал тип хранилища. Почему — по кнопке «Почему».
Включить снимки
1. План подтверждён
Vault уже должен быть в принятом плане — пока копией файлов: arcula vault setup ищет его там.
2. На сервере
sudo arcula vault setupКоманда:
- находит Vault в плане и его адрес: IP контейнера, схема и порт — из его
VAULT_ADDR, по умолчанию порт 8200; - проверяет, что Vault распечатан и его хранилище — raft;
- спрашивает токен администратора Vault без эха; токен не сохраняется;
- создаёт политику
arcula-snapshotс одним правом — читать снимок — и вход AppRolearcula-snapshot. Токены входа живут 15 минут и отзываются после каждого снимка; - делает пробный снимок и кладёт
role_idиsecret_idв/etc/arcula/vault/с правами0600.
Ключи unseal команде не нужны.
- В плане несколько Vault — назовите нужный ключом ресурса:
sudo arcula vault setup db:vault/vault/vault. Ключ — в плане, по кнопке «Почему». - Адрес не нашёлся — задайте его:
--address http://127.0.0.1:8200. Он сохранится. - Токен можно передать и переменной
VAULT_TOKEN.
3. В ЛК
План защиты → строка Vault → «Как копировать» → «снимок Vault (raft) — нужна настройка на сервере» → «Сохранить план».
Со следующего бэкапа Vault идёт снимком: в бэкапе — файл vault-raft.snap.
Снимок не вышел — Vault запечатан, хранилище не raft, вход не прошёл — агент скопирует каталог данных файлами и оставит предупреждение vault_snapshot_failed. Оно в строках лога бэкапа: сервер → «Журнал» → «Бэкап сохранён» → «Строки лога».
Восстановить из снимка
arcula restore снимок не применяет: для этого нужны ключи unseal, а их у агента нет. Он извлекает снимок в /var/lib/arcula/restore/<id>/vault или в каталог из --target. Дальше — штатно.
Поднимите Vault с той же конфигурацией Raft. Если он пустой — vault operator init, распечатайте его временными ключами и войдите временным root-токеном. Vault в контейнере — сначала скопируйте снимок внутрь: docker cp. Затем:
vault operator raft snapshot restore -force vault-raft.snapПосле этого распечатайте Vault исходными ключами unseal и проверьте vault status и секреты.
Ключи unseal храните отдельно: их нет ни в бэкапе, ни в recovery kit. ЛК напоминает о них у сервера: «Обзор» → «Понадобится при восстановлении».
Перейти с file storage на Raft
С хранилищем file снимка нет: arcula vault setup откажет — «Vault storage is file, not raft». Перевести Vault на Raft — ваш шаг. Vault на это время выключен, обычно на минуты.
Пример — для Compose с томом ./vault/data:/vault/data и конфигурацией в переменной VAULT_LOCAL_CONFIG. Команды — в каталоге проекта.
1. Остановить Vault
Остановите Vault и всё, что от него зависит, и сохраните копию vault/data — это точка отката:
docker compose stop vault
sudo cp -a vault/data vault/data.bak2. Каталог для Raft
Владелец каталога — пользователь vault из образа. Узнайте его uid и gid:
docker compose run --rm --no-deps --entrypoint id vault vaultmkdir vault/raft
sudo chown <uid>:<gid> vault/raft3. Файл переноса
Рядом с файлом Compose создайте migrate.hcl:
storage_source "file" { path = "/vault/data" }
storage_destination "raft" {
path = "/vault/raft"
node_id = "vault-1"
}
cluster_addr = "http://127.0.0.1:8201"4. Перенос
docker compose run --rm --no-deps -u vault -v "$PWD/vault/raft:/vault/raft" -v "$PWD/migrate.hcl:/vault/migrate.hcl" --entrypoint vault vault operator migrate -config=/vault/migrate.hclИсходный vault/data команда только читает.
5. Конфигурация
В VAULT_LOCAL_CONFIG замените "backend": {"file": {…}} на "storage": {"raft": {"path": "/vault/raft", "node_id": "vault-1"}} и добавьте "cluster_addr": "http://127.0.0.1:8201". В volumes сервиса добавьте ./vault/raft:/vault/raft.
6. Запуск
docker compose up -d vaultРаспечатайте Vault теми же ключами unseal. vault status должен показать Storage Type raft. Проверьте секреты, затем поднимите остальные сервисы.
7. Снимки
В ЛК: сервер → «Настройки защиты» → «Обнаружить сейчас» или дождитесь обнаружения. Vault станет «Vault, Raft». Дальше — sudo arcula vault setup и «снимок Vault (raft)» в плане, как выше.
Откат — вернуть backend file в конфигурации. Когда снимки пошли, ./vault/data можно убрать из Compose и с диска.
Та же статья — в панели, в разделе «Справка».