---
title: "Backup n8n в S3: Docker Compose и PostgreSQL | Nodbot"
source_url: "https://nodbot.ru/workflows/docker-compose-backup-to-s3/"
canonical_url: "https://nodbot.ru/workflows/docker-compose-backup-to-s3/"
language: "ru"
content_type: "WorkflowTemplate"
section: "workflows"
generated_at: "2026-05-30"
word_count_source: 1040
---

# Backup n8n в S3 через Docker Compose: PostgreSQL, workflows и restore-test

## AI summary

AI-friendly Problem/Solution-мануал: как настроить backup n8n в Docker Compose с PostgreSQL, выгрузкой workflows, S3-compatible storage, retention policy, restore-test, workflow JSON, bash-командами и production-чеклистом.

## Best used for

Полноценный Problem/Solution-мануал для внедрения в n8n: импортировать workflow JSON, настроить безопасность/API/backup, выполнить production-тесты и передать решение команде.

## Table of contents

- Проблема: backup n8n бесполезен без restore-test
- Архитектура backup workflow для Docker Compose
- Контракт параметров backup job
- Команды: pg_dump, workflows export и upload в S3
- Готовый workflow JSON: скачать и импортировать
- Пошаговая настройка backup n8n в S3
- Тесты restore, retention и integrity check
- Production-риски резервного копирования
- Полезные ссылки и документация
- Критерии готовности

## Key topics

- n8n backup
- Docker Compose
- PostgreSQL pg_dump
- S3 compatible storage
- restore-test
- N8N_ENCRYPTION_KEY

## Source outline

Backup n8n в S3 через Docker Compose: PostgreSQL, workflows и restore-test ¶ Обновлено: 2026-05-30 AI summary: AI-friendly Problem/Solution-мануал: как настроить backup n8n в Docker Compose с PostgreSQL, выгрузкой workflows, S3-compatible storage, retention policy, restore-test, workflow JSON, bash-командами и production-чеклистом. Шаблон для внедрения Скачать workflow JSON Скачать test payload Скопировать curl Перед запуском замените SSH host, S3 endpoint, bucket, retention и имена Docker Compose services. Содержание Проблема: backup n8n бесполезен без restore-test Архитектура backup workflow для Docker Compose Контракт параметров backup job Команды: pg_dump, workflows export и upload в S3 Готовый workflow JSON: скачать и импортировать Пошаговая настройка backup n8n в S3 Тесты restore, retention и integrity check Production-риски резервного копирования Полезные ссылки и документация Критерии готовности Проблема: self-hosted n8n в Docker Compose часто живёт годами без проверенного восстановления. Файл “backup.tar.gz” вроде есть, но никто не знает, содержит ли он PostgreSQL, workflows, бинарные данные, настройки encryption key и можно ли поднять из него рабочую копию. Решение: настроить backup n8n в S3-совместимое хранилище как production-процесс: pg_dump PostgreSQL, export workflows, archive, upload, retention, integrity check и регулярный restore-test. Только тогда резервная копия помогает при ошибке обновления, падении VPS или повреждении volume. Backup считается готовым только после успешной проверки восстановления. Проблема: backup n8n бесполезен без restore-test ¶ Самая частая ошибка — копировать только Docker volume или только JSON workflows. Для n8n этого мало: основная рабочая история, credentials metadata и executions обычно лежат в PostgreSQL, а возможность расшифровать credentials зависит от N8N_ENCRYPTION_KEY . Если ключ потерян, backup базы не спасёт credentials. Поэтому workflow должен не просто загрузить архив в S3, а зафиксировать состав backup, размер, checksum, retention policy и результат восстановления на отдельной тестовой среде. Архитектура backup workflow для Docker Compose ¶ Нода Роль Что проверить Schedule nightly Запускает backup по расписанию Часовой пояс, окно низкой нагрузки Prepare backup id Собирает имена файлов и retention Уникальный timestamp, environment label Run pg_dump Снимает PostgreSQL dump Права пользователя, формат -Fc , ненулевой размер Export workflows Экспортирует workflow JSON Все workflows, не полагаться только на UI export Upload to S3 Кладёт архив в S3-compatible storage Endpoint, bucket policy, шифрование Notify result Отправляет статус в Telegram/Slack Размер, checksum, restore-test Контракт параметров backup job ¶ Параметры backup лучше хранить явно: так новая команда поймёт, какой контейнер дампится, где лежит bucket и сколько дней держать копии. { "backup_name": "n8n-prod-nightly", "postgres_container": "n8n-postgres-1", "n8n_container": "n8n-app-1", "database": "n8n", "s3_bucket": "s3://company-backups/n8n/prod", "retention_days": 30, "restore_test": true } Команды: pg_dump, workflows export и upload в S3 ¶ Code Node готовит безопасные имена файлов, а реальные команды выполняются через SSH на Docker host или отдельный runner. Не запускайте dump из браузерного окружения. const src = $json.body ?? $json; const now = new Date(); const stamp = now.toISOString().replace(/[:.]/g, '-'); const name = String(src.backup_name ?? 'n8n-prod').replace(/[^a-z0-9_-]/gi, '-').toLowerCase(); const retentionDays = Number(src.retention_days ?? 30); if (retentionDays < 7) throw new Error('Retention must be at least 7 days for production n8n'); return [{ json: { backup_id: `${name}-${stamp}`, pg_file: `/tmp/${name}-${stamp}.pgdump`, workflows_file: `/tmp/${name}-${stamp}-workflows.json`, archive_file: `/tmp/${name}-${stamp}.tar.gz`, s3_prefix: String(src.s3_bucket ?? '').replace(/\/$/, ''), retention_days: retentionDays, restore_test_required: src.restore_test !== false, labels: { app: 'n8n', type: 'backup', environment: 'production' } } }]; Bash-команды для runner или SSH-ноды ¶ # PostgreSQL dump from Docker Compose mkdir -p /tmp/n8n-backup PGFILE="/tmp/n8n-backup/n8n-$(date -u +%Y%m%dT%H%M%SZ).pgdump" docker compose exec -T postgres pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc > "$PGFILE" # Export workflows and credentials metadata from n8n container WF="/tmp/n8n-backup/workflows-$(date -u +%Y%m%dT%H%M%SZ).json" docker compose exec -T n8n n8n export:workflow --all --pretty > "$WF" # Archive and upload to S3-compatible storage ARCHIVE="${PGFILE%.pgdump}.tar.gz" tar -czf "$ARCHIVE" -C /tmp/n8n-backup "$(basename "$PGFILE")" "$(basename "$WF")" aws s3 cp "$ARCHIVE" "s3://company-backups/n8n/prod/$(basename "$ARCHIVE")" --only-show-errors Что положить рядом с архивом N8N_ENCRYPTION_KEY — хранить отдельно в секретном хранилище, не в архиве. Версию n8n и PostgreSQL. Checksum архива. Инструкцию restore для дежурного инженера. Готовый workflow JSON: скачать и импортировать ¶ Готовый workflow JSON включает расписание, подготовку backup id, placeholder SSH-команды, upload в S3 и уведомление. После импорта замените endpoint и credentials. Скачать готовый workflow JSON Скачать тестовый payload { "name": "Nodbot - n8n Docker Compose backup to S3", "nodes": [ { "name": "Schedule nightly", "type": "n8n-nodes-base.scheduleTrigger", "purpose": "Запустить backup по расписанию" }, { "name": "Prepare backup id", "type": "n8n-nodes-base.code", "purpose": "Собрать имена файлов и retention" }, { "name": "Run pg_dump", "type": "n8n-nodes-base.ssh", "purpose": "Снять PostgreSQL dump с Docker host" }, { "name": "Export workflows", "type": "n8n-nodes-base.ssh", "purpose": "Экспортировать workflows" }, { "name": "Upload to S3", "type": "n8n-nodes-base.httpRequest", "purpose": "Загрузить архив в S3-compatible storage" }, { "name": "Notify result", "type": "n8n-nodes-base.telegram", "purpose": "Сообщить статус backup и restore-test" } ], "connections": "Schedule → Prepare → pg_dump/export → S3 upload → Notify" } Пошаговая настройка backup n8n в S3 ¶ Проверьте, что n8n работает на PostgreSQL, а не на SQLite. Сохраните N8N_ENCRYPTION_KEY в отдельном secret vault. Создайте S3 bucket с версионированием или lifecycle policy. Настройте SSH-доступ runner-а к Docker host с минимальными правами. Запустите workflow вручную и проверьте размер dump, checksum и upload. Поднимите тестовый restore на отдельной машине. Тесты restore, retention и integrity check ¶ curl -X POST "https://YOUR-N8N-DOMAIN/webhook/docker-compose-backup-to-s3" -H "Content-Type: application/json" --data @docker-compose-backup-to-s3-payload.json Минимальный restore-test: создать чистую PostgreSQL, восстановить dump, запустить n8n с тем же encryption key, открыть UI, проверить credentials и выполнить один безопасный workflow. Production-риски резервного копирования ¶ Нет encryption key. Credentials не расшифруются после восстановления. Backup лежит на том же VPS. При потере диска исчезает и сайт, и копия. Не проверяется размер архива. Можно месяцами загружать пустой dump. Retention бесконечный. Bucket растёт и хранит лишние персональные данные. Restore не тестировался. Ошибка обнаружится только в аварии. Полезные ссылки и документация ¶ Смотрите также: Backup self-hosted n8n , PostgreSQL backup/restore , ENV-переменные n8n , Telegram-алерт об ошибках . Документация: Docker Compose , Docker volumes backup/restore , S3 PutObject . Критерии готовности ¶ PostgreSQL dump создаётся в формате, пригодном для restore. Workflow JSON экспортируется отдельно от базы. N8N_ENCRYPTION_KEY сохранён вне VPS. Архив уходит в S3-compatible storage с retention. Restore-test выполняется регулярно и имеет владельца. Нужен backup, которому можно доверять? Nodbot настроит backup и restore-test для self-hosted n8n: PostgreSQL, workflows, S3, алерты и runbook восстановления. Настроить backup

## Test payload

```json
{
  "backup_name": "n8n-prod-nightly",
  "postgres_container": "n8n-postgres-1",
  "n8n_container": "n8n-app-1",
  "database": "n8n",
  "s3_bucket": "s3://company-backups/n8n/prod",
  "retention_days": 30,
  "restore_test": true
}
```

## Key implementation snippet

```javascript
const src = $json.body ?? $json;
const now = new Date();
const stamp = now.toISOString().replace(/[:.]/g, '-');
const name = String(src.backup_name ?? 'n8n-prod').replace(/[^a-z0-9_-]/gi, '-').toLowerCase();
const retentionDays = Number(src.retention_days ?? 30);
if (retentionDays < 7) throw new Error('Retention must be at least 7 days for production n8n');

return [{
  json: {
    backup_id: `${name}-${stamp}`,
    pg_file: `/tmp/${name}-${stamp}.pgdump`,
    workflows_file: `/tmp/${name}-${stamp}-workflows.json`,
    archive_file: `/tmp/${name}-${stamp}.tar.gz`,
    s3_prefix: String(src.s3_bucket ?? '').replace(/\/$/, ''),
    retention_days: retentionDays,
    restore_test_required: src.restore_test !== false,
    labels: { app: 'n8n', type: 'backup', environment: 'production' }
  }
}];
```

## Importable workflow structure

```json
{
  "name": "Nodbot - n8n Docker Compose backup to S3",
  "nodes": [
    { "name": "Schedule nightly", "type": "n8n-nodes-base.scheduleTrigger", "purpose": "Запустить backup по расписанию" },
    { "name": "Prepare backup id", "type": "n8n-nodes-base.code", "purpose": "Собрать имена файлов и retention" },
    { "name": "Run pg_dump", "type": "n8n-nodes-base.ssh", "purpose": "Снять PostgreSQL dump с Docker host" },
    { "name": "Export workflows", "type": "n8n-nodes-base.ssh", "purpose": "Экспортировать workflows" },
    { "name": "Upload to S3", "type": "n8n-nodes-base.httpRequest", "purpose": "Загрузить архив в S3-compatible storage" },
    { "name": "Notify result", "type": "n8n-nodes-base.telegram", "purpose": "Сообщить статус backup и restore-test" }
  ],
  "connections": "Schedule → Prepare → pg_dump/export → S3 upload → Notify"
}
```

## Retrieval hints

- Использовать HTML как canonical source.
- Markdown удобен для LLM-ответов, извлечения workflow-контракта, кода и чеклистов.
- Для ссылок пользователю отдавать canonical URL.
