すべての認証情報が突然復号できなくなる
データボリュームが再作成され、n8n は新しい暗号化キーを生成しました。古い認証情報を復旧する手段はありません。N8N_ENCRYPTION_KEY は必ず明示的に設定し、コピーをサーバー外に保管してください。

何もない Nordic VPS から、自分のドメインで TLS 終端された n8n までの6ステップ — Docker Compose、Caddy、PostgreSQL、実際に発火する Webhook。実行数はプランの階層ではなく CPU に制限される、月額 $3.90 のボックスで。Debian 12、n8n 2.x で検証済み。
プロビジョニング
VPS + A レコード
インストール
get.docker.com
Compose
n8n + Caddy + Postgres
初回起動
オーナーアカウント + 2FA
Webhook
WEBHOOK_URL
ハードニング
刈り込み、沈黙、バックアップ
n8n はワークフロー自動化エンジンです。トリガー — Webhook、スケジュール、データベースの新しい行、キュー内のメッセージ — を、API を呼び出し、データを変換し、条件で分岐し、任意の JavaScript や Python を実行し、結果を次のノードに渡すノードの連鎖に配線するビジュアルキャンバスです。数百のインテグレーションノードが標準で同梱され、それ以外すべてをカバーする汎用の HTTP Request ノードもあります。1.x 系列以降は AI Agent ノードと LLM ノードも搭載しており、これが2026年に導入する人の多くが、古典的な ETL 配管ではなくエージェントを構築している理由です。
コマンドを1行でも打つ前に重要になるのはライセンスです。n8n は OSI の意味でのオープンソースではなく、その違いは机上の話ではありません。コアは Sustainable Use License の下で配布されています。社内業務目的、および個人利用・非商用利用のために、ソフトウェアを使用・複製・改変・配布する、非独占的かつロイヤリティフリーの世界的な許諾です。これが留保しているのは、n8n やその派生物について他者に課金する権利です — この条項が、有償の「マネージド n8n」製品をその上に構築することを排除しています。別途、名前に .ee. を含む、あるいはパスに .ee を含むファイルはこのライセンスから完全に除外され、有償の n8n Enterprise License が必要です。
率直に言えば、自社の業務、自分が提供するサービスとしてのクライアントの仕事、あるいは自分自身の私生活を自動化するために VPS 上で n8n を動かすことは、無償許諾の範囲内であり、これまでもずっとそうでした。n8n をホスティング製品として販売することはその範囲外です。インターネット上の「n8n は本当に無料か?」という議論のほとんどは、この線を挟んで互いにすれ違っている二人の会話です。
コスト面。 n8n Cloud は実行数に応じた課金です。Starter プランは年払いで月額€20、2,500回の実行まで。Pro は月額€50で10,000回まで。Business は月額€667で40,000回まで。セルフホストでは、実行数はそもそも課金項目ではなく、ボックスがどれだけの CPU とメモリを持つかで制限されるだけです。5分ごとに API をポーリングするワークフローは、それだけで月に8,640回の実行を消費します。Cloud ではこの1つのワークフローだけで既に Pro 階層を強いられますが、$3.90 の VPS ではアイドル CPU に対する誤差の範囲です。
| オプション | 月額 | 含まれる実行数 | 誰が運営しているか |
|---|---|---|---|
| n8n Cloud · Starter | €20 | 2 500 | n8n GmbH |
| n8n Cloud · Pro | €50 | 10 000 | n8n GmbH |
| n8n Cloud · Business | €667 | 40 000 | n8n GmbH |
| セルフホスト · Sentinel VPS | $3.90 | CPU 律速であり、従量制ではない | あなた |
クラウド料金は2026年8月時点で n8n.io に公開されている年払いの金額です。月払いはさらに高くなります。トレードオフは金銭面だけではありません — セルフホストでは、アップグレード、バックアップ、TLS の更新、稼働率の責任が自分の側に移ります。
n8n 自身の Docker Compose ドキュメントは、最小要件を2 vCPU、4 GB の RAM としています。これはマーケティング上の数字ではありません。これを下回ると、エディタのフロントエンドとそこそこ分岐したワークフローがメモリを奪い合い、最初の大きな JSON ペイロードがコンテナをメモリ不足で強制終了させます。
Sentinel · 2 vCPU、4 GB、120 GB NVMe、$3.90/月。 正しいデフォルト。n8n、PostgreSQL、Caddy を一緒に動かし、1日数百回の実行を行う個人または小規模チーム向けインスタンスに余裕を持たせます。アイドル時のメモリは3つのコンテナ合計で約700 MBです。
Garrison · 4 vCPU、8 GB、240 GB NVMe、$7.90/月。 Redis と1〜2個のワーカーコンテナを伴うキューモードを追加するとき、ワークフローが日常的に数メガバイトのペイロードをメモリ上に保持するとき、あるいは複数の並列ブランチにファンアウトする AI エージェント型ワークフローに余裕を持たせたいときの、一段上の選択肢です。
Ravelin · 8 vCPU、16 GB、480 GB NVMe、$16.90/月。 1日に数千回の実行があり、PDF 生成、画像処理、音声書き起こしなどバイナリ中心の作業を行うチーム向けインスタンス。こうしたワークロードは API 律速ではなく CPU 律速であるため、専有コアが重要になります。
ディスクは人が忘れがちな部分です。 n8n はすべての実行のすべてのノードについて、入出力の全体を保存します。1分ごとに動くおしゃべりなワークフローは、週に数百メガバイトを書き込みます。デフォルトでも刈り込みは行われます — EXECUTIONS_DATA_PRUNE は true、EXECUTIONS_DATA_MAX_AGE は336時間(14日)、EXECUTIONS_DATA_PRUNE_MAX_COUNT は10 000 — とはいえ、busy なインスタンスの14日分はそれでも NVMe をかなり消費します。ステップ06でこれらを絞ります。
パネルでは、Order → VPS → Sentinel、イメージは Debian 12 を選びます。アカウント開設にメールアドレスは不要、本人確認書類もどの時点でも求められず、請求は Monero、Bitcoin、Lightning、その他対応する資産で決済されます。拠点は自分自身への遅延ではなく、自動化するサービスへの遅延で選んでください — 自動化サーバーはあなたと話すよりもはるかに多く API と話します。
次に、サーバーに触る前に DNS レコードを作成します。n8n.example.com を VPS の IPv4 に向ける A レコード、IPv6 を使うなら AAAA レコードです。これを先に行う必要があるのは、スタックが起動した瞬間に Caddy が Let's Encrypt に証明書を要求するためで、解決しない名前への証明書リクエストは失敗し、その後バックオフし、サイトになぜアクセスできないのか20分悩む羽目になるからです。
DNS が伝播するまで少し待ち、続行する前に自分のマシンから確認してください:
dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else
公開ポートで何かがリッスンを始める前に、最初の1時間のハードニングチェックリストを実行してください — 鍵認証のみの SSH、22・80・443 以外は許可しないファイアウォール、無人のセキュリティアップデートです。自動化サーバーは認証情報の金庫であり、その1時間をかける価値があります。
SSH で接続し、Compose v2 プラグイン付きの Docker Engine をインストールします:
apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version
この簡易インストールスクリプトは、Docker 自身のリポジトリから Engine、CLI、containerd、Compose プラグインをインストールします。最終行には Docker Compose version v2 以上が表示されるはずです。「docker: 'compose' is not a docker command」と表示された場合は、ディストリビューションの古い docker.io パッケージが入っているので、先にそれを削除してください。
これらすべてをまとめたワンライナーの n8n インストーラーが存在し、実際に動きます。それでもこのガイドでは Compose ファイルを手で書きます。後で変更が必要になるすべて — 暗号化キー、データベース、Webhook の URL、保持ポリシー、ワーカー数 — がそのファイルに存在しており、読めないスタックは、深夜3時に直せないスタックだからです。
まずディレクトリを作成し、2つのシークレットを生成します。今すぐこの順番で生成し、生成しながら .env に貼り付けてください — 特に暗号化キーは、n8n の初回起動より前に存在している必要があります。
mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32 # → N8N_ENCRYPTION_KEY
openssl rand -hex 24 # → POSTGRES_PASSWORD
/opt/n8n/.env
DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm
N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here
このファイルは即座にロックダウンしてください — インスタンスが今後保存するすべての認証情報の鍵を握っています:
chmod 600 /opt/n8n/.env
/opt/n8n/docker-compose.yml
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- DOMAIN=${DOMAIN}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- N8N_HOST=${DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_EDITOR_BASE_URL=https://${DOMAIN}
- WEBHOOK_URL=https://${DOMAIN}/
- N8N_PROXY_HOPS=1
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_VERSION_NOTIFICATIONS_ENABLED=false
- N8N_PERSONALIZATION_ENABLED=false
volumes:
- n8n_data:/home/node/.n8n
volumes:
caddy_data:
caddy_config:
pg_data:
n8n_data:
/opt/n8n/Caddyfile
{$DOMAIN} {
encode zstd gzip
tls {$LETSENCRYPT_EMAIL}
reverse_proxy n8n:5678
}
名前を挙げる価値のある2つの設計上の判断。 第一に、n8n はポートを公開しません。80と443をバインドするのは Caddy だけであり、n8n は Compose ネットワーク内部の5678番でリッスンしていて、ホスト外部からは到達できません。意外なほど多くのセルフホスト n8n インスタンスが、前段に TLS を置かないままポート5678でパブリックインターネットに露出しており、露出したサービスを探す検索エンジンにインデックスされています。第二に、PostgreSQL がワークフローを保持するようになった後も n8n のデータボリュームはマウントされたままです — そのディレクトリには依然としてインスタンス設定、ログファイル、ソースコントロール用のアセットが入っています。
起動する:
cd /opt/n8n
docker compose up -d
docker compose logs -f caddy # watch the certificate being issued
https://n8n.example.com を開きます。最初の画面はオーナーアカウントの設定 — メール、パスワード、名前 — です。設定すべき HTTP Basic 認証の環境変数はもはや存在しません。ユーザー管理は 1.x 系列以降 n8n に組み込まれており、ここで作成するアカウントがインスタンスのオーナーになります。パスワードマネージャーから取得したパスワードを使い、そのまま Settings → Personal → Two-factor authentication に進んでオンにしてください。このログインは、今後ノードに貼り付けるすべての API キーへの正面玄関です。
n8n は保存するすべての認証情報を N8N_ENCRYPTION_KEY で暗号化します。設定しない場合、n8n は初回起動時に1つ生成し、データボリューム内に書き込みます。そのボリュームを再作成すると — docker compose down -v、新しいサーバーへの移行、失敗したリストアなど — 新しいインスタンスは異なるキーを生成し、データベース内のすべての認証情報が復号不能になり、復旧手段はまったくありません。各 API キー、OAuth トークン、パスワードを手作業で再入力することになります。このガイドがそうしているように、キーは明示的に設定し、コピーをサーバー外に保管してください。
そのコピーの正しい置き場所は、自分自身が管理するパスワードマネージャーです — セルフホスト Vaultwarden ガイドで一つを扱っています。意図的な要点は、それが解錠する対象と同じボックス上に置いてはならないということです。
データベースが実際に PostgreSQL であり、SQLite へのフォールバックになっていないことを確認してください — DB_ 系の変数にタイプミスがあると、n8n は黙って SQLite で起動してしまい、3か月後にそれに気づくことになります:
docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
起動してエディタが表示され、手動テストが動く n8n は、まだ機能している n8n とは言えません。静かに壊れているのは受信 Webhook であり、あたかもサードパーティのサービス側に問題があるかのように見える形で壊れます。
WEBHOOK_URL. これがないと、n8n は N8N_HOST と N8N_PORT から Webhook の URL を組み立て、http://localhost:5678/webhook/abc のようなものを渡してきます。これを Stripe や GitHub に貼り付けても、決して到達できません。上記の Compose ファイルは WEBHOOK_URL を公開の HTTPS ルートに設定しており、これがエディタに表示され、かつ外部が実際に呼び出せるものになります。
N8N_EDITOR_BASE_URL. n8n が送信するメール内のリンク — パスワードリセット、ユーザー招待 — に使う公開 URL です。ここが間違っていると招待リンクが localhost を指すことになり、それは連携の不具合ではなく同僚からのサポートチケットを生みます。
N8N_PROXY_HOPS. n8n は X-Forwarded-For からクライアント IP を読み取り、この数値が示すホップ数までしか信頼しません。前段にリバースプロキシが1つ — このスタックでは Caddy — ある場合、値は1です。Caddy の前に Cloudflare を置くと2になります。デフォルトの0のままにしておくと、すべてのリクエストがプロキシ自身から来ているように見えてしまい、レート制限やワークフロー内の IP ベースのロジックが静かに壊れます。
N8N_SECURE_COOKIE. デフォルトは true で、セッションクッキーが HTTPS 経由でしか送信されないことを意味します。これは正しい設定であり、このスタックはそれを満たしています。知っておく価値があるのは、素の http で最初に試したときの典型的な症状を説明するからです。ログインフォームがパスワードを受け付けた後、延々とログインフォームに戻され続けます。修正は TLS であって、このフラグを無効にすることではありません。
きちんとテストしましょう。Webhook ノードを持つワークフローを作成し、ワークフローをアクティブ化し、Production URL をコピーして、サーバーではないマシンから呼び出します:
curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor
誰もが一度はつまずく違いです。Test URL は、エディタを開いて「Listen for test event」を有効にしている間だけリッスンします。Production URL は、ワークフローが Active に切り替えられているときにのみ存在します。エディタでは動くのに本番で404になる Webhook は、ほとんどの場合ワークフローが非アクティブなだけです。
保持期間。 デフォルトでは14日間、または10 000回の実行のいずれか早い方まで、すべてのノードの入出力データを完全に保持します。小さな NVMe に頻繁なスケジュールトリガーがあると、これがディスクを埋め尽くす原因になります。以下を n8n の環境変数ブロックに追加して再起動してください:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none は、高頻度のインスタンスにおいて単独で最大の効果を持ちます。成功した実行のペイロードの書き込みを止めつつ、失敗した実行はデバッグできるようすべて完全に保存し続けます。ワークフローをまだ構築している間は「all」のままにしておき、ワークフローが安定して退屈になったら切り替えてください。
沈黙。 この Compose ファイルは既に診断、バージョン通知、パーソナライズ調査をオフにしています。残る外向きの呼び出しはテンプレートギャラリーで、api.n8n.io から取得します。サードパーティへの呼び出しを完全になくしたいなら N8N_TEMPLATES_ENABLED=false に設定してください。バージョン通知を無効にする場合は、リリースノートを読む月次のリマインダーをカレンダーに入れておいてください — 誰も更新しないセルフホストインスタンスは、バージョンを問い合わせるインスタンスより悪い結末です。
Code ノード。 ファイルに既に含まれている N8N_BLOCK_ENV_ACCESS_IN_NODE=true は、式や Code ノードがプロセスの環境変数を読み取るのを防ぎます — このボックスでは PostgreSQL のパスワードと暗号化キーがそれにあたります。パブリック REST API を使わないなら、N8N_PUBLIC_API_DISABLED=true も追加して、その面も塞いでください。
バックアップ — 三点セットかゼロか。 暗号化キーなしではデータベースのバックアップだけでは無価値であり、キーだけでも何も復元できません。PostgreSQL のダンプ、n8n のデータボリューム、.env をまとめてバックアップし、少なくとも1部はサーバー外に保管してください:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
ボリューム名は Compose のプロジェクト名にボリューム名を加えたものです。ディレクトリ名が n8n でない場合は docker volume ls を実行し、表示された名前を使ってください。この3行を cron ジョブに入れ、アーカイブを別の場所へ送り、一度はリストアをテストしてください — テストされていないバックアップは信念であって、バックアップではありません。
アップデート。 docker compose pull の後に docker compose up -d を実行します。まずスナップショットを取ってください。n8n は起動時にデータベースマイグレーションを実行し、マイグレーションはロールバックできるようには設計されていません。メジャーバージョンをまたぐとき — 例えば 1.x から 2.x への移行 — は、pull した後ではなく前にリリースノートを読み、無人再起動によって不意にアップグレードされないよう :latest の代わりに明示的なイメージタグを固定することも検討してください。
デフォルトでは n8n はレギュラーモードで動作します。エディタを提供し Webhook を受信するのと同じプロセスがワークフローも実行します。これはシンプルで、1つの長時間ワークフローが他を待たせ始めるまでは正しく機能します。症状は明白です — 実行が何分も「running」のまま止まり、エディタが重くなり、本来200ミリ秒で応答するはずの Webhook が8秒かかるようになります。
キューモードは作業を分割します。メインインスタンスがエディタ、トリガー、Webhook エンドポイントを保持し、実行 ID を Redis に投入します。別のワーカープロセスがそれらを取り出し、PostgreSQL からワークフローを読み込んで実行し、Redis 経由で結果を報告します。このアーキテクチャからは3つのルールが導かれ、それを省略した人は全員痛い目に遭います。すべてのインスタンスが同じ PostgreSQL データベースを共有しなければならないこと、すべてのインスタンスが同じ N8N_ENCRYPTION_KEY を持たなければならないこと、そして SQLite はまったくサポートされないことです。
Compose ファイルへの追加分は、Redis サービスと1つのワーカーサービスです。ワーカーサービスは、worker コマンドで実行される同じ n8n イメージです:
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
volumes:
- redis_data:/data
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
command: worker --concurrency=5
depends_on:
- redis
- postgres
environment:
# the SAME encryption key and the SAME database as the main instance
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
メインの n8n サービスにも EXECUTIONS_MODE=queue と QUEUE_BULL_REDIS_HOST=redis を追加してください — 両側でモードを一致させる必要があります。初日から設定しておく価値がある2つのオプションがあります。エディタで「Test workflow」を押してもメインプロセスを占有しないようにする OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true と、再デプロイ時にワーカーが現在のジョブを完了させるまでの許容時間を決める N8N_GRACEFUL_SHUTDOWN_TIMEOUT(デフォルトは30秒)です。ワークフローが日常的に30秒以上かかる場合は値を引き上げてください。さもないと、デプロイのたびに実行中の処理が強制終了されます。
ここから始めないでください。キューモードは2つの可動部分と、レギュラーモードにはそもそも存在しない種類の障害を追加します。キューが伸びているのが見える、あるいは1つのワークフローが他をブロックしているのが見えるまでは、レギュラーモードにとどまり、それから2台目のボックスを追加する前に、まず同じボックスにワーカーを1つ追加してください。この段階的な流れ — レギュラーモードの Sentinel、ワーカー1台の Garrison、3台の Ravelin — で、本当に大規模な展開を除くすべてをカバーできます。
ほとんどのセルフホストガイドは、ホストの選択をパフォーマンスの問題として扱います。自動化エンジンにとってはそうではありません。n8n インスタンスは、自分でセルフホストする他のほぼどんなものも同時には持たない2つのものを保持しています。自動化するすべてのサービスの API キー、OAuth トークン、メールパスワードを収めた単一の暗号化テーブルと — そのすぐ隣に — 組織の実際の動き方を正確に描いたグラフです。どの CRM か。どの銀行フィードか。どのサプライヤーか。どの顧客に、どのトリガーで、どのメールが送られるか。ある企業のワークフロー一覧を読めば、その企業を読んだことになります。
第一層 — ホストがあなたを誰だと思っているか。 ここでのアプリケーション層は本当に良くできています。認証情報は保存時に暗号化され、エディタは TLS と 2FA の背後にあります。漏れるのはその下の層です。ホスティングプランはあなたの法人格、請求先住所、カード情報を知っています。ハイパースケーラーも同じものを知っており、それを何年も保持します。これは仮定上の露出ではありません。「暗号化された金庫が存在する」ことと「それがこの名前の企業に属する」ことを結びつける結合キーそのものです。メールも本人確認書類もなく、Monero で決済されるサインアップは、金庫ではなくこの結合キーを取り除きます。
第二層 — ディスク。 保存時の暗号化は、キーを持たない相手に対してしか効きません。デフォルトのインストールでは、キーはデータベースと同じファイルシステム上に置かれています。.env はモード600に保ち、キーのコピーはマシンの外にも保管し、法域がデータセンターを送達に都合の良い場所にしないプロバイダーを選んでください — それが北欧法域ガイドの主張のすべてです。
第三層 — 出口 IP。 すべての HTTP Request ノードは VPS のアドレスから発信され、そのアドレスには評判が付いて回ります。ハイパースケーラーの IP レンジはインターネット上で最も激しくレート制限され CAPTCHA で塞がれます。スクレイパーが住み着いているのがそこだからです。スクレイピングやポーリングを行うワークフローは、静かな北欧のレンジで失敗するよりずっと早く、AWS や DigitalOcean の IP で失敗し始めます。n8n は標準の HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXY 変数も尊重するため、異なる出口が必要な一握りのワークフローだけをローカルの SOCKS プロキシや Tor 経由にルーティングし、それ以外は直接通信させることができます。
2.x 系列で新たに加わったもう一つの扉があります。n8n はインスタンスレベルの MCP サーバーを公開でき、AI エージェントがあなたのワークフローをツールとして呼び出せるようになります。これは本当に便利ですが、同時に自動化層への公開エンドポイントでもあり、他のものと同じ扱いに値します — TLS、OAuth、公開範囲の考え方についてはリモート MCP サーバーガイドを参照してください。
データボリュームが再作成され、n8n は新しい暗号化キーを生成しました。古い認証情報を復旧する手段はありません。N8N_ENCRYPTION_KEY は必ず明示的に設定し、コピーをサーバー外に保管してください。
WEBHOOK_URL が未設定のため、n8n は N8N_HOST から URL を組み立てます。WEBHOOK_URL と N8N_EDITOR_BASE_URL を公開の HTTPS アドレスに設定し、コンテナを再起動してください。
素の http でエディタにアクセスしていて、セキュアなセッションクッキーが拒否されています。公開インスタンスで N8N_SECURE_COOKIE を false に設定するのではなく、TLS のセットアップを完了させてください。
1分ごとのトリガーからの完全な実行データが14日分。EXECUTIONS_DATA_MAX_AGE と PRUNE_MAX_COUNT を絞り、成功した実行の保存を止めましょう。
:latest タグと、ロールバックしないデータベースマイグレーションの組み合わせです。明示的なタグを固定し、pull のたびにスナップショットを取り、メジャーバージョンをまたぐ際はリリースノートを読んでください。
GENERIC_TIMEZONE のデフォルトは America/New_York で、これを望む人はほとんどいません。GENERIC_TIMEZONE と TZ を実際のタイムゾーンに同じ値で設定し、再起動してください。
n8n インスタンスを自分のサーバーに移す前後と最中に生じる10の質問。
自分自身の自動化のためなら、はい。n8n はSustainable Use Licenseの下で配布されています。社内業務目的、および個人利用・非商用利用のために、無償で使用・複製・改変・配布できます。このライセンスが禁じているのは、n8n やその派生物について他者に課金することです — 実際には「n8n ホスティング」を製品として転売する行為です。ファイル名に .ee.、あるいはディレクトリパスに .ee を含むファイルはこのライセンスの対象外であり、有償の n8n Enterprise License が必要です。つまり、自分が借りた VPS 上で自社の業務を自動化することは無償許諾の範囲内に完全に収まりますが、その上にホスト型 n8n ビジネスを構築することは範囲外です。
n8n 自身の Docker Compose ドキュメントは、最小要件を2 vCPU、4 GB の RAM としています。これはちょうど Sentinel 階層($3.90/月 — 2 vCPU、4 GB、120 GB NVMe)に相当し、個人または小規模チームのインスタンス向けに n8n と PostgreSQL と Caddy を余裕を持って動かせます。キューモードのワーカーを追加するとき、あるいは大きなペイロードをメモリに保持するワークフローを動かすときは Garrison(4 vCPU、8 GB、$7.90/月)に、PDF・画像・音声などのバイナリデータを扱い1日に数千回の実行を行うチーム向けインスタンスには Ravelin(8 vCPU、16 GB、$16.90/月)に上げてください。
SQLite はデフォルトであり、一握りのワークフローを扱う一人にとっては本当に問題ありません。同時実行が発生するとき、実行履歴が数十万行を超えて増えるとき、あるいはスケールする予定があるときは PostgreSQL に切り替えてください — なお、キューモードは SQLite を一切サポートしません。後から移行するということは、ワークフローと認証情報をエクスポートし、新しいインスタンスに再インポートすることを意味し、楽しめない午後になるでしょう。成長の可能性が少しでもあるなら PostgreSQL から始めてください。このガイドの Compose ファイルは既にそうしています。
データベース内のすべての認証情報が恒久的に読み取れなくなります。n8n は保存された認証情報 — OAuth トークン、API キー、SMTP パスワード — をそのキーで暗号化しており、復旧の仕組みも、それらを取り戻せるサポートチケットも存在しません。各認証情報を手作業で再入力することになります。これはセルフホストの n8n インスタンスが破壊される最も一般的な原因です。誰かが Docker ボリュームを再作成すると、n8n は新しいキーを生成し、すべてのワークフローが一斉に復号エラーで失敗し始めます。初回起動の前に .env でキーを明示的に設定し、コピーをサーバー以外のどこかに保管してください。
頻度順に4つの原因があります。(1) WEBHOOK_URL が未設定のため、エディタは外部サービスが到達できない http://localhost:5678/webhook/… という URL を渡してしまいます — 公開の HTTPS URL に設定してください。(2) ワークフローがアクティブ化されていない。テスト用 URL はエディタを開いている間だけリッスンし、本番用 URL はワークフローがアクティブになって初めて存在します。(3) DNS またはファイアウォール。レコードが解決しない、あるいはポート80/443が閉じている。(4) 追加のプロキシ層の背後にあり N8N_PROXY_HOPS を設定していないため、n8n が誤ったクライアント IP を読み取っている。サーバーではないマシンから素の curl でテストしてください。
はい、それがむしろ通常のパターンです — 前段に Caddy を1つ、Compose ネットワークを1つ、n8n を1つのホスト名に、Vaultwarden、Nextcloud、SearXNG を別のホスト名に置きます。2つの注意点があります。メモリ。n8n と PostgreSQL のアイドル時は約700 MBで、重いワークフローはそれを大きく超えてスパイクすることがあるので余裕を残してください。被害範囲。n8n のデータベースはボックス上で最も認証情報が密集したものなので、同じホストを共有する他のものはすべてそのリスクプロファイルを引き継ぎます。月額 $3.90 の階層では、自動化エンジンに専用サーバーを与えるのが妥当です。
デフォルトでは3つのエンドポイントがあります。匿名の製品テレメトリ(N8N_DIAGNOSTICS_ENABLED、デフォルト true)、api.n8n.io に対する新バージョン・セキュリティアップデートの確認(N8N_VERSION_NOTIFICATIONS_ENABLED、デフォルト true)、そして https://api.n8n.io から取得するワークフローテンプレートブラウザ(N8N_TEMPLATES_ENABLED、デフォルト true)です。いずれも認証情報やワークフローデータを送信しませんが、3つとも自分の IP にインスタンスが存在することを知らせます。ボックスを静かにしたいなら3つとも false に設定してください — テンプレートギャラリーとアップデートバナーは失われるので、リリースは自分で追いかける必要があります。
n8n Cloud Starter は年払いで月額€20、2,500回の実行まで。Pro は月額€50で10,000回まで。Sentinel VPS は月額$3.90で、実行数は CPU と RAM だけで制限され、典型的な Webhook・API 系のワークフローなら数万回に相当します。金銭的な損益分岐点は即座に訪れます。本当のコストは運用面です。セルフホストとは、アップグレード、バックアップ、TLS の更新、深夜3時のディスク満杯インシデントを自分で引き受けることを意味します。正直なルールはこうです。セキュリティリリースから1か月以内に自分でインスタンスをアップグレードしないタイプなら、Cloud にお金を払ってください。月次の docker compose pull が既に生活の一部になっているなら、セルフホストしてください。
n8n インスタンスが保持しているものそのものが理由です。認証情報テーブルは、自動化するすべてのサービスの API キー、OAuth トークン、メールパスワードを収めた単一の暗号化ストアであり、その隣にあるワークフローグラフは、どの CRM、どの銀行フィード、どのサプライヤー、どの顧客かという、事業の実際の運用方法を読み取れる地図です。静的なウェブサイトはそのどちらも漏らしません。アプリケーション層はそれをよく保護しますが、漏れるのはメタデータ層です。マシンのサインアップにパスポートのスキャンとカードが伴うなら、金庫は暗号化した一方で、扉に自分の名前を書いたことになります。Monero で支払う no-KYC ホストは、この二つの層を揃えたままにします。
一般的な形 — AI Agent ノードがリモートのモデル API を呼び出す形 — であれば、はい。このワークロードは I/O 律速で、プロバイダーの応答を待つだけなので、Sentinel で十分対応できます。合わないのはモデル自体を動かすことです。7B のローカルモデルは約8 GB の RAM を必要とし、実用的な推論速度には GPU が要り、これらの階層にはそれがありません。n8n はリモートの OpenAI 互換エンドポイントに向け、VPS 自体は軽く保ってください。AI エージェントを24時間365日動かす姉妹ガイドでは、再起動ポリシー、シークレット、支出上限、クラッシュループの罠といったランタイム側を扱っています。
Sentinel(2 vCPU、4 GB、120 GB NVMe、$3.90/月)は n8n の最小要件を満たしつつ、同じボックスで PostgreSQL と Caddy を動かす余裕もあります。サインアップにメール不要、本人確認書類不要、実行数無制限。
最終レビュー · 2026-08-24 · 出典 · n8n ホスティングドキュメント、n8n LICENSE.md(Sustainable Use License)、n8n.io の料金ページ、Docker と Caddy の公式ドキュメント · 頻度 · 年次
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.
Three independent layers — signup, payment, network — explained, legal context included, common mistakes flagged.
Deploy your own MCP server on a no-KYC VPS — TLS, streamable HTTP, OAuth.
Host an MCP server with no ID — the privacy stack, crypto-paid.
エージェントをノートPCから移す — サイズ選び、systemd、シークレット、支出の上限。
GPU なし CPU で Ollama——4/8/16/32 GB に収まるのはどのモデルか。