3行でいうと
- n8nは、認証情報を暗号化して保存する。その鍵を控えないと、バックアップから戻しても認証情報が読めない。
- Webhookは、リバースプロキシの内側では、n8nなら環境変数N8N_WEBHOOK_URLを、DifyならTRIGGER_URLを設定する。
- n8nはSustainable Use License、Difyは条件つきのApache 2.0。社外の人に使わせる形は、条件に触れることがある。
この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書を読んでまとめたものです。数字は2026年10月8日に確認し、版番号と初期値は10月22日に公式ページで読み直しました(SSLの手順とn8nのLICENSE.md原文は10月8日の確認のままです)。ソフトの版や設定名は変わります。
先に結論
- どちらもDocker Composeで動かす手順が公式に用意されています。どちらも、試すだけならSQLite(n8n)や同梱のPostgreSQL(Dify)の初期設定で動きます。
- 本番に近づけるときに要るのは、4点です。(1)暗号鍵や秘密の値を初期値のままにしない、(2)外から届く入口(Webhook)のURLを設定する、(3)保存先のフォルダとデータベースをまとめてバックアップする、(4)ライセンスの条件を読む。
- n8nの公式文書は、自前の運用について「間違えるとデータの消失、セキュリティ問題、停止につながる。サーバーに慣れていなければn8n Cloud(提供元が運用するサービス)を勧める」と書いています。
前提:言葉の整理
- セルフホストは、自分が管理するサーバーで道具を動かすことです。更新、バックアップ、安全対策は自分の仕事になります。
- Docker Composeは、複数の部品(コンテナ)をまとめて起動する仕組みです。
- Webhookは、外のサービスが「出来事が起きた」と、決まったURLへ通知を送る仕組みです。
- リバースプロキシは、外からのアクセスを受け止めて内側のソフトへ渡す中継役です。HTTPS(暗号化通信)の窓口にもなります。
- n8nは、ノード(処理の部品)をつないで作業を自動化する道具です。Difyは、AIのワークフロー、チャット、検索つきの知識ベース(RAG)などを画面で組み立てる道具です。
n8nを動かす
最小の起動
公式のDockerの手順は、n8n_dataというボリューム(コンテナの外に残す保存場所)を作り、/home/node/.n8nに割り当てて、ポート5678で公開する形です。公式文書では「安定版(stable)は本番用、beta(最新)は不安定な場合がある」とされ、10月22日に読んだときの安定版は2.44.5、betaは2.45.1でした(10月8日には2.42.4と2.43.1)。ただし、このDockerの手順のページには「内容が古い」との表示があり、Docker Composeの手順のページへ案内されています。新しい小版は、ほぼ毎週出ると書かれています。
既定の保存先はSQLite(1つのファイルで済む軽いデータベース)です。Docker Composeの手順書は、利用者が数人を超える本番や、ワークフローを常時稼働させる本番にはPostgreSQLを勧め、SQLiteは試験用としています。
公式文書の起動コマンドの例
公式文書の例です。この記事では、実行していません。<YOUR_TIMEZONE>は自分のタイムゾーンに置き換える部分です。
docker volume create n8n_data
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE="<YOUR_TIMEZONE>" \
-e TZ="<YOUR_TIMEZONE>" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-v n8n_data:/home/node/.n8n \
n8nio/n8n
公式文書によると、N8N_RUNNERS_ENABLEDはn8n 2.0から非推奨で、設定は不要です(1.xではtrueが必要)。10月8日に読んだ例にはこの行がありましたが、10月22日の例からは外れていました。
Docker Composeの手順書は、AI機能(n8n Assistant)の実行環境も含む構成で、2 vCPU・4GB以上のメモリを必要とし、同梱の実行環境は開発・試験用で、本番には別の実行環境(Daytona)を勧めると書いています。さらに、Composeの手順にはPostgreSQLを足す例があります。そこには、PostgreSQL 18ではPGDATAの指定を消すとデータが空で始まる、という注意が書かれています。また、SQLiteのデータはPostgreSQLへ自動では移りません。
暗号鍵は、必ず控える
n8nは、認証情報(外のサービスのパスワードやAPIキー)を暗号化してデータベースに保存します。公式文書によると、鍵は初回の起動で自動生成され、~/.n8nフォルダの設定ファイルに保存されます。環境変数N8N_ENCRYPTION_KEYで自分の値を指定することもできます。キューモード(複数の処理役で分担する構成)では、すべての処理役に同じ鍵を渡す必要があります。
バックアップの文書は、鍵がないと、戻したデータベースも、暗号化した認証情報の書き出しも、復号できないと明記しています。
Webhookの公開URL
n8nは、Webhook用のURLを、プロトコル・ホスト・ポートの設定から組み立てます。リバースプロキシの内側では、内部のポート5678と、外のポート443が食い違い、この組み立てが合いません。公式文書の対策は3点です。
N8N_WEBHOOK_URLに、外から見えるURLを書く(例:https://n8n.example.com/)。旧名のWEBHOOK_URLは、n8n 2.35.0から非推奨と書かれています。N8N_PROXY_HOPSを1にする。- 最後の中継役で、
X-Forwarded-For、X-Forwarded-Host、X-Forwarded-Protoのヘッダーを渡す。
Webhookノードには「テスト用」と「本番用」の2つのURLがあります。本番用は、ワークフローを公開したときに登録されます。受け付けの認証は、Basic認証、ヘッダー認証、JWT認証、なしから選べ、IPアドレスの許可リストも設定できます。受け取れるデータの最大は16MBで、N8N_PAYLOAD_SIZE_MAXで変えられると書かれています。HTTPSは、公式文書が、リバースプロキシで終わらせる方法を勧めています。
バックアップの範囲
公式の「Back up and restore」には、完全なバックアップは次の2つだと書かれています。
.n8nフォルダ(設定ファイルと暗号鍵。SQLiteなら、データベース本体も)。- PostgreSQLを使うなら、そのデータベース。外部保管(S3など)やカスタムノードの置き場も含める。
SQLiteは、n8nを止めてからコピーする、と書かれています。CLIの書き出し(n8n export:workflow --backupなど)は便利ですが、ユーザーと役割、実行履歴、変数、暗号鍵を含みません。つまり、ワークフローの引っ越しには足りても、サーバー丸ごとの復旧には足りません。--decryptedで書き出した認証情報は平文になるため、戻したら消すよう警告されています。
Difyを動かす
最小の起動
公式文書の手順は、リリースのタグを指定してgit cloneし、dify/dockerで.env.exampleを.envにコピーして、docker compose up -dを実行する流れです。必要な条件はCPU 2コア以上、メモリ4GiB以上、Docker Compose 2.24.0以上と書かれています。起動するのは、中核のサービス7つ、周辺部品8つ(PostgreSQL、Redis、Weaviate、nginx、サンドボックスなど)、一度だけ動く初期化1つです。管理者の登録は、/installのページで行います。
秘密の値を初期値のままにしない
Difyの環境変数の文書には、置き換えを求める記述が複数あります。
SECRET_KEY:セッション、トークン、ファイルURLの署名、外部サービスの認証情報の暗号化に使う。本番では必ず置き換え、openssl rand -base64 42で作る例が書かれています。運用開始後に変えると、全員がログアウトされ、OAuth連携の暗号化済みの認証情報が復元できなくなる、と警告されています。INNER_API_KEY_FOR_PLUGIN:10月8日に読んだときは「初期値が公開されているので置き換える」という趣旨の記述を読みましたが、10月22日に読んだ環境変数のページでは、この変数への言及はエージェント用の設定の行(DIFY_AGENT_INNER_API_KEYと一致させる)だけで、初期値や置き換えの指示は読んだ範囲では見つかりませんでした。置き換えるべきかは、使う版の.env.exampleと公式の案内で確かめてください。DIFY_AGENT_SERVER_SECRET_KEYとDIFY_AGENT_API_TOKEN:初期値は公開されている開発用の値で、本番の前に自分で作った値に置き換える、と書かれています。知られていると、トークンの偽造や実行の開始ができてしまうためです。- データベースとRedisのパスワードの初期値は、公式の表で
difyai123456、コード実行のAPIキー(CODE_EXECUTION_API_KEY、サンドボックス側のSANDBOX_API_KEYと一致させる)の初期値はdify-sandboxです。 INIT_PASSWORD:設定すると、管理者登録のページがこのパスワードを要求する。サーバーが公開されているときに、第三者に先に登録されるのを防ぐ。
Webhookの公開URL
Difyでは、Webhookトリガー(ワークフローの開始点)の呼び出し先を、環境変数TRIGGER_URLで決めます。初期値はhttp://localhostで、外のサービスが届く公開のドメインかIPアドレスにする必要がある、と書かれています。Webhookの認証設定は、読んだページでは確認できていません。ヘッダーの認証トークンを受け取る例の記述はありましたが、検証の仕組みの説明は見つかりませんでした。
バックアップと更新
公式のトラブルシューティングの文書は、Docker Composeならdify/docker/volumesフォルダ全体を控えるよう書いています。更新の前に、difyフォルダ全体のコピーを取る例もあります。イメージで動かしている場合の更新は、docker compose pullのあとdocker compose up -d、ソースから動かしている場合はgit pullのあとflask db upgradeが必要、と書かれています。更新後に新しい.env.exampleと自分の.envを見比べる、docker-compose.yamlを直していたなら新しい版のファイルへ変更を載せ直す(版によって必要なサービスが増えることがあるため)、という手順は、このページではなく、クイックスタートの文書(Deploy Dify with Docker Compose)に書かれています。更新の手順は版ごとに違うので、更新の前に、リリースの案内で変更点を確かめてください。
ライセンス:社外の人に使わせる形は、読んでから
ここは条文と公式FAQの紹介です。個別の判断は専門家に相談してください。
| n8n | Dify | |
|---|---|---|
| ライセンス | Sustainable Use License(fair-codeという考え方)。.ee.を含むファイルは別の有償ライセンス |
Apache 2.0を修正したもの(追加条件つき) |
| 自社の業務で使う | 可 | 可(商用も可) |
| 注意が要る形 | 外部の利用者に、ワークフローを作らせる・設定させる形、n8nをサービスとして貸す形、ブランドを消して再販する形は不可と、公式FAQが列挙 | 複数テナント(1つのワークスペースが1テナント)の運用は、書面の許可がない限り不可。フロントエンドのロゴと著作権表示を消したり変えたりするのは不可(フロントエンドを使わない利用には適用されない) |
n8nのFAQには、依頼主にこちらで作った自動化を使わせる形(依頼主が作成・編集できない場合)、自社製品の裏側で動かす形は、許される例として書かれています。画面上の見え方ではなく、誰がワークフローの中身を決めるかが基準、という説明があります。
選び方の目安
見立てです。ここまでの公式文書から、僕らは次のように整理しました。
- 社内の自動化が中心で、既存のSaaSをつなぐ作業が多いなら、n8nが向いている可能性があります。
- AIの質問応答や、文書を検索して答える仕組みを、画面で素早く組みたいなら、Difyが向いている可能性があります。
- 自前の運用に自信がないなら、公式が勧めるクラウド版も選択肢です。
- どちらも、最初は1台のサーバーに閉じて、外へはWebhookだけを出す形が、管理しやすいと僕らは考えます。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。内容は公式文書とライセンスの原文に基づきます。
- n8nの版(10月22日時点でstable 2.44.5、beta 2.45.1)は、公式のDocker手順のページに書かれた数字を1回読んだものです。このページには「内容が古い」との表示があり、別ページ(Docker Compose)には版番号がなく「最新の安定版を指定する」とだけありました。10月8日の数字(2.42.4と2.43.1)から2週間で進んでいます。GitHubのリリース一覧は、確認できていません。
- Difyの最新の版番号は確認できていません。更新の手順は版ごとにリリースの案内を見るよう、公式が書いています。
- Difyの公式文書の初期値(パスワードなど)は10月22日に読んだ時点のもので、版によって変わります。
- Difyで、Webhookの受け付け認証がどうなっているかは、確認できていません。
- ライセンスの文書は、会社側の説明で、法的な保証ではありません。商用の提供形態は、提供元に問い合わせるよう公式も書いています。
- n8n・Difyのクラウド版の料金は読んでいません。
出典
- Docker installation(n8n Docs、n8n、2026年10月22日確認)
- Install using Docker Compose(n8n Docs、n8n、2026年10月22日確認)
- Back up and restore(n8n Docs、n8n、2026年10月22日確認)
- Set a custom encryption key(n8n Docs、n8n、2026年10月22日確認)
- Configure webhook URLs with reverse proxy(n8n Docs、n8n、2026年10月22日確認)
- Webhook node(n8n Docs、n8n、2026年10月22日確認)
- Set up SSL(n8n Docs、n8n、2026年10月8日確認)
- Community license(n8n Docs、n8n、2026年10月22日確認)
- License FAQ(n8n Docs、n8n、2026年10月22日確認)
- LICENSE.md(GitHub、n8n、2026年10月8日確認)
- Deploy Dify with Docker Compose(Dify Docs、LangGenius、2026年10月22日確認)
- Environment Variables(Dify Docs、LangGenius、2026年10月22日確認)
- Storage & Migration(Dify Docs、LangGenius、2026年10月22日確認)
- Webhook Trigger(Dify Docs、LangGenius、2026年10月22日確認)
- LICENSE(GitHub、LangGenius、2026年10月22日確認)
更新履歴
-
2026年10月25日 書き方を直しました。
- 前:運営者が使っていないと読める書き方 → いま:「この記事は、実際に使って確かめた記録ではありません」。公式の資料を読んでまとめた記事で、使い心地は書いていない、という意味に直した
-
2026年10月22日 公式の資料を読み直して、次の点を直しました。
- 前:n8nの安定版は2.42.4、betaは2.43.1 → いま:安定版は2.44.5、betaは2.45.1。Dockerの手順のページには「内容が古い」との表示がある
- 前:Difyの
INNER_API_KEY_FOR_PLUGINは、初期値が公開されているので置き換える → いま:10月22日の環境変数のページでは初期値や置き換えの指示が見つからず、使う版の.env.exampleで確かめるよう書いた - 前:Difyの初期値の注意は
INNER_API_KEY_FOR_PLUGINなど → いま:DIFY_AGENT_SERVER_SECRET_KEYとDIFY_AGENT_API_TOKENの初期値も公開されているので、本番の前に置き換えると書いた - 前:Difyの更新後に
.env.exampleと見比べる手順は、トラブルシューティングの文書にある → いま:その手順はクイックスタートの文書にあり、トラブルシューティングにはdocker compose pullなどの更新コマンドが書かれている - 前:n8nのDockerの例に
N8N_RUNNERS_ENABLED=trueの行がある → いま:10月22日の例ではその行が外れている
