tva
← Insights

セルフホストn8n 2.x:ペイロード上限を上げる前に実行データを整える

ベンダー文書を運用統制、移行判断、検証可能なリリース基準へ落とし込む、プロダクション志向の最新フォローアップです。

2026年に変わったこと

運用上の境界条件が変化したため、このテーマを改めて検討します。長期的に有効な原則は残る一方、現行バージョンでは過去の近道が不十分、あるいは危険になっている場合があります。本稿は2026年7月14日時点で入手できる公式文書を起点に、事実とローカルな判断を分け、設定変更をすべて管理された本番介入として扱います。

最新の一次資料

この更新版の使い方

まず一次資料を確認し、実際に稼働しているバージョンを記録し、設定を変える前に観測可能な成果を定義します。代表性のある環境で、最小かつ元に戻せる変更を試します。コマンドが成功しただけでは受け入れ基準を満たしません。サービスの健全性、データ完全性、レイテンシー、セキュリティ境界、ロールバック時間まで確認します。旧稿の診断手順で現在も有効な部分は運用基盤として残しますが、バージョン依存の例は必ず現行文書と照合します。

リリース前に、設定差分、少なくとも一度は復元確認を行ったバックアップまたはスナップショット、変更を戻すためのコマンドを記録します。最初の本番監視を担当する人と、指標が悪化した場合にエスカレーションを承認する人を分けます。アラートは発報した部品名だけでなく、利用者に見えるリスクを説明する必要があります。確認期間には、エラー率、キュー深度、リソース飽和、処理レイテンシー、データ完全性を合意したベースラインと比較します。平均値が安定していても、少数ながら重要な処理の失敗を隠すことがあるため、裾の挙動も確認します。遅延ジョブ、再試行、定期処理、下流エクスポートが完了するまで変更をクローズしません。復旧時の手作業はすべて記録し、ランブックにない救済手順があれば、ランブックは未完成と判断します。

運用の基盤

n8nのセルフホスティングは無制限のワークフロー実行と完全な制御を提供しますが、大規模なデータセットを扱う複雑なワークフローは、クラウドホスティングソリューションには存在しないフラストレーションの溜まるエラーを引き起こす可能性があります。個別のノードをテストしようとして“Please execute the whole workflow, rather than just the node. (Existing execution data is too large.)”が表示される場合、ペイロードサイズの制限に達しています。この制限を特定、修正、最適化して本番対応のn8nインストールにする方法をご紹介いたします。

問題:ワークフローテストが壊れるとき

n8nインスタンスのセットアップに成功し、堅牢なWebhook機能を設定しましたが、ファイル、大規模なAPIレスポンス、またはデータセットを処理するより高度なワークフローを構築し始めました。完全なワークフローを実行すると問題なく動作しますが、単一のノードをテストしたり部分的な実行を行おうとした瞬間に、n8nが恐ろしいエラーメッセージをスローします。

これは、n8nが部分的な実行データに対して16MBのデフォルト制限を持っているために発生します。この制限はシンプルなワークフローには十分ですが、実際のデータ量を処理し始めるとすぐにボトルネックになります。

修正されるもの

このガイドの終わりまでに、以下が達成されます:

  • ペイロードサイズ制限を16MBから256MBまたはカスタム値に増加
  • 大規模なデータセットを持つ複雑なワークフローの部分実行が動作
  • サーバーのRAM制限を考慮した適切なリソース割り当て
  • ペイロードサイズ使用量を経時的に追跡する監視セットアップ
  • ファイル処理ワークフローに対応する本番対応設定
  • 設定変更のためのバックアップとロールバック手順

前提条件

  • 動作するn8nインストール(できれば当社のHetznerセットアップガイドから)
  • Dockerコンテナで実行中のn8n
  • サーバーへのSSHアクセス
  • Docker Compose環境変数の基本的な理解
  • 最低2GBの利用可能RAM(256MBペイロード制限に推奨)

根本原因の理解

セルフホスティングn8nにペイロード制限がある理由

部分実行(個別ノードのテスト)を行う際、n8nはワークフローの状態とデータをシリアライズしてバックエンドに送信する必要があります。これには以下が含まれます:

  • 前のノードからのすべての入力データ
  • ワークフローロジックとノード設定
  • 実行コンテキストと変数
  • バイナリデータとファイルコンテンツ

デフォルトのN8N_PAYLOAD_SIZE_MAX=16777216(16MB)は、一般的なAPIレスポンスとシンプルなデータ処理向けに設計されています。しかし、現代のワークフローはしばしば以下を処理します:

16MBを超える一般的なシナリオ:

  • ファイルのアップロードと処理(PDF、画像、スプレッドシート)
  • データソースからの大規模なAPIレスポンス
  • 一括データ変換
  • 蓄積されたデータを持つマルチステップワークフロー

修正後に起こること:

  • 大規模なデータセットでの部分実行が動作
  • ファイル処理ワークフローがテスト可能に
  • 複雑なデータ変換をノードごとにデバッグ可能

欠落している設定

ソリューションは、部分実行データの最大サイズを制御するN8N_PAYLOAD_SIZE_MAX環境変数です。クラウドホスティングn8nはより高い制限で自動的にこれを処理しますが、セルフホスティングインスタンスは保守的な16MBのデフォルトを使用します。

ステップ1:現在のセットアップを診断

サーバーリソースの確認

ペイロード制限を増やす前に、サーバーがより大きなメモリ割り当てを処理できることを確認します:

メモリ要件:

  • 64MBペイロード制限:最低1GBの利用可能RAM
  • 128MBペイロード制限:最低2GBの利用可能RAM
  • 256MBペイロード制限:最低3GBの利用可能RAM

現在の制限の確認

N8N_PAYLOAD_SIZE_MAXが設定されているか確認します:

エラー条件のテスト

問題を再現するためのテストワークフローを作成します:

  • n8nインターフェースを開く
  • 大規模なデータセットを持つワークフローを作成(例:16MB以上を返すAPIへのHTTPリクエスト)
  • 下流の1つのノードだけを実行してみる
  • “Existing execution data is too large”エラーが表示されることを確認

ステップ2:主要な問題の修正 – ペイロードサイズの増加

単一のn8nインスタンスの場合

単一のn8nインストールがある場合:

既存の設定にN8N_PAYLOAD_SIZE_MAX環境変数を追加します:

複数のn8nインスタンスの場合

複数のn8nインスタンスを実行している場合、それぞれを更新します:

コンテナの再起動

変更を適用します:

ステップ3:修正の検証

コンテナログの確認

コンテナが正常に起動したことを確認します:

ペイロードサイズ増加のテスト

失敗していたテストワークフローに戻ります:

  • 大規模データセットを持つワークフローを開く
  • 下流の単一ノードを実行してみる
  • “Existing execution data is too large”エラーが解消されたことを確認
  • 部分実行が正しく動作することを確認

メモリ使用量の監視

変更後のシステムリソースを注視します:

ステップ4:サーバーに合わせた最適化

サーバーRAM別の推奨ペイロードサイズ

ハードウェアに適したペイロードサイズを選択します:

メモリ使用量の計算

メモリ要件を見積もります:

# Check container exit reason docker logs n8n-n8n-1

# Reduce payload size if out of memory cd /opt/n8n cp docker-compose.yml.backup_* docker-compose.yml sed -i 's/N8N_PAYLOAD_SIZE_MAX=268435456/N8N_PAYLOAD_SIZE_MAX=67108864/' docker-compose.yml docker compose up -d

# Verify environment variable is set correctly docker exec n8n-n8n-1 env | grep N8N_PAYLOAD_SIZE_MAX

# If missing, recreate container with force docker compose down docker compose up -d --force-recreate

# Check if the value is being read docker logs n8n-n8n-1 | grep -i payload

# Monitor system performance vmstat 1 5 iostat -x 1 5

# Check swap usage swapon --show

# Reduce payload size if needed # From 256MB to 128MB sed -i 's/N8N_PAYLOAD_SIZE_MAX=268435456/N8N_PAYLOAD_SIZE_MAX=134217728/' docker-compose.yml docker compose down && docker compose up -d

# High-capacity instance for file processing n8n-files: image: n8nio/n8n:latest environment:

  • N8N_PAYLOAD_SIZE_MAX=536870912 # 512MB
  • N8N_HOST=files.yourdomain.com

# Standard instance for regular workflows n8n-standard: image: n8nio/n8n:latest environment:

  • N8N_PAYLOAD_SIZE_MAX=67108864 # 64MB
  • N8N_HOST=workflows.yourdomain.com

services: n8n: image: n8nio/n8n:latest environment:

  • N8N_PAYLOAD_SIZE_MAX=268435456

deploy: resources: limits: memory: 2G # Maximum memory usage reservations: memory: 1G # Guaranteed memory # ... rest of configuration

#!/bin/bash # Create monitoring script: /opt/monitor-payload.sh

CONTAINER_NAME="n8n-n8n-1" MEMORY_LIMIT_MB=1500 # Alert if memory usage exceeds this

CURRENT_MEMORY=$(docker stats --no-stream --format "{{.MemUsage}}" $CONTAINER_NAME | cut -d'/' -f1 | sed 's/MiB//')

if (( $(echo "$CURRENT_MEMORY > $MEMORY_LIMIT_MB" | bc -l) )); then echo "WARNING: n8n memory usage high: ${CURRENT_MEMORY}MB" | logger # Add notification logic (email, Slack, etc.) fi

# Add to Traefik labels for request size limiting labels:

  • "traefik.http.middlewares.payload-limit.buffering.maxRequestBodyBytes=100000000" # 100MB max request
  • "traefik.http.routers.n8n.middlewares=payload-limit"

# Monitor workflows with large payloads docker exec n8n-n8n-1 n8n execute --help

# Log large executions echo "/10 * docker logs n8n-n8n-1 | grep -i 'payload\|memory' >> /var/log/n8n-payload.log" | crontab -

environment:

  • N8N_PAYLOAD_SIZE_MAX=268435456
  • N8N_DEFAULT_BINARY_DATA_MODE=filesystem # Store files on disk, not in memory
  • N8N_BINARY_DATA_TTL=1440 # Clean up files after 24 hours

# Monitor database size growth du -sh /opt/n8n/data/

# Clean up old executions more aggressively # Add to docker-compose.yml environment: # - EXECUTIONS_DATA_MAX_AGE=168 # 7 days instead of default 14 # - EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000

#!/bin/bash # Create backup script: /opt/backup-n8n-config.sh

BACKUP_DIR="/opt/backups/n8n-configs" mkdir -p $BACKUP_DIR

# Backup all n8n docker-compose files for instance in n8n n8n-team2; do if [ -d "/opt/$instance" ]; then cp "/opt/$instance/docker-compose.yml" "$BACKUP_DIR/${instance}-$(date +%Y%m%d_%H%M).yml" fi done

# Keep only last 10 backups find $BACKUP_DIR -name "*.yml" -mtime +10 -delete

# List available backups ls -la /opt/n8n/docker-compose.yml.backup_*

# Restore specific backup cd /opt/n8n cp docker-compose.yml.backup_20241206_1430 docker-compose.yml docker compose down && docker compose up -d

Server RAM Requirements:

  • 16MB limit (default): 1GB RAM sufficient
  • 64MB limit: 2GB RAM recommended
  • 256MB limit: 4GB RAM recommended
  • 512MB limit: 8GB RAM required

Hetzner Cloud Costs:

  • CX11 (2GB RAM): €4.51/month
  • CX21 (4GB RAM): €8.46/month
  • CX31 (8GB RAM): €16.07/month

パフォーマンスのメリット

より高いペイロード制限により以下が可能に:

  • ファイル処理:ドキュメント、画像、動画の処理
  • データ統合:大規模なAPIレスポンスの処理
  • 一括操作:データセットの効率的な変換
  • デバッグ:複雑なワークフローのノードごとのテスト

まとめ

N8N_PAYLOAD_SIZE_MAXをデフォルトの16MBからサーバーに適した値に増加することで、部分実行では以前不可能だった強力なワークフロー機能が実現されます。設定した256MBの制限は、サーバーの安定性を維持しながら、ほとんどの実際のシナリオに優れたカバレッジを提供します。

この設定の主な利点

  • 生産性:制限なしに複雑なワークフローをノードごとにデバッグ
  • 能力:ファイルと大規模データセットを効率的に処理
  • コスト効率:月額10ユーロ未満でエンタープライズレベルのデータ処理
  • 信頼性:適切なリソース管理を備えた本番テスト済み設定
  • スケーラブル:ワークフローの複雑さの増加に合わせて制限を簡単に調整

この設定は、当社のオリジナルn8nセットアップガイドとWebhookトラブルシューティングガイドに基づいて、エンタープライズグレードのデータ処理ワークフローに対応できる完全な本番対応の自動化プラットフォームを構築します。

大量または専門的なペイロード要件の場合は、特定のユースケースを最適化し、最適なサーバーリソース配分を確保するために自動化の専門家にご相談ください。

tvaについて

tvaは、データベースシステム、クラウド環境、グローバルサプライチェーンの包括的なインフラ管理を担っています。当社の体系的なアプローチは、厳格なセキュリティプロトコルとパフォーマンス最適化を組み合わせ、戦略的アドバイザリーサービスによりデジタル能力と物理的資産の両方の精密な調整を可能にし、すべてのエンゲージメントにおいて最高水準の運営卓越性とコンプライアンスを維持しています。

当社のサービスおよび追加の自動化チュートリアルの詳細については、 tva.sg をご覧ください。

設定作業から運用判断へ

重要なのは、プラットフォームを設定できるかどうかではありません。担当範囲を説明し、ドリフトを検出し、場当たり的な対応なしに復旧し、狙った効果を証明できることが必要です。そのため各変更に、責任者、ベースライン、ロールバック手順、確認期間を結び付けます。単発の修正を、再現可能な運用能力へ変えるためです。 同じ記録が次の担当者に信頼できる出発点を与え、その後の最適化を新たな推測ではなく、計測に基づく判断へ変えます。

関連Insights

関連記事