Відновлення та тренування
Kept відновлює тільки у нову порожню базу даних, перевіряє її та залишає підміну вам. Він відмовляється працювати з базою даних, у якій щось є, тож його не можна випадково спрямувати на живу.
Відновлення
Section titled “Відновлення”-
Перелічіть знімки:
Terminal window docker compose run --rm --no-deps --entrypoint kept kept admin backup --listЦе запускає CLI в одноразовому контейнері
kept, який має том даних, ключі, логін власника з вашогоcompose.override.yaml, а також налаштування резервного копіювання (із.envабо збережені в Адміністрування → Резервні копії; див. резервні копії). -
Створіть порожню базу даних поруч із живою, як суперкористувач бази даних:
Terminal window docker compose exec db psql -U postgres -c "CREATE DATABASE kept_restored OWNER kept_owner"docker compose exec db psql -U postgres -d kept_restored -c \"CREATE EXTENSION pg_trgm; CREATE EXTENSION unaccent; CREATE EXTENSION vector; ALTER SCHEMA public OWNER TO kept_owner;"На керованому Postgres натомість виконайте рядки розширень і власності з SQL постачальника для нової бази даних.
-
Відновіть у неї, попередньо завантаживши
.envу оболонку (set -a; . ./.env; set +a):Terminal window docker compose run --rm --no-deps --entrypoint kept \-e KEPT_OWNER_DATABASE_URL="postgres://kept_owner:${KEPT_DB_OWNER_PASSWORD}@db:5432/kept_restored" \kept admin restore <snapshot>Kept витягує базу даних і файли зі знімка, перевіряє дамп за маніфестом, перевіряє, що
pg_restoreвідповідає основній версії сервера та розширення існують, відновлює в одній транзакції, потім порівнює кількість рядків і дайджест даних кожної таблиці з маніфестом: будь-яка таблиця, чиї дані відрізняються, навіть за однакової кількості рядків, призводить до збою відновлення. Файли повертаються у сховище, яке вказуєKEPT_STORAGE, з перевіркою SHA-256 кожного. Наприкінці він друкує команди підміни. -
Підмініть, зупинивши Kept, як суперкористувач:
Terminal window docker compose stop keptdocker compose exec db psql -U postgres -c "ALTER DATABASE kept RENAME TO kept_before_restore"docker compose exec db psql -U postgres -c "ALTER DATABASE kept_restored RENAME TO kept"docker compose up -dЗалишайте
kept_before_restore, доки не впевнитесь, потім видаліть його.
Перейменування бази даних потребує суперкористувача, а жоден із логінів Kept ним не є: тому Kept друкує ці команди, а не виконує їх.
Після втрати сервера
Section titled “Після втрати сервера”На новій машині: встановіть Kept як описано в Встановлення за допомогою Docker Compose, і перед
першим запуском помістіть ключі з набору для відновлення у .env (KEPT_SECRET_KEY, KEPT_AUTH_SECRET,
а також KEPT_SECRET_KEY_VERSION і KEPT_SECRET_KEYS_RETIRED, якщо набір їх містить), а ціль
резервного копіювання з паролем — у compose.override.yaml. Потім:
docker compose up -d dbdocker compose run --rm --no-deps --entrypoint kept kept admin backup --listdocker compose run --rm --no-deps --entrypoint kept kept admin restore <snapshot>docker compose up -dБаза даних kept нового встановлення залишається порожньою (служба migrate ще не запустилася), тож вона
приймає відновлення безпосередньо; підміняти нічого не потрібно.
Без ключів повертається все, крім секретних значень і ключів ШІ, які залишаються нечитабельними.
Щомісячне тренування
Section titled “Щомісячне тренування”Резервна копія, яку ніхто не відновлював, — це сподівання, а не резервна копія. Раз на місяць відновлюйте найсвіжіший знімок
у тимчасову базу даних і дозвольте Kept порівняти її (з завантаженим .env, як вище):
docker compose exec db psql -U postgres -c "CREATE DATABASE kept_drill OWNER kept_owner"docker compose exec db psql -U postgres -d kept_drill -c \ "CREATE EXTENSION pg_trgm; CREATE EXTENSION unaccent; CREATE EXTENSION vector; ALTER SCHEMA public OWNER TO kept_owner;"docker compose run --rm --no-deps --entrypoint kept kept admin backup drill \ --into "postgres://kept_owner:${KEPT_DB_OWNER_PASSWORD}@db:5432/kept_drill"docker compose exec db psql -U postgres -c "DROP DATABASE kept_drill"Тренування відновлює найсвіжіший придатний знімок, порівнює кількості та дайджести, перевіряє SHA-256 50
файлів (--all-files перевіряє їх усіх) і записує тренування у живу базу даних, що знімає
сповіщення «Час для тренування відновлення» в Адміністрування → Статус. Воно ніколи не торкається живих даних.
Перевірка репозиторію
Section titled “Перевірка репозиторію”Воркер щотижня перевіряє репозиторій (restic check). Щоб перевірити зараз або ще й зчитати частину
даних:
docker compose run --rm --no-deps --entrypoint kept kept admin backup verify --read-data 5%За файлового сховища S3 verify також перевіряє кожен файл у маніфесті відносно бакета. Якщо збій
залишив застаріле блокування на репозиторії, kept admin backup unlock видаляє його; команда відмовляється працювати, поки
виконується резервне копіювання.