【脱Zapier】n8nを格安VPSにDocker構築する完全手順!タスク無制限のAPI自動化基盤を作る

異なるWebサービスやAPIをノーコード・ローコードで繋ぎ、業務やメディア運営を自動化するiPaaS(統合プラットフォーム)として「Zapier(ザピアー)」や「Make(旧Integromat)」は非常に有名です。
しかし、これらのクラウドサービスを実務で本格的に使い始めると、誰もがすぐに「無料枠の狭さ」と「従量課金の高さ」という2つの壁にぶつかります。
- Zapierの無料枠は月100タスクまでしか動かず、しかも「3ステップ以上の連携」や「Webhook受信」が有料プラン限定になっている
- RSSの自動取得、SNSへの自動投稿、スプレッドシート連携などを複数回すと、あっという間に月数千タスクに達して処理が止まる
- タスク上限を気にせず使える上位プランに契約しようとすると、月額数千円〜数万円の固定費が毎月発生してしまう
この「自動化したいのにタスク消費が怖くて動かせない」というジレンマを根本から解決する切り札が、オープンソース(Fair-code)のワークフロー自動化ツール「n8n(エヌエイトエヌ)」を、月額数百円〜千円前後の格安Linux VPSにDockerでセルフホスト(自前構築)することです。
本記事では、n8nをクラウド版ではなくVPS上にセルフホストするメリットから、失敗しないVPSスペックの選び方、Docker Composeを使った立ち上げ手順、そして外部Webhookを受信するためのSSL(HTTPS)化・アップデート運用までを、コピペで再現できるコマンド付きで徹底解説します。
Zapierの課金上限にサヨナラ!n8nを「VPSでセルフホスト」する3大メリット
n8nには公式がホストするクラウド版(n8n Cloud)もありますが、Dockerを使って自分のVPSに「n8n Community Edition(セルフホスト版)」をインストールすることで、クラウド型iPaaSの制約から完全に解放されます。
1. タスク実行数・ワークフロー数が完全無制限(大幅なコスト削減)
ZapierやMakeでは「1回のデータ処理(1タスク/1オペレーション)」ごとにクレジットが消費されるため、ループ処理や高頻度の定期チェック(ポーリング)を組むと一気に課金が跳ね上がります。
一方、自前のVPSに構築したn8nでは、作成できるワークフロー数も、月間のタスク実行回数も、1つのフロー内に並べるノード(ステップ)数もすべて無制限です。
| 比較項目 | Zapier(無料 / 有料Pro) | Make(無料 / Core) | n8n(VPSセルフホスト版) |
|---|---|---|---|
| 月額コスト目安 | 無料 / 月29.99ドル〜(約4,500円〜) | 無料 / 月10.59ドル〜(約1,600円〜) | VPS代のみ(月600円〜1,500円前後) |
| 月間タスク・実行上限 | 無料100回 / 有料750回〜 | 無料1,000回 / 有料10,000回〜 | 完全無制限(何万回でも追加課金0円) |
| Webhookの送受信 | 有料プラン限定機能 | 標準対応(オペレーション消費あり) | 標準で無制限に利用可能 |
| コード処理(JS / Python) | 簡易スクリプトのみ | 制限あり | Codeノードで自由自在に記述可能 |
たとえ月間に5万回データ処理や条件分岐を回したとしても、支払う費用は定額のVPSレンタル代(月額数百円〜千円台)だけです。
2. 社内データや機密APIキーを第三者SaaSに預けず自前完結
外部のクラウド連携サービスを使う場合、OpenAIやmicroCMS、Google Workspace、顧客データベースなどの重要なAPIキー(認証情報)や送受信データをすべて海外SaaSのサーバーへ預けることになります。
VPSでセルフホストしたn8nであれば、登録した認証情報(Credentials)も実行ログもすべて自分が契約したVPSのストレージ内に暗号化されて保存されます。外部にデータを持ち出したくない個人開発や社内業務の自動化において、大きなセキュリティ上のアドバンテージとなります。
3. 実行時間の縛りがなく、複雑なデータ整形やAI連携も自由自在
Google Apps Script(GAS)の「6分制限」や、クラウドiPaaSの「1ステップあたり30秒タイムアウト」のように、無料・安価なクラウド環境には厳しい実行時間制限が設けられています。
自前VPS上のn8nなら、タイムアウト時間を自分で自由に調整できるため、数千件のデータを順番に処理するループ(Split In Batches)や、応答に時間がかかる生成AI(LLM)エージェントの連続呼び出しも途中で強制終了されることなく完走できます。
💡 あわせて読みたい(GASの制限突破とVPS活用術):
・【脱・6分制限】GASの「実行時間エラー」を根本解決!重い定期処理をVPS×Pythonへ逃がすハイブリッド自動化術
n8nセルフホストに必要なVPSスペックと環境選び
「自前サーバーに自動化ツールを構築する」と聞くと、高価でハイスペックなサーバーが必要に思えるかもしれませんが、n8nは非常に軽量に設計されています。
Difyより圧倒的に軽量!メモリ1GB〜2GBでサクサク動く省リソース設計
同じオープンソースのAIワークフロー基盤である「Dify」をセルフホストする場合は、約10個のコンテナを同時起動するため最低でもメモリ2GB〜4GBが必須でした。しかし、n8nはNode.jsベースで単一コンテナ(+必要に応じてDBコンテナ)で動くため、驚くほどメモリ消費が少ないのが特徴です。
| VPSメモリプラン | n8nの稼働判定 | おすすめの用途・構成目安 |
|---|---|---|
| メモリ 1GB(2Core) | ○ 稼働可能(単体運用) | n8n単体であればアイドル時のメモリ消費は200MB〜400MB程度のため、月額ワンコイン前後の1GBプラン(+Swap設定)でも十分に実用稼働します。 |
| メモリ 2GB(2〜3Core) | ◎ 推奨・快適稼働 | 大量のJSONデータ処理や、PostgreSQLコンテナとの併用、Pythonスクレイピングの同居まで余裕を持って安定稼働できるベストバランス構成です。 |
| メモリ 4GB(4Core〜) | ◎ Dify同居・大規模向け | 1台のVPSの中に「n8n」と「Dify」の両方を同居させて連携ハブにする場合は、4GBプランを選ぶのが最もコスパに優れています。 |
個人メディアの自動投稿や日常のAPI連携だけであれば「メモリ1GB〜2GBプラン」で十分お釣りがきます。すでにDifyやPython自動化のために2GB〜4GBのVPSを借りている方なら、追加でサーバーを借りることなく同じVPS内にn8nを相乗りさせることも可能です。
外部Webhookを受け取るための「固定グローバルIP」と「独自ドメイン」
自分のパソコン(ローカル環境)のDockerではなく、VPSにn8nを立てる最大の理由は「固定のグローバルIPアドレス(および独自ドメインのURL)を持てること」にあります。
microCMSの記事公開通知、GitHubのPush通知、LINE BotやSlackのイベント通知、Stripeの決済通知など、外部サービスからリアルタイムに処理を起動する「Webhook(ウェブフック)」を受け取るには、インターネット上から24時間いつでもアクセスできるHTTPSの受け皿(エンドポイント)が必要だからです。
n8nの運用におすすめのコスパに優れた国内VPS
n8nを24時間安定して動かし続けるには、ネットワーク回線が安定しており、後から管理画面でメモリプランを柔軟にスケールアップできる国内大手のVPSを選ぶのが最も確実です。
🚀 【徹底比較】n8nやDifyのセルフホストに最適な国内VPSはどこ?
月額数百円から始められるメモリ1GB〜4GB帯の料金比較や、Docker構築のしやすさで選んだおすすめVPS 3選は以下の記事で詳しく解説しています。サーバー選びで迷っている方はまずこちらをチェックしてみてください。
👉 【2026年最新】開発・自動化におすすめのVPS 3選を徹底比較!コストとスペックで選ぶ最適解
【実践】VPSにDocker Composeでn8nを立ち上げる5ステップ
ここからは、契約したVPS(Ubuntu 22.04 LTS または 24.04 LTS)へSSH接続し、Docker Composeを使ってn8nをゼロから立ち上げる手順を解説します。
初心者がつまずきやすい「データ保存フォルダの権限エラー」や「初期アクセス時のセキュアCookieエラー」もすべて先回りして対策済みの構成になっていますので、上から順番にコマンドをコピー&ペーストして進めてください。
STEP 1:Ubuntuサーバーの更新とDocker環境の準備
まずはUbuntuのパッケージを更新し、Docker公式リポジトリから「Docker Engine」と「Docker Composeプラグイン」をインストールします。
💡 補足: すでに同サーバー上でDifyなどを構築しており、Dockerがインストール済みの場合は、このSTEP 1を飛ばして「STEP 2」へ進んでください。
# 1. パッケージ更新と必要ツールの導入
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg
# 2. Docker公式GPGキーの追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 3. DockerリポジトリをAPTソースに登録
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. Docker本体とComposeプラグインのインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 5. バージョン確認
docker --version
docker compose version
また、メモリ1GB〜2GBプランのVPSを利用している場合は、突発的なメモリ不足を防ぐために2GB〜4GBのSwap(仮想メモリ)を作成しておくとより安定します。
STEP 2:n8n用のディレクトリ作成と永続化データ(Volume)の権限設定
続いて、n8nの設定ファイルや作成したワークフロー、暗号化されたAPI認証情報(Credentials)をサーバー内に永続保存するための専用ディレクトリを作成します。
# 1. 作業用ディレクトリとデータ保存用フォルダ(local-files / n8n_data)を作成
mkdir -p ~/n8n/n8n_data ~/n8n/local-files
cd ~/n8n
# 2. 【重要】コンテナ内のnodeユーザー(UID:1000)が書き込めるよう所有権を変更
sudo chown -R 1000:1000 ./n8n_data ./local-files
この sudo chown -R 1000:1000 を忘れると、コンテナ起動時に EACCES: permission denied という権限エラーが発生してn8nが起動しないため、必ず実行してください。
STEP 3:docker-compose.yml の作成と環境変数の設定
次に、~/n8n ディレクトリ直下に docker-compose.yml ファイルを作成します。
# エディタで docker-compose.yml を新規作成
nano docker-compose.yml
開いた画面に、以下の設定コードを貼り付けて保存(Ctrl + O ➔ Enter ➔ Ctrl + X)します。
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n
restart: always
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=Asia/Tokyo
- TZ=Asia/Tokyo
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
# 初回にIPアドレス(HTTP)で疎通確認する場合は以下を false に設定
# 独自ドメイン+HTTPS化が完了したら true に変更(または行を削除)します
- N8N_SECURE_COOKIE=false
volumes:
- ./n8n_data:/home/node/.n8n
- ./local-files:/files
ここでの最大のポイントは3つあります。
- 日本時間(Asia/Tokyo)の指定:
GENERIC_TIMEZONEとTZの両方にAsia/Tokyoを指定することで、定期実行(Schedule Trigger)が日本時間で狂いなく動作します。 - セキュアCookieエラーの回避: 現在のn8nはセキュリティ強化のため、デフォルトでHTTPS通信以外でのログインを拒否します。まずはIPアドレス直打ち(HTTP)で初期画面を開くために
N8N_SECURE_COOKIE=falseを一時的に入れています。 - データの永続化:
./n8n_dataをマウントしているため、コンテナを再起動・アップデートしても作成したワークフローが消えることはありません。
STEP 4:コンテナ起動と稼働確認(docker compose up -d)
設定ファイルが保存できたら、n8nコンテナをバックグラウンドで起動します。
# コンテナのダウンロードとバックグラウンド起動
sudo docker compose up -d
# 起動状態の確認
sudo docker compose ps
STATUS 列に Up と表示されていれば正常に稼働しています。万が一エラーで落ちている場合は sudo docker compose logs -f でログを確認してください。
なお、初期テストのためにVPS側のパケットフィルター(または ufw)で一時的に TCP 5678番ポート を開放しておきます(後述するSSL化が完了したら5678番ポートは閉じて443番のみにします)。
STEP 5:ブラウザから初期オーナーアカウントを作成してログイン
手元のPCブラウザを開き、以下のURLへアクセスします。
http://あなたのVPSのIPアドレス:5678
初回アクセス時に「Set up owner account(オーナーアカウントの登録)」画面が表示されます。
- メールアドレス(Email)
- 名前(First Name / Last Name)
- パスワード(8文字以上・大文字と数字を含む強固なもの)
これらを入力して「Next」を押せば、すぐにn8nのワークフロー作成キャンバスが開きます。設定画面から無料のコミュニティライセンスキーを受け取る登録(任意)を行えば、ワークフロー履歴などの便利な追加機能も無料でアンロックできます。
Webhookを確実に受信する!ドメイン割り当てとSSL(HTTPS)化の必須設定
IPアドレスと5678番ポートでn8nの画面が開けるようになりましたが、実務で運用するなら「独自ドメインの割り当て」と「SSL(HTTPS)化」は必須作業です。
なぜWebhookにはHTTPS(SSL)が必須なのか?
これには2つの明確な理由があります。
- 外部サービス側のセキュリティ要件: LINE Messaging API、Slack、Stripe、GitHub、X(旧Twitter)などの主要な外部APIやOAuth2認証は、セキュリティ規定により「
https://から始まる暗号化されたWebhook URL」しか登録を受け付けない仕様になっています。 - n8nの環境変数
WEBHOOK_URLの仕組み: デフォルトのままでは、n8nが生成するWebhookの待受URLがhttp://localhost:5678/webhook/...になってしまい、外部のサーバーからアクセスすることができません。
Cloudflare TunnelまたはNginxによる簡単なSSL化と「WEBHOOK_URL」設定
独自ドメイン(例:n8n.example.com のようなサブドメイン)を使ってn8nをHTTPS化する方法は、大きく分けて2つあります。
- 方法A:Cloudflare Tunnel(cloudflared)を使う【推奨・ポート開放不要】
Cloudflareでドメインを管理している場合、VPS内にcloudflaredを導入してhttp://localhost:5678へトンネル接続するだけで、VPSの5678番ポートや80/443番ポートを外部に開放することなく、完全無料で強固なHTTPS化が完了します。 - 方法B:Nginx(またはCaddy)+ Let's Encryptを使う
VPS上でWebサーバー(リバースプロキシ)を立て、443番ポート(HTTPS)で受けた通信を内部のlocalhost:5678へ転送する方法です。Nginxを使う場合は、n8nの画面表示に必要なWebSocket通信を通すため、proxy_set_header Upgrade $http_upgrade;とproxy_set_header Connection "upgrade";の2行を必ず設定に含めてください。
ドメインのHTTPS化が完了したら、先ほどの docker-compose.yml の環境変数(environment:)を以下のように本番仕様へ書き換えます。
environment:
- GENERIC_TIMEZONE=Asia/Tokyo
- TZ=Asia/Tokyo
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
# 本番ドメインとHTTPS設定を追加
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- N8N_SECURE_COOKIE=true
書き換え後に sudo docker compose up -d を実行してコンテナを再作成すれば、生成されるWebhook URLがすべて https://n8n.example.com/webhook/... に統一され、世界中のあらゆるWebサービスやOAuth認証と安全に連携できるようになります。
n8nを最新バージョンへアップデートする手順
n8nは毎週のように新しい連携ノードやAIエージェント機能が追加されます。アップデートは以下の3コマンドだけで完了します。
cd ~/n8n
# 1. 最新イメージのダウンロード
sudo docker compose pull
# 2. コンテナの再作成・起動
sudo docker compose up -d
# 3. 不要になった古いイメージの削除(ディスク容量節約)
sudo docker image prune -f
メディアを自動化する!n8n×Dify×GASの最強連携ユースケース
VPS上に自分専用のn8nが立ち上がると、単なる「Zapierの代替」にとどまらず、他の自動化ツールと組み合わせた高度なシステムをコストゼロで構築できるようになります。
例1:microCMSの記事公開Webhook ➔ 複数SNS(X・Bluesky等)へ自動同時投稿
個人メディアやブログを運営している場合、記事を公開したあとのSNS告知をn8nで完全自動化できます。
- microCMSで記事が公開された瞬間、n8nの「Webhookノード」へ通知を飛ばす
- n8n側で記事タイトル・URL・要約文を抽出し、OpenAIやGeminiノードでSNS向けの紹介文とハッシュタグを自動生成する
- X(旧Twitter)ノード、Bluesky(HTTP Request)、Discordなどに分岐させ、ワンクリックもせず複数SNSへ一斉に自動投稿する
💡 あわせて読みたい(microCMSと自動化の基盤づくり):
・microCMSで脱WordPress!個人メディアをAPI・自動化で省力化するメリットと導入ステップ
例2:n8nで定期データ収集 ➔ 自前Difyで高度AI処理 ➔ スプレッドシートへ記録
「外部サービスとのAPI接続やスケジュール管理」が得意な n8n と、「複雑なプロンプト制御やRAG(ナレッジ検索)」が得意な Dify を同じVPS(または別コンテナ)で連携させると、最強のAI自動化基盤が完成します。
- n8nの役割: 毎日決まった時間にRSSやWebサイトから最新情報を取得し、DifyのAPIへデータを渡す。受け取った結果をGoogleスプレッドシートへ書き込み、SlackやLINEへ通知する。
- Difyの役割: 過去記事のデータベース(RAG)を参照しながら、重複しない切り口で記事構成案やドラフトを生成してn8nへ返す。
これらをすべて自前のVPS内で完結させれば、Zapierのタスク課金もDify Cloudのクレジット上限も一切気にすることなく、24時間365日フル稼働する自動化パイプラインが手に入ります。
💡 あわせて読みたい(VPSでDifyをセルフホストする手順):
・【脱・無料枠制限】Difyを格安VPSにセルフホスト構築する完全手順!Dockerで無制限AI環境を作る
まとめ:自前n8nサーバーで、課金を気にしない自動化ライフを手に入れよう
本記事では、ZapierやMakeの厳しいタスク制限・高額課金から卒業し、格安VPS上にDockerでn8nをセルフホスト構築する手順を解説しました。
- タスク数・ワークフロー数が完全無制限: 月額数百円〜千円台のVPS代だけで、何万タスク回しても追加費用は0円。
- メモリ1GB〜2GBの軽量スペックで稼働: 単体運用なら最小クラスのVPSで十分動き、メモリ4GBならDifyとの同居運用も可能。
- HTTPS化と
WEBHOOK_URL設定で実務完結: 独自ドメインとSSLを設定することで、あらゆる外部WebサービスからリアルタイムにWebhookを受信できる。
「タスク消費がもったいないから、この自動化は諦めよう……」と妥協する必要はもうありません。ぜひコスパに優れた国内VPSに自分専用のn8nを構築し、アイデア次第で何でも繋げる自由な自動化環境を手に入れてください。