Amazon Linux2023という新しいOS環境でn8nをセルフホスティングしようとしても、Dockerの導入手順や各種設定ファイルの記述方法が従来と異なり、戸惑うことがあります。
この記事を読めば、AWS Lightsail上でAmazon Linux 2023を選択し、n8nをDockerでセルフホスティングして、独自ドメイン・HTTPS環境でワークフローの運用を開始できます。
このブログでは、各nodeの設定方法を丁寧に解説します。

この記事でわかること
・ AWS Lightsailでのサーバー準備からAmazon Linux 2023へのDocker環境構築までの手順
・ 低価格プランでもn8nを安定稼働させるためのスワップ領域設定
・ 独自ドメインとHTTPS化を実現するCaddyとDocker Composeの設定方法
・ データを維持したままn8nを安全にアップデートするためのポイント

全5ステップで完了!Lightsail上に独自ドメイン・HTTPS対応のn8n環境を構築する手順の概要

AWS Lightsailを利用して、最新OSのAmazon Linux2023上にn8n環境を構築する手順は、大きく分けて5つのステップで完了します。
最初にLightsailでサーバー(インスタンス)を作成して基本的なネットワーク設定を行い、次にサーバー内でn8nを動かすためのソフトウェア(Docker)をインストールします。
その後、安定稼働のためのメモリ設定、n8nの起動設定ファイルの作成を経て、最後にn8nを起動しブラウザからアクセスして最終確認をします。

各nodeの設定もこの手順に沿って行います。

ステップ1:AWS Lightsailインスタンスの作成とネットワーク初期設定

n8nを稼働させるための基盤となるAWS Lightsailのサーバー(インスタンス)を準備します。
ここでは、インスタンスの作成から、外部から安定してアクセスするために必要なIPアドレスの固定、通信を許可するためのファイアウォール設定までを行います。
この初期設定を正しく完了させることが、後の工程をスムーズに進めるための鍵となります。

Amazon Linux 2023のインスタンスを作成する

AWS Lightsailの管理コンソールからインスタンスを作成します。
「インスタンスの作成」を選択し、インスタンスのロケーション(リージョン)を決定します。
プラットフォームは「Linux operationg system」、設計図(ブループリント)は「Amazon Linux 2023」を選択してください。

インスタンスプランは、テスト用途であれば月額5ドルの1GBメモリプランから始められますが、本格的な運用を想定する場合は2GB以上のプランが推奨されます。
最後にインスタンス名を入力して作成を完了させます。

静的IPアドレスをアタッチしてIPを固定する

作成したインスタンスに静的IPアドレスを割り当てて、IPアドレスを固定します。
Lightsailのインスタンスは、デフォルトでは再起動するたびにパブリックIPアドレスが変わってしまう可能性があります。
IPアドレスが変動するとドメインとの紐付けが外れてしまうため、これを防ぐために静的IPを設定します。

管理画面の「ネットワーク」タブから「静的IPの作成」を選び、先ほど作成したインスタンスにアタッチしてください。

ファイアウォールで必要なポート(80, 443)を開放する

作成したインスタンスのファイアウォール設定で、外部からのアクセスに必要なポートを開放します。
n8nにWebブラウザ経由でアクセスするため、HTTP通信用のポート80と、HTTPS通信用のポート443の両方を開ける必要があります。
特にポート80は、後述するCaddyがSSL証明書を自動取得する際に必須です。

Lightsailインスタンスの管理画面にある「ネットワーク」タブのファイアウォールセクションで、この2つのポートに対するTCP接続を許可するルールを追加します。

ステップ2:Amazon Linux 2023へのDockerとDocker Composeのインストール

n8nをコンテナとして効率的に管理・運用するため、サーバーにDockerとDockerComposeをインストールします。
Amazon Linux2023では、従来のAmazon Linux2とは異なり、パッケージ管理にdnfコマンドを使用します。
ここでは、システムの最新化からDockerEngine、そして最新版のDockerComposeV2を導入するまでの一連のコマンド手順を解説します。

dnfコマンドでシステムパッケージを最新化する

サーバーに接続した後、まず初めにパッケージ管理ツールdnfを使用してシステム全体を最新の状態に更新します。
これにより、セキュリティパッチが適用され、ソフトウェア間の依存関係の問題を未然に防ぎます。
ターミナルで以下のコマンドを実行してください。
-yオプションは、すべての確認メッセージに対して自動的にyesと応答するためのものです。

sudo dnf update -y
このコマンドが完了すると、システムが最新の状態になります。

Docker Engineをインストールしてサービスを有効化する

次に、Docker Engineをインストールします。
Amazon Linux 2023のリポジトリには公式のDockerパッケージが含まれているため、dnfコマンドで簡単に導入できます。
以下のコマンドを順に実行し、インストール後にDockerサービスを起動し、システムの起動時に自動で立ち上がるように設定します。

1.sudo dnf install docker -y
2.sudo systemctl start docker
3.sudo systemctl enable docker
4.sudo usermod -aG docker ec2-user

最後のコマンドは、ec2-userがsudoなしでdockerコマンドを実行できるようにするための設定です。
適用するには一度サーバーからログアウトし、再ログインする必要があります。

最新版のDocker Compose V2をインストールする

DockerComposeをインストールして、複数のコンテナを定義した設定ファイルから一括で管理できるようにします。
Amazon Linux2023では、DockerComposeはDockerのプラグインとして提供されており、dnfでインストールできます。
これにより、従来のdocker-composeコマンドではなくdocker compose(ハイフンなし)コマンドが使えるようになります。

sudo dnf install docker-compose-plugin -y
インストール後、docker compose versionコマンドを実行して、バージョン情報が正しく表示されれば導入は成功です。

ステップ3:メモリ不足による動作不安定を防ぐスワップ領域の設定

n8nはワークフローの実行時にメモリを多く消費する傾向があり、特にLightsailの低価格プランではメモリ不足に陥り、動作が不安定になったり、予期せず停止したりする可能性があります。
この問題を回避するため、ハードディスクの一部を仮想的なメモリとして利用する「スワップ領域」を設定します。
これにより、物理メモリが不足した際の保険となり、アプリケーションの安定稼働を支援します。

この設定は、各nodeのパフォーマンス維持に不可欠です。

Lightsailの低価格プランでn8nを安定稼働させるためのスワップ設定

AWS Lightsailの月額5ドル(メモリ1GB)や10ドル(メモリ2GB)のような低価格プランでn8nを運用する場合、スワップ領域の設定は非常に重要です。
n8nは、内部で動作するnodeプロセスが複数のワークフローを同時に処理すると、想定以上にメモリを消費することがあります。
スワップ領域は、物理メモリ(RAM)がいっぱいになったときに、使用頻度の低いデータを一時的にディスク上に退避させることで、メモリ不足によるシステムダウンを防ぎます。

これにより、コストを抑えたプランでも安定したn8nの運用が可能になります。

スワップファイルを作成して永続的に有効化するコマンド手順

スワップ領域を作成し、システム再起動後も有効になるように設定します。
ここでは、2GBのスワップファイルを作成する手順を示します。
以下のコマンドをターミナルで順に実行してください。
1.スワップファイルを作成:
`sudo fallocate -l 2G /swapfile`

2.適切な権限を設定:
`sudo chmod 600 /swapfile`
3.スワップ領域としてフォーマット:
`sudo mkswap /swapfile`
4.スワップを有効化:
`sudo swapon /swapfile`

5.システム起動時に自動で有効化する設定:
`echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab`
最後に`free -h`コマンドを実行し、Swapの項目にサイズが表示されていれば設定は完了です。

ステップ4:CaddyとDocker Composeでn8nの起動設定ファイルを作成する

n8nを実際に起動するための設定ファイルを作成します。
ここでは、独自ドメインでのアクセスと通信の暗号化(HTTPS)を簡単に実現できるWebサーバー「Caddy」と、n8n本体をコンテナとして起動するための「Docker Compose」を使用します。
設定ファイルを格納する専用のディレクトリを準備し、それぞれの役割に応じた設定ファイルを記述していきます。

この設定により、安全で永続的なn8n環境が構築できます。
各nodeが正しく連携するためにも重要な工程です。

n8nの設定ファイルを格納する作業ディレクトリの準備

n8nの起動に必要な設定ファイル(Caddyfileとdocker-compose.yml)をまとめて管理するためのディレクトリを作成します。
ホームディレクトリなど、任意の場所に作業ディレクトリを作成し、そのディレクトリへ移動してください。
これにより、設定ファイルの管理が容易になります。

1.ディレクトリを作成して移動:
mkdir n8n-server && cd n8n-server
今後の作業は、すべてこのn8n-serverディレクトリ内で行います。

独自ドメインを自動でHTTPS化するCaddyfileの記述例

Caddyの設定ファイルであるCaddyfileを作成します。
Caddyは、このファイルに記述されたドメイン名に対して、SSL証明書(Let's Encrypt)の自動取得と更新を行い、HTTPS通信を有効化します。
また、外部からのアクセス(ポート443)をn8nが動作している内部のポート(5678)へ転送するリバースプロキシの役割も担います。

以下の内容でCaddyfileという名前のファイルを作成してください。
n8n.your-domain.comの部分は、ご自身の独自ドメインに書き換えます。
n8n.your-domain.com {
reverse_proxy n8n:5678
}

ワークフローデータを永続化するdocker-compose.ymlの記述例

DockerComposeを使用して、n8nとCaddyのコンテナを起動するための設定ファイルdocker-compose.ymlを作成します。
このファイルでは、各サービスのコンテナイメージ、ポート設定、環境変数、そして最も重要なデータ永続化のためのボリューム設定を定義します。
ボリューム設定により、コンテナを再起動や更新してもワークフローや認証情報が消えることはありません。

以下の内容でdocker-compose.ymlファイルを作成します。
[YOUR_DOMAIN]と[YOUR_TIMEZONE]の部分はご自身の環境に合わせて書き換えてください。
version:'3.7'
services:
n8n:
image:n8nio/n8n
restart:always
ports:
-"127.0.0.1:5678:5678"
environment:
-N8N_HOST=[YOUR_DOMAIN]
-N8N_PORT=5678
-N8N_PROTOCOL=https
-NODE_ENV=production
-TZ=[YOUR_TIMEZONE]
volumes:
-./n8n_data:/home/node/.n8n
caddy:
image:caddy:2
restart:always
ports:
-"80:80"
-"443:443"
volumes:
-./Caddyfile:/etc/caddy/Caddyfile
-./caddy_data:/data

ステップ5:n8nの起動とブラウザからの動作確認

作成した設定ファイルを用いて、いよいよn8nとCaddyのコンテナを起動します。
DockerComposeコマンド一つで、定義されたすべてのサービスがバックグラウンドで実行開始されます。
起動後は、ブラウザから設定した独自ドメインにアクセスし、n8nの初期設定画面が表示されることを確認します。

最後に、運用を見据えたn8nのアップデート手順についても補足します。
このステップが完了すれば、あなたのnodeベースの自動化環境が利用可能になります。

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

docker-compose.ymlファイルが保存されているディレクトリ内で、以下のコマンドを実行してn8nとCaddyのコンテナを起動します。
-dオプションは「detachedモード」を意味し、コンテナをバックグラウンドで実行します。
これにより、ターミナルを閉じてもコンテナは稼働し続けます。

docker compose up -d
コマンド実行後、Dockerイメージのダウンロードとコンテナの作成・起動が開始されます。
docker compose psコマンドで、n8nとcaddyのコンテナが両方ともUpの状態になっていることを確認してください。

ブラウザで独自ドメインにアクセスして初期オーナーアカウントを作成する

コンテナの起動が完了したら、Webブラウザを開き、`docker-compose.yml`や`Caddyfile`で設定した独自ドメイン(例:`https://n8n.your-domain.com`)にアクセスします。
初回アクセス時には、n8nのセットアップ画面が表示されます。
画面の指示に従い、オーナーアカウントのユーザー名、メールアドレス、パスワードを設定してください。

このアカウント作成が完了すると、n8nのワークフロー編集画面が表示され、利用を開始できます。

【補足情報】コンテナを停止せずにn8nをアップデートする手順

セルフホスティングしたn8nを新しいバージョンにアップデートする作業は非常に簡単です。
Dockerを利用しているため、データを保持したままアプリケーション本体のみを更新できます。
docker-compose.ymlがあるディレクトリで、以下のコマンドを順に実行します。

1.最新のn8nイメージを取得:
docker compose pull n8n
2.新しいイメージでコンテナを再起動:
docker compose up -d

この操作だけで、古いバージョンのコンテナが停止され、新しいバージョンのコンテナが起動します。
ボリューム設定が正しく行われていれば、既存のワークフローや認証情報はすべて引き継がれます。

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

n8nをAWS Lightsailでセルフホスティングする際によく寄せられる質問とその回答をまとめました。
推奨されるインスタンスのスペックや、OSによる構築手順の違い、さらには運用に欠かせないセキュリティとバックアップの考え方について解説します。
これらの情報を参考にすることで、より安心してn8n環境を構築・運用できます。
各nodeの安定稼働にも関わる重要なポイントです。

AWS Lightsailでn8nを動かすのに推奨されるメモリやスペックは?

最低でもメモリ1GB、安定運用を目指すなら2GB以上のプランを推奨します。
n8nは内部でnode.jsが動作しており、複数のワークフローを同時に実行するとメモリ消費が増加するためです。
1GBプランで運用する場合は、メモリ不足によるプロセス停止を避けるため、本記事で解説したスワップ領域の設定が必須となります。

CPUは1vCPUでも動作しますが、処理の多いワークフローを扱う場合は2vCPUあるとより快適です。

Amazon Linux 2023とUbuntuではn8nの構築手順にどんな違いがありますか?

主な違いは、Dockerなどをインストールする際のパッケージ管理コマンドです。
Amazon Linux2023ではdnfを使用するのに対し、Ubuntuではaptコマンドを利用します。
この初期セットアップ部分以外、n8nを起動するためのdocker-compose.ymlの記述内容やCaddyの設定方法など、Dockerコンテナ関連の手順はOSに依存しないため、ほとんど同じです。

したがって、OSの基本的な操作に慣れていれば、どちらを選んでも問題なく構築できます。

セルフホスティングしたn8nのセキュリティ対策やバックアップはどうすれば良いですか?

セキュリティ対策として、Lightsailのファイアウォールで不要なポートを閉じ、SSHアクセスは鍵認証のみに限定することが基本です。
バックアップは、Dockerボリュームとしてマウントしたデータディレクトリを定期的に圧縮し、S3など別の場所に保管する方法が確実です。
これにより、万が一サーバーに障害が発生しても、ワークフローや認証情報を復元できます。

まとめ

AWS LightsailとAmazon Linux2023を利用し、Dockerコンテナでn8nをセルフホスティングする手順を解説しました。
インスタンス作成からネットワーク設定、Dockerの導入、スワップ設定による安定化、Caddyを用いたHTTPS化、そしてDockerComposeによる起動と管理まで、一連の流れを具体的に示しました。
このブログで紹介した手順を踏むことで、コストを抑えつつ、安全で拡張性の高いnodeベースのワークフロー自動化環境を構築できます。