【ITニュース解説】Running full n8n on Vercel's free plan (with a free Postgres and your own domain)
2026年10月12日に「Dev.to」が公開したITニュース「Running full n8n on Vercel's free plan (with a free Postgres and your own domain)」について初心者にもわかりやすく解説しています。
ITニュース概要
ワークフロー自動化ツールn8nをVercel無料プランと無料Postgresで動かす方法を解説。アイドル時にn8nを停止・起動する工夫でリソースを節約し、個人利用に限り無料で運用できる。ただし、一部機能制限や起動時の遅延がある。
ITニュース解説
このニュース記事は、ワークフロー自動化ツールである「n8n」を、クラウドプラットフォームである「Vercel」の無料プランで動かすための実験的な試みとその結果について解説している。通常、n8nは常に稼働しているサーバー上で動作することを前提に設計されており、データベースやバックグラウンド処理が必要なツールである。一方、VercelはウェブサイトやAPIをホストするためのプラットフォームであり、特に短時間で実行される「サーバーレス関数」の利用に適している。これら二つの特性は相性が悪いように見えるが、記事ではこのミスマッチを解決し、コストゼロでの運用を目指した方法を紹介している。
記事の基本的なアイデアは、Vercelの単一のサーバーレス関数をn8nの「プロキシ」として利用することだ。プロキシとは、クライアントからのリクエストを別のサーバーへ中継する役割を持つプログラムを指す。このシステムでは、ウェブサイトのすべてのURLへのリクエストが、まずこのVercelの関数に送られるように設定されている。最初のクライアントからのリクエストが届くと、この関数はローカル環境(関数が実行される一時的なコンテナ内)でn8nを子プロセスとして起動する。n8nが完全に起動し、準備ができたことを確認した後、この関数は受け取ったリクエストを起動したn8nに転送する。
このシステムの最も重要な工夫は「アイドルシャットダウン」の仕組みである。もし4分間以上トラフィック(リクエスト)が途絶えた場合、Vercelの関数はn8nのプロセスを停止させる。n8nはデータベースに定期的にアクセスする特性があり、これが無料のデータベースサービス(例えばNeon Postgres)を常時稼働させてしまい、料金が発生する原因となる可能性がある。また、Vercelの無料利用枠も、プロセスが常時稼働しているとすぐに使い果たしてしまう恐れがある。n8nを停止させることで、データベースも自動的に「スケーリングゼロ」、つまりアイドル時には費用がかからない状態に戻り、Vercelの利用量も最小限に抑えられる。次にリクエストが来た際には、再びn8nが起動する仕組みである。
システムの状態はすべて「Neon Postgres」という外部のデータベースに保存される。これにはワークフローの定義、暗号化された認証情報、実行履歴などが含まれる。Vercelの関数が利用するディスクは一時的なものであり、関数が停止したり再起動したりするとデータは失われてしまう。そのため、重要なデータを外部データベースに永続化させることで、再起動しても何も失われないという設計になっている。
このシステムを構成する主な要素はいくつかある。一つは「プロキシハンドラー」で、これはリクエストやストリーミング応答(データを少しずつ送受信する通信)をローカルで起動したn8nに転送する役割を担う。次に「スーパーバイザー」があり、これはn8nを起動し、準備が整うまで待機し、アイドル状態になったら停止させるという一連のライフサイクル管理を行う。さらに「設定ビルダー」は、Neonデータベースの接続URLや独自のドメイン情報を受け取り、n8nが必要とする個別のデータベース設定変数(例: DB_POSTGRESDB_*)に変換する。n8nは通常、接続文字列形式ではなく、個別の変数でデータベース設定を行うため、このような変換が必要となる。
Vercelのようなサーバーレス環境でn8nを動かすためには、いくつかのn8n固有の設定が重要となる。N8N_PUSH_BACKEND=sseという設定は、ライブエディタの更新がWebSocketではなくServer-Sent Events(SSE)という技術を介して行われるようにするものだ。WebSocketは常時接続を維持するため、サーバーレス関数では扱いにくい場合がある。また、N8N_DEFAULT_BINARY_DATA_MODE=databaseという設定は、バイナリデータ(画像やファイルなど)をデータベースに保存するように指定する。サーバーレス関数はインスタンス間で共有ディスクを持たないため、一時ディスクに保存するとデータが失われる可能性があるためである。無料のデータベースに優しくするため、データベース接続プールを小さくし、データベースへのping(接続確認)間隔を長くする設定も行われている。コミュニティパッケージは、一時的なフォルダにインストールされると再起動時に消えてしまうため、無効化されている。さらに、Vercelが持つリクエストサイズ制限(約4.5MB)に少し満たない値をn8nのリクエストサイズ制限として設定することで、プラットフォーム側でエラーになる前にn8n側で適切にエラーを処理できるように工夫されている。
この記事の著者は、このシステムが実際に動作することを検証している。自身のドメインでデプロイし、以下の項目がテストされ、動作が確認された。オーナーセットアップ、ログイン、エディタUIの操作、コードノードを含むプロダクションウェブフック、コールドスタート(アイドル状態からの初回起動)後のウェブフックの正しい応答、フォームトリガーのレンダリングと送信、暗号化されたクレデンシャル(認証情報)の保存と再起動後の復号化、20並列のウェブフック呼び出しがすべて200 OKで応答すること、そしてアイドルシャットダウンがn8nをクリーンに終了させ、すべてのデータベース接続を閉じることなどが確認されている。コールドスタートにかかる時間は、ローカル環境で約9〜10秒だったという。
しかし、この方法にはいくつかの制限や動作しない機能も存在する。記事ではこれらについても明確に述べている。まず、スケジュール設定されたトリガーや定期的に外部をポーリング(監視)するトリガーは、常時稼働するプロセスが必要なため、このシステムでは信頼性が低いか、正しく機能しない。Vercelの無料プランでは、定期実行機能(cron)も最大で1日に1回という制限がある。コールドスタート時には、n8nが起動するまで初回のリクエストが待機することになるため、初期応答に遅延が発生する。Vercelのプラットフォーム自体が、約4.5MBを超えるリクエストボディ(送信データ)を拒否するという制限もある。また、Vercel上での関数実行時間は300秒に制限されており、これを超えるような長いワークフローは途中で終了してしまう。コミュニティノードやPython Codeノードも、前述の理由(一時ディスクへのインストール)から利用できない。さらに、n8nの将来のバージョンでは、内部のタスクランナーモードやコンテナ化されていないインストール形式が廃止される予定があるため、特定のバージョンに固定して利用する必要があり、将来のアップグレードには注意が必要である。n8nのパッケージ自体も非常に大きく、インストールサイズは約2.9GB、ソースマップなどを除いても約1.8GBになる。このサイズは、Vercelの「Large Functions」というベータ版機能を利用しないとデプロイできない場合がある。
無料プランを維持し、法的に問題なく利用するためにはいくつかの注意点がある。VercelとNeon Postgresのような無料サービスは、それぞれ月間の利用量に上限が設定されている。Vercelの無料プランでは、この上限を超過すると一部の機能が一時停止される場合があるため、自身の「Usage」ページで利用状況を定期的に確認することが推奨されている。また、n8nのエディタを開いたままにしていると、n8nがアイドル状態にならずに稼働し続けてしまい、無料利用枠を消費してしまうため、作業が終わったらエディタのタブを閉じるべきである。ライセンスに関しても、このプロジェクトの「つなぎのコード」はMITライセンスで提供されているが、n8n自体は「フェアコードライセンス」を採用しており、これは個人の利用や内部ビジネスでの利用を許可しているが、他人にホスティングサービスとして提供することは認められていない。VercelのHobbyプランも非商用利用が前提であるため、このシステムはあくまで個人のプロジェクト向けであり、アクセス権を共有したり、サービスとして販売したりすることはできない。
もしこのシステムに興味があれば、提供されているGitHubリポジトリのREADMEファイルに沿ってステップバイステップで導入を試すことができる。具体的には、暗号化キーの生成、Vercelへのリポジトリのインポート、Neonデータベースの作成、環境変数の設定、独自ドメインの追加、そして動作確認スクリプトの実行といった手順が示されている。もしデプロイを試した場合、コールドスタート時間やVercelの利用状況、何か不具合があった場合などの情報提供が歓迎されている。