Перейти к содержанию
Открыть мой план

Binary data в n8n: файлы, вложения, filesystem, database и S3 без падений

Обновлено: 2026-05-29

Binary data — это любые файлы, которые проходят через workflow: PDF, изображения, аудио, Excel, архивы, вложения писем, скачанные документы, файлы из Telegram или webhook. В небольших сценариях это незаметно, но в production именно binary data часто приводит к падению по памяти, переполнению диска и огромным backup.

Главное правило: файл не должен бесконечно путешествовать по workflow без необходимости. n8n должен получить файл, извлечь или передать его, сохранить в нужное место и дальше работать с metadata: ссылкой, hash, размером, типом, внешним ID.

Какие режимы хранения использовать

РежимКогда подходитРиск
defaultтолько маленькие тесты и старые конфигурациифайлы могут съедать память процесса
filesystemодин n8n main без queue mode или простой Docker Composeнужен стабильный volume и backup файлов
databasequeue mode, где workers должны видеть binary data одинаковоPostgreSQL растёт быстрее
s3крупные файлы и внешнее объектное хранилищенужна лицензия/поддержка и lifecycle policy

Для большинства небольших self-hosted инстансов лучше начинать с filesystem. Для queue mode нельзя просто положиться на локальную папку одного контейнера: worker может не увидеть файл. В таком случае используйте database или продуманное внешнее хранилище.

Настройка filesystem mode

services:
  n8n:
    image: n8nio/n8n:latest
    environment:
      - N8N_DEFAULT_BINARY_DATA_MODE=filesystem
      - N8N_BINARY_DATA_STORAGE_PATH=/home/node/.n8n/binaryData
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=336
    volumes:
      - n8n_data:/home/node/.n8n

После включения проверьте, что volume реально сохраняется между перезапусками. Нельзя хранить binary data внутри одноразового слоя контейнера: при пересоздании контейнера файлы исчезнут, а старые executions начнут показывать ошибки.

Настройка для queue mode

В queue mode main и workers выполняют разные части системы. Если binary data лежит только на файловой системе одного контейнера, другой контейнер может не найти файл. Практичный вариант — database mode:

services:
  n8n:
    environment:
      - EXECUTIONS_MODE=queue
      - N8N_DEFAULT_BINARY_DATA_MODE=database
  n8n-worker:
    command: worker --concurrency=5
    environment:
      - EXECUTIONS_MODE=queue
      - N8N_DEFAULT_BINARY_DATA_MODE=database

Минус очевиден: база станет больше. Поэтому для файловых workflow нужны pruning, лимит размера входящих файлов и вынос бизнес-файлов в Drive, S3, MinIO, Nextcloud или Яндекс Диск.

S3/external storage: когда нужно

Объектное хранилище полезно, когда файлов много, они большие, а n8n должен оставаться оркестратором. В такой архитектуре n8n не хранит “всё навсегда”, а записывает файл в bucket, получает ключ объекта и передаёт его дальше.

N8N_DEFAULT_BINARY_DATA_MODE=s3
N8N_EXTERNAL_STORAGE_S3_HOST=s3.example.ru
N8N_EXTERNAL_STORAGE_S3_BUCKET_NAME=n8n-binary
N8N_EXTERNAL_STORAGE_S3_BUCKET_REGION=ru-1
N8N_EXTERNAL_STORAGE_S3_ACCESS_KEY=...
N8N_EXTERNAL_STORAGE_S3_ACCESS_SECRET=...

Обязательно настройте lifecycle policy на bucket. Иначе вы просто перенесёте переполнение диска из VPS в объектное хранилище и получите растущий счёт.

Как проектировать workflow с файлами

  1. Принять файл через Webhook, Telegram, Gmail, Drive или HTTP Request.
  2. Проверить размер, MIME type и источник.
  3. Сохранить файл во внешнее хранилище или оставить только на время обработки.
  4. Извлечь нужный текст/таблицу/metadata.
  5. Удалить лишние binary-поля перед дальнейшей обработкой.
  6. В CRM или таблицу записать ссылку, hash и статус обработки.

Если workflow отправляет файл в AI/OCR, не передавайте туда весь архив или длинную цепочку вложений. Сначала нормализуйте документ, ограничьте размер и разберите тип файла.

Права и папки

После обновлений Docker или переезда частая проблема — n8n не может записать файл в binaryData. Проверьте владельца volume и права:

docker compose exec n8n sh -lc 'id && ls -la /home/node/.n8n && ls -la /home/node/.n8n/binaryData || true'

Если директория принадлежит root или старому UID, контейнер может падать или выдавать file is not writable. Исправляйте права аккуратно, предварительно сделав backup volume.

Ошибки, которые легко перепутать

ОшибкаЧто проверить
binary data missingне удалён ли файл pruning-ом, доступен ли volume, не сменился ли режим хранения
file is not writableправа на папку, пользователь контейнера, read-only volume
workflow падает по памятине используется ли memory/default mode для больших файлов
backup огромныйне хранятся ли файлы в PostgreSQL или volume без политики очистки

Минимальный smoke-test

curl -X POST "https://n8n.example.ru/webhook/file-test" \
  -F "file=@./test.pdf" \
  -F "source=manual-test"

В workflow проверьте: файл принят, размер виден, путь/ключ сохранён, после перезапуска контейнера execution всё ещё может прочитать binary data, а pruning не удаляет свежие файлы.

Операционный runbook для self-hosted

Для темы «Binary data в n8n» важно разделять настройку и эксплуатацию. Настройка отвечает на вопрос “запустилось ли”, эксплуатация — “сможем ли мы восстановиться, обновиться и расследовать инцидент без потери credentials и execution history”.

Перед изменениями проверьте бэкап базы, значение N8N_ENCRYPTION_KEY, состояние volume, логи web-процесса и worker-процесса. Главный риск — получить уверенный, но непроверенный ответ модели, сломанный JSON или дорогой цикл retry.

СлойЧто зафиксироватьЗачем
Входнормализованный prompt, контекст, список источников, версия промпта и ожидаемый JSON-ответпозволяет повторить проблему без доступа к production-секретам
Контрольvalidation_error_rate, token_cost, fallback_usage, human_review_rate, source_coverageпоказывает деградацию раньше, чем пользователи начинают писать в поддержку
Безопасностьполучить уверенный, но непроверенный ответ модели, сломанный JSON или дорогой цикл retryснижает риск скрытых дублей, утечки данных и неконтролируемых write-действий
Готовностьесть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Binary data в n8n»делает статью пригодной для runbook, а не только для чтения

Пример безопасного входного контракта

{
  "request_id": "req_demo_001",
  "prompt_version": "2026-05-29",
  "input": "краткое нормализованное сообщение пользователя",
  "allowed_actions": ["read", "draft", "classify"],
  "forbidden_actions": ["send_without_review", "change_payment"],
  "expected_output": {
    "intent": "technical|support|sales|unknown",
    "confidence": 0.0,
    "needs_human_review": true,
    "sources": []
  }
}

Критерий готовности

  • есть свежий backup базы и проверено значение N8N_ENCRYPTION_KEY
  • web, worker, queue и database используют согласованные переменные окружения
  • после изменения проверены логи, healthcheck и запуск критичных workflow
  • записан rollback-план с командами и ответственным

Связанные материалы

Ответы на частые вопросы

Какой режим binary data выбрать для n8n?

Для простого одиночного Docker-инстанса чаще подходит filesystem. Для queue mode безопаснее database или внешнее хранилище, потому что workers должны видеть те же данные.

Почему n8n падает при обработке PDF или вложений?

Часто файл хранится или копируется в памяти. Нужно включить подходящий binary data mode, ограничить размер файлов и не передавать binary-поле через все ноды без необходимости.

Нужно ли включать S3 для binary data?

S3 полезен при большом количестве файлов, но требует правильной настройки bucket, lifecycle policy и совместимости. Для небольшого проекта filesystem может быть проще.