Backup restore drill n8n: проверка восстановления ¶
Обновлено: 2026-05-29
Короткий ответ ¶
Backup для n8n считается рабочим только после успешного restore drill. Недостаточно хранить дамп базы или архив Docker volume: нужно поднять отдельный тестовый контур, восстановить Postgres, файлы, .env, N8N_ENCRYPTION_KEY, workflows и credentials, затем выполнить smoke tests. Главная цель drill — доказать RTO/RPO цифрами, а не верой в то, что backup «где-то есть».
Почему обычного backup недостаточно ¶
Многие команды уверены, что у них есть backup, пока не пробуют восстановить n8n. В момент аварии выясняется, что дамп не той базы, volume не содержит нужных файлов, encryption key остался только в старом контейнере, credentials не расшифровываются, а инструкция восстановления понятна только человеку, который сейчас в отпуске.
Restore drill нужен, чтобы заранее найти эти проблемы. Это учебная тревога: вы восстанавливаете n8n в отдельной среде, не трогая production, и фиксируете реальное время восстановления, потери данных и ручные шаги.
Что обязательно входит в backup ¶
| Компонент | Почему важен | Типичный риск |
|---|---|---|
| Postgres / основная БД | workflows, executions, users, credentials metadata | дамп не проверяли restore-командой |
N8N_ENCRYPTION_KEY |
нужен для расшифровки credentials | ключ потерян или отличается в workers |
.env / secrets |
URL, DB, Redis, binary data, SMTP, OAuth config | секреты хранятся только в панели хостинга |
| Docker Compose / manifests | как поднять контур | восстановили данные, но не сервис |
| Volumes / binary data | файлы, если workflow работают с бинарными данными | пропали вложения, PDF, temporary files |
| Workflow exports | быстрый human-readable fallback | экспорт есть, credentials нет |
| Документация | шаги для дежурного | инструкция устарела после обновления |
Если используется queue mode, в drill нужно включить workers и Redis-конфигурацию. Если используется внешнее S3-like storage для binary data, отдельно проверяйте доступ и права.
Перед началом drill ¶
Не делайте первый restore drill на production. Нужен отдельный сервер, отдельная БД, отдельный домен или внутренний URL. Цель — проверить восстановление, а не создать второй живой инстанс, который случайно начнёт отправлять письма, webhooks или CRM-записи.
Подготовьте:
- свежий backup БД;
- копию
.envбез лишних production-секретов; N8N_ENCRYPTION_KEYиз production-контура;- версию Docker image или package version;
- список critical workflows для smoke tests;
- тестовые credentials или безопасный режим для внешних API;
- человека, который не писал исходную инструкцию.
Последний пункт важен. Если восстановить может только автор инфраструктуры, runbook ещё не готов.
Порядок восстановления ¶
Ниже примерный порядок для self-hosted Docker Compose с Postgres. Команды нужно адаптировать под вашу инфраструктуру.
# 1. Поднять пустую тестовую БД
sudo docker compose up -d postgres
# 2. Восстановить дамп Postgres
cat backup_n8n.sql | sudo docker compose exec -T postgres psql -U n8n -d n8n
# 3. Проверить, что env содержит тот же encryption key
grep N8N_ENCRYPTION_KEY .env
# 4. Поднять n8n в изолированной среде
sudo docker compose up -d n8n
# 5. Посмотреть логи запуска
sudo docker compose logs --tail=200 n8n
Не подключайте восстановленный контур к настоящим webhooks, CRM и платёжным системам до smoke tests. Для проверки достаточно тестовых payload и отключённых write-действий.
Проверка credentials ¶
Самая частая проблема после восстановления — workflows видны, но credentials не работают. Причина обычно в encryption key, версии, env или некорректном переносе БД.
Проверьте три типа credentials:
| Тип | Что проверить |
|---|---|
| API key | node может выполнить read-only запрос |
| OAuth | token ещё действителен или нужен reauth |
| Database/SMTP | connection test проходит, но не пишет в production |
Если credentials не расшифровываются, не пытайтесь массово пересоздавать их до анализа ключа. Сначала сравните N8N_ENCRYPTION_KEY, source backup и версию инстанса.
Smoke tests после восстановления ¶
Smoke test должен доказать, что восстановленный n8n не просто открыл UI, а выполняет реальные workflow.
| Тест | Критерий успеха |
|---|---|
| UI login | пользователь входит, роли не потеряны |
| Critical workflow opened | workflow открывается без missing nodes |
| Manual execution | короткий workflow завершается успешно |
| Credential read test | внешний сервис отвечает read-only запросом |
| Webhook test | тестовый endpoint принимает payload |
| Binary data test | файл читается и передаётся дальше |
| Error workflow | ошибка фиксируется и уходит alert |
Для production-критичных сценариев добавьте бизнес-проверку: заявка появилась в тестовой CRM, письмо не ушло клиенту, платёж не создан, но mapping корректен.
Как измерять RTO и RPO ¶
RTO — сколько времени нужно, чтобы вернуть сервис. RPO — сколько данных можно потерять между последним backup и аварией.
Записывайте факты:
- время начала drill;
- время получения backup;
- время восстановления БД;
- время первого успешного логина;
- время первого успешного workflow;
- сколько executions или payload потерялись относительно production;
- какие шаги потребовали ручной догадки.
Если RTO получился 3 часа, не пишите в документации «примерно 30 минут». Drill нужен именно для честных цифр.
Частые провалы restore drill ¶
| Проблема | Как предотвратить |
|---|---|
Нет N8N_ENCRYPTION_KEY |
хранить в secret manager и backup-инструкции |
| Дамп БД неполный | регулярно делать test restore |
| Backup содержит только workflows | отдельно сохранять БД, credentials, env, volumes |
| Восстановленный инстанс пишет в production CRM | использовать staging credentials и safety flag |
| Нельзя понять, какой image был в production | фиксировать tag и changelog deploy |
| Документация устарела | обновлять runbook после каждого drill |
Рекомендованный график ¶
- После первого production-запуска — drill в течение первой недели.
- После изменения БД, queue mode, storage или secrets — внеплановый drill.
- Для критичных workflow — раз в квартал.
- Для небольшого внутреннего инстанса — минимум раз в полгода.
Контрольный чеклист ¶
- Backup включает БД, env, encryption key, volumes и инструкцию запуска.
- Restore проводится в отдельной среде, не в production.
- Credentials проверены read-only тестами.
- Critical workflows открываются и выполняются.
- Есть измеренные RTO/RPO.
- Документированы ошибки drill и конкретные задачи.
- Следующая дата проверки назначена.
FAQ ¶
Можно ли восстановить credentials без N8N_ENCRYPTION_KEY?
В нормальном сценарии нет: credentials зашифрованы. Если ключ потерян, workflows могут остаться видимыми, но секреты придётся пересоздавать.
Достаточно ли экспортировать workflows в JSON?
Нет. Экспорт помогает как дополнительная копия, но полноценное восстановление требует БД, credentials, env и часто binary data.
Нужно ли хранить executions в backup?
Для некоторых команд да: executions помогают расследовать ошибки и доказать обработку событий. Но объём может быть большим, поэтому retention и backup нужно согласовать заранее.
Как безопасно тестировать восстановленные webhooks?
Используйте отдельный домен или test URL, отключите реальные провайдеры и отправляйте payload вручную. Не подключайте production webhook provider к восстановленному инстансу.
Кто должен проводить drill?
Лучше дежурный или второй инженер, а не автор runbook. Так вы проверите, что инструкция исполнима без устных пояснений.
Как применять playbook в команде ¶
Playbook «/playbooks/backup-restore-drill/» должен быть понятен человеку, который не писал workflow. Поэтому в нём нужны входной сигнал, частота запуска, критерий тревоги, ответственный и ожидаемое действие после срабатывания.
Используйте этот материал как операционную инструкцию: что проверить, где посмотреть логи, как понять масштаб проблемы и когда эскалировать.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | входной item по теме «/playbooks/backup-restore-drill/»: источник события, внешний ID, время получения и нормализованные поля | позволяет повторить проблему без доступа к production-секретам |
| Контроль | successful_executions, skipped_items, retry_count, error_branch_usage, manual_override_count | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | принять happy path за production-готовность и не проверить повторы, пустые входы, откат и наблюдаемость | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «/playbooks/backup-restore-drill/» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"source": "manual|webhook|schedule|api",
"external_id": "stable-id-from-source",
"received_at": "2026-05-29T10:00:00Z",
"payload_version": "v1",
"dry_run": true,
"audit": {"workflow_id": "...", "execution_id": "..."}
}
Критерий готовности ¶
- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме