前回はn8nの料金体系や使い方について書きました。

→n8nとは?料金・使い方からAI連携まで解説 Zapierとの比較も

n8nクラウド版の実行回数制限を回避し、コストを抑えながら自社のaws環境で安全に自動化ワークフローを運用したいという課題はありませんか。
この記事を読むことで、AWSEC2上でDockerを用いてn8nを安定稼働させ、独自ドメインかつHTTPS化された環境でワークフローの自動化を開始できる状態になります。

この記事でわかること
・ n8nを稼働させるためのAWS EC2サーバーの構築手順
・ Docker Composeを用いた独自ドメイン・HTTPS化に対応する安全な起動構成
・ 実行回数の制限なく低コストに運用できるセルフホスティングの利点

全5ステップで完了!n8nをEC2でセルフホスティングする手順の概要

n8nをAWS EC2上でセルフホスティングするプロセスは、大きく5つのステップに分けられます。
各ステップを着実に実行することで、安全で安定した自動化環境を構築可能です。
本記事では、この手順をハンズオン形式で具体的に解説していきます。

1. n8n稼働用のEC2インスタンスを準備する
2. EC2インスタンスに独自ドメインを設定する
3. サーバー環境にDockerとDocker Composeを導入する
4. Docker Composeでn8nの起動環境を構築する
5. n8nを起動してブラウザからアクセスする
まずは、n8nを稼働させるための基盤となるAWS EC2インスタンスの準備から始めます。

ステップ1:n8n稼働用のEC2インスタンスを準備する

はじめに、n8nアプリケーションを稼働させるための仮想サーバーであるEC2インスタンスを作成します。
このステップでは、適切なスペックのインスタンスを選定し、後続のドメイン設定で必要になる静的なIPアドレスを確保し、外部から安全にアクセスするためのファイアウォール設定を行います。
これらが完了すると、n8nをインストールするためのサーバー基盤が整います。

続いて、作成したEC2インスタンスに独自ドメインを割り当てる設定を進めていきましょう。

EC2インスタンスの推奨スペックと月額費用の目安

n8nを安定稼働させるためには、メモリ2GB以上のインスタンスがおすすめです。
AWSの無料利用枠対象であるt2.microやt3.micro(メモリ1GB)でも動作は可能ですが、複数のワークフローを同時に実行するとメモリ不足で不安定になる可能性があります。
そのため、t4g.small(2vCPU,2GBメモリ)やt3.small(2vCPU,2GBメモリ)が推奨されます。

月額費用は、t4g.smallのオンデマンドインスタンスを東京リージョンで利用した場合、およそ15ドル前後が目安です。
AWSPricingCalculatorで最新の料金を確認することをおすすめします。

インスタンス作成と同時にElastic IPでIPアドレスを固定する

EC2インスタンスに独自ドメインを設定するため、固定のグローバルIPアドレスを割り当てるElasticIPを設定します。
EC2インスタンスは停止・再起動するとパブリックIPアドレスが変更されるため、DNS設定が都度必要になるのを防ぐためです。
設定手順は以下の通りです。

1.AWSマネジメントコンソールのEC2ダッシュボードから「ElasticIP」を選択し、新しいアドレスを割り当てます。
2.割り当てたElasticIPアドレスを選択し、「アクション」から「ElasticIPアドレスの関連付け」を選び、先ほど作成したEC2インスタンスに紐付けます。
注意点として、インスタンスに紐付いていないElasticIPアドレスには料金が発生するため、作成後は速やかにインスタンスへ関連付けてください。

HTTPS通信に必要なポートを開放するセキュリティグループ設定

外部からn8nへ安全にアクセスできるよう、EC2インスタンスのファイアウォール機能であるセキュリティグループを設定します。
リバースプロキシを介してn8nにアクセスする構成を前提とし、以下のポートを開放します。
SSH(22):サーバーに接続してコマンド操作を行うために使用。
ソースIPは自分のPCのIPアドレスに限定することが推奨されます。

HTTP(80):Let'sEncryptによるSSL証明書の認証で使用。
ソースは「Anywhere-IPv4(0.0.0.0/0)」に設定。
HTTPS(443):ブラウザからn8nへアクセスするために使用。
ソースは「Anywhere-IPv4(0.0.0.0/0)」に設定。
n8nがデフォルトで使用する5678番ポートは、セキュリティの観点から直接公開しないようにします。

ステップ2:EC2インスタンスに独自ドメインを設定する

サーバーの準備が整ったら、次にIPアドレスではなく分かりやすい名前でアクセスできるよう、独自ドメインを設定します。
このステップでは、AWSのDNSサービスであるRoute53を利用して、取得済みのドメイン名と先ほど設定したEC2インスタンスの固定IPアドレスを紐付けます。
この設定が完了すると、ブラウザのアドレスバーに独自ドメインを入力してサーバーにアクセスできるようになります。

ドメインの設定が完了したら、いよいよサーバーにログインしてn8nを動かすためのソフトウェアをインストールしていきます。

Route 53でドメインとEC2のIPアドレスを紐付けるAレコードの作成

取得したドメイン名とEC2インスタンスのElasticIPアドレスを紐付けるため、AWSのDNSサービスであるRoute53にAレコードを作成します。
手順は以下の通りです。
1.AWSRoute53のコンソールで「ホストゾーン」を作成します。すでにお持ちのドメインを管理している場合は、既存のホストゾーンを選択。
2.対象のホストゾーン内で「レコードを作成」を選択します。

3.レコードタイプとして「A」を選び、値のフィールドにEC2インスタンスに割り当てたElasticIPアドレスを入力し、レコードを作成。
もしドメインを他のレジストラで取得した場合は、そのレジストラの管理画面でネームサーバーをRoute53で指定されたものに変更する必要があります。

【補足情報】DNS設定が反映されているか確認する方法

作成したAレコードがインターネット全体に反映されるには、数分から最大で72時間程度かかる場合があります。
設定が正しく反映されたかを確認するには、PCのターミナルやコマンドプロンプトでdigコマンドまたはnslookupコマンドを使用します。
例えば、「n8n.example.com」というドメインを設定した場合、以下のコマンドを実行します。

dig n8n.example.com

コマンドの実行結果の「ANSWER SECTION」に、設定したElastic IPアドレスが表示されれば、DNS設定は正常に反映されています。
WebベースのDNSチェックツールを利用して確認することも可能です。

ステップ3:サーバー環境にDockerとDocker Composeを導入する

次に、EC2インスタンスのホストOS上に、n8nをコンテナとして効率的に管理するためのDockerとDockerComposeをインストールします。
コンテナ技術を利用することで、ホストOSの環境を汚さずにアプリケーションを実行でき、環境の再現や移行が容易になります。
このステップでは、サーバーへSSHで接続し、必要なソフトウェアをセットアップしていきます。

これらのツールが導入できれば、n8nの起動に必要な設定ファイルを記述する準備が整います。

SSHクライアントでEC2インスタンスに接続する

作成したEC2インスタンスに接続し、コマンド操作を行うためにSSHクライアントを使用します。
macOSやLinuxではターミナル、WindowsではPowerShellやPuTTYなどのツールを利用します。
接続するには、インスタンス作成時にダウンロードしたキーペアファイル(.pem)が必要です。

以下のコマンド例のように、キーペアファイルのパスとEC2インスタンスのElasticIPアドレスまたはパブリックDNSを指定して接続します。

ssh -i "your-key.pem" ec2-user@your-elastic-ip

接続時の注意点として、キーペアファイルのパーミッションが他人に読み取れないよう400に設定されている必要があります。
chmod 400 your-key.pem コマンドで変更してください。

Docker Engineをサーバーにインストールする

SSHでサーバーに接続後、コンテナ実行環境であるDockerEngineをホストOSにインストールします。
ここでは、多くのAWSEC2インスタンスで採用されているAmazonLinux2を前提とした手順を説明します。
以下のコマンドを順番に実行してください。

1.sudo yum update -yでパッケージを最新の状態に更新。
2.sudo amazon-linux-extras install dockerでDockerをインストール。
3.sudo service docker startでDockerサービスを起動。
4.sudo usermod -a -G docker ec2-userでec2-userがsudoなしでdockerコマンドを実行できるように権限を追加。

権限設定を反映させるため、一度SSH接続をログアウトし、再度ログインします。

Docker Composeをインストールしてコマンドを使えるようにする

複数のDockerコンテナを定義・管理するためのツール、DockerComposeをホストOSにインストールします。
DockerComposeV2はDockerEngineのプラグインとして統合されており、`docker compose`コマンドとして利用できますが、ここでは従来のV1スタンドアロンバイナリをインストールする方法を説明します。
以下のコマンドを実行してインストールし、実行権限を付与してください。

1.`sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose`
2.`sudo chmod +x /usr/local/bin/docker-compose`

インストール後、`docker-compose --version`コマンドを実行してバージョン情報が表示されれば、セットアップは完了です。

【よくある失敗】コマンドが実行できない時の対処法

DockerやDocker Composeのコマンド実行時に「command not found」というエラーが表示される場合、いくつかの原因が考えられます。
まず、インストールしたバイナリへのパスが通っていない可能性があります。`echo $PATH`コマンドで環境変数を確認し、`/usr/local/bin`が含まれているか確認してください。
次に、ファイルの実行権限が付与されていないケースです。`sudo chmod +x /usr/local/bin/docker-compose`のように、実行権限を正しく付与し直します。

また、`docker`コマンドが`sudo`なしで実行できない場合は、`sudo usermod -a -G docker ec2-user`の実行後に再ログインしていない可能性が高いので、一度SSHセッションを終了して再接続を試みてください。

ステップ4:Docker Composeでn8nの起動環境を構築する

Dockerの準備が整ったら、docker-compose.ymlという設定ファイルを作成して、n8nの起動環境を定義します。
このファイル一つで、n8n本体のコンテナ、リクエストを振り分けるリバースプロキシ、そして通信を暗号化するためのSSL証明書の管理まで、すべてをコードとして管理できます。
これにより、誰が実行しても同じ環境を再現できるようになります。

この設定ファイルが完成すれば、コマンド一つでn8nを起動できるようになります。

設定ファイル(docker-compose.yml)を作成する

まず、n8nの設定ファイルとデータを格納するためのディレクトリを作成し、その中にdocker-compose.ymlという名前のファイルを作成します。
mkdir n8n-data && cd n8n-data
vi docker-compose.yml

ファイル内には、n8nサービスと、リバースプロキシとなるCaddyやNginxのサービス定義を記述します。
n8nの公式ドキュメントで提供されているサンプルを参考に、使用するドメイン名やタイムゾーン、管理者用の認証情報などを環境変数として設定します。
データの永続化設定もこのファイルで行います。

リバースプロキシとしてNginx(またはCaddy)を設定する

n8nコンテナの前にリバースプロキシを配置し、HTTPS化や外部からのリクエストの受付を担当させます。
これにより、n8n本体のポートをインターネットに直接公開する必要がなくなり、セキュリティが向上します。
docker-compose.yml内で、NginxやCaddyといったWebサーバーのコンテナを定義します。

特にCaddyは、設定ファイルがシンプルで、Let'sEncryptを利用したSSL証明書の自動取得・更新機能が組み込まれているため、導入が非常に簡単です。
ホストからの80番と443番ポートへの通信をリバースプロキシのコンテナが受け取り、n8nコンテナへ転送するように設定します。

Let's Encryptを利用したSSL証明書の自動更新設定

独自ドメインでのn8nアクセスをHTTPS化するために、無料のSSL/TLS証明書発行サービスであるLet's Encryptを利用します。
手動で証明書を取得・更新するのは手間がかかりますが、CaddyやNginx Proxy ManagerといったリバースプロキシをDocker Composeと組み合わせて利用することで、このプロセスを完全に自動化できます。

docker-compose.ymlの設定で、自身のドメイン名とLet's Encryptへの登録に使用するメールアドレスを指定するだけで、コンテナ起動時に証明書が自動で取得されます。
さらに、証明書の有効期限が近づくと自動で更新処理が行われるため、証明書切れの心配がありません。

【補足情報】データを永続化してワークフローの消失を防ぐ設定

作成したワークフローや認証情報がコンテナの再起動や削除で消えないように、データを永続化する設定が不可欠です。
Dockerのボリューム機能を利用し、コンテナ内のデータディレクトリ(/home/node/.n8n)をホストマシンの特定のディレクトリ(例:~/.n8n)に紐付け(マウントし)ます。
この設定はdocker-compose.yml内のvolumesセクションに記述します。
~/.n8n:/home/node/.n8n

これにより、データはホストマシン上に保存されるため、コンテナを更新・再作成しても安全です。
さらに信頼性を高めるには、このホスト上のディレクトリをcronとAWS CLIなどを使って定期的にAmazon S3へバックアップする仕組みを構築することをお勧めします。

ステップ5:n8nを起動してブラウザからアクセスする

設定ファイルdocker-compose.ymlの準備が完了したら、いよいよn8nを起動します。
この最終ステップでは、コマンドを実行してバックグラウンドでコンテナを起動し、正常に動作しているかをログで確認します。
問題がなければ、ブラウザから設定した独自ドメインにアクセスし、n8nの初期設定を行って、セルフホスティング環境を完成させます。

これで、クラウドプランの制限に縛られない、自由なワークフロー自動化の環境が手に入ります。

Dockerコンテナをバックグラウンドで起動するコマンド

作成したdocker-compose.ymlファイルがあるディレクトリで、以下のコマンドを実行し、定義されたすべてのサービス(n8n、リバースプロキシ等)を起動します。
docker-compose up -d
-dオプションは「detachedモード」を意味し、コンテナをバックグラウンドで実行します。
これにより、SSHセッションを閉じてもコンテナは稼働し続けます。

コンテナを停止したい場合は、同じディレクトリでdocker-compose downコマンドを実行します。
このコマンドは、単一ホストでのコンテナ管理に最適化されており、より大規模なデプロイではAWS ECSのようなコンテナオーケストレーションサービスが利用されます。

コンテナの起動ログを確認してエラーの有無をチェックする

コンテナが正常に起動しているか、また問題が発生していないかを確認するために、起動ログをチェックします。
docker-compose.ymlがあるディレクトリで以下のコマンドを実行してください。
docker-compose logs -f
-fオプションを付けると、ログをリアルタイムで追跡表示できます。

特に、リバースプロキシのログでSSL証明書がLet's Encryptから正常に取得できているか、n8nコンテナのログにエラーメッセージが出ていないかを確認します。
問題なく起動していれば、「n8n ready」といったメッセージが表示されます。
AWS ECSなどの環境では、これらのログはAmazon CloudWatch Logsに集約され、より高度な監視が可能です。

設定した独自ドメインにアクセスして初期設定を完了させる

コンテナの起動が確認できたら、Webブラウザを開き、`docker-compose.yml`で設定した独自ドメイン(例:`https://n8n.your-domain.com`)にアクセスします。
正しく設定されていれば、n8nの初期設定画面が表示されます。
ここで、オーナーアカウントとなるユーザー名、メールアドレス、パスワードを設定します。

この情報を入力してアカウントを作成すれば、すべてのセットアップは完了です。
作成したアカウントでログインし、自由にワークフローを作成できる環境が利用可能になります。

n8nをEC2でセルフホスティングする3つのメリット

n8nをAWSEC2上でセルフホスティングすることには、クラウド版にはない大きなメリットが3つ存在します。
コスト、セキュリティ、そして機能的な自由度の観点から、この運用形態がおすすめである理由を解説します。
これらのメリットを理解することで、なぜ手間をかけてでもセルフホスティングを選択する価値があるのかが明確になります。

セルフホスティング環境の運用に関する疑問点については、次のよくある質問で解消していきましょう。

クラウドプランの実行回数やワークフロー数の制限がなくなる

セルフホスティングを選択する最大のメリットは、n8nの機能的な制限から解放される点です。
n8nのクラウドプランでは、料金に応じて月間のワークフロー実行回数や作成できるアクティブなワークフロー数に上限が設けられています。
しかし、セルフホスト版ではこれらの制限が一切ありません。

そのため、大量のデータを処理するワークフローや、高頻度で実行する必要があるタスクを、追加コストを気にすることなく無制限に実行できるため、スケーラビリティが求められる用途におすすめです。

自社AWS環境内でデータを管理してセキュリティを強化できる

機密情報や個人情報を取り扱うワークフローを運用する場合、セキュリティとコンプライアンスは非常に重要な要素です。
n8nを自社のAWSアカウント内でセルフホスティングすることにより、すべてのデータが外部のSaaSベンダーを経由せず、自社の管理下にあるインフラ内で完結します。

AWSが提供するVPC(仮想プライベートクラウド)やセキュリティグループ、IAM(Identity and Access Management)といった高度なセキュリティ機能と組み合わせることで、厳格なアクセス制御を実現し、データガバナンスを強化できます。

AWSの無料利用枠を活用して運用コストを抑えられる可能性がある

AWSには新規アカウント開設から12ヶ月間利用できる無料利用枠があり、これを活用することでn8nの運用コストを大幅に削減できます。
無料枠の対象であるt2.microまたはt3.microインスタンス(月750時間まで無料)を利用すれば、小規模なテストや個人的なプロジェクトであれば、サーバー費用をほぼゼロに抑えてn8nを運用することが可能です。
本格的な運用でスペックが不足した場合でも、必要に応じてインスタンスタイプを柔軟に変更できるため、コストパフォーマンスに優れた運用がおすすめできます。

n8nのEC2セルフホスティングに関するよくある質問

ここでは、n8nをAWSEC2でセルフホスティングする際によく寄せられる質問とその回答をまとめました。
インスタンスのスペック選定や、運用開始後のメンテナンス、データの保全に関する疑問点を解消します。
これらの情報を参考にすることで、より安心してセルフホスティング環境の構築と運用に取り組むことができます。

これらの手順と知識を基に、あなた自身の自動化基盤をAWS上に構築しましょう。

最小構成のEC2インスタンスでもn8nは快適に動作しますか?

テストや個人的な小規模利用であれば動作しますが、快適な実運用には推奨されません。
AWS無料枠のt2.microやt3.microインスタンスはメモリが1GBと少なく、複数のワークフローが同時に実行されたり、処理するデータ量が増えたりすると、メモリ不足で動作が不安定になる可能性があります。
安定したパフォーマンスを求めるなら、最低でもメモリ2GBを持つt4g.smallやt3.smallインスタンスの利用を推奨します。

セルフホストしたn8nのバージョンアップはどのように実施しますか?

DockerComposeで環境を構築した場合、非常に簡単な手順でバージョンアップが可能です。
まず`docker-compose.yml`ファイルを開き、n8nサービスのイメージタグを更新したいバージョン(例:`n8nio/n8n:latest`)に書き換えます。
その後、ターミナルで`docker-compose pull n8n`コマンドを実行して新しいイメージを取得し、最後に`docker-compose up -d`でコンテナを再作成・起動すれば完了です。

EC2インスタンスを再起動した場合、n8nのワークフローデータは保持されますか?

はい、Dockerのボリューム機能でデータを永続化する設定が正しく行われていれば保持されます。
docker-compose.ymlファイル内で、コンテナのデータディレクトリをホストマシン上のディレクトリにマウントする設定(volumes)が重要です。
この設定により、データはEC2インスタンスのストレージに保存されるため、インスタンスやコンテナを再起動してもワークフローや認証情報が消えることはありません。

万一に備え、マウント先のディレクトリを定期的にAmazonS3などにバックアップすることを推奨します。

まとめ

本記事では、AWS EC2上にDockerを利用してn8nのセルフホスティング環境を構築する具体的な手順を5つのステップで解説しました。
EC2インスタンスの準備からドメイン設定、Dockerの導入、HTTPS化、そしてn8nの起動まで、一連の流れを追うことで、安全かつスケーラブルな自動化基盤を構築できます。
セルフホスティングは、クラウド版の制限を超えた自由なワークフロー実行、厳格なデータ管理、そしてAWSの無料枠を活用したコスト削減といったメリットを提供します。