n8nのセルフホスティングをAWS上で行う(ゼロから構築編)
マーケットプレイス利用料を節約するべくゼロから構築してみます。
基本的にはn8nのドキュメントを参考に進めていきます。
構築方針について
公式ドキュメントには様々な手法が記載されていますが、今回はDockerのみを利用して構築します。
npmでの構築
npmなんもわからん
Docker Composeでの構築
スケールする見込みが限りなく低い
いざとなったらEC2インスタンス作り直せばよい
散々やったがよくわからなかった
AWS EKS
EC2と比較して価格が高そう
EKSのメリットとしてスケーリングしやすいとあるので、上記にある通りスケールする見込みが限りなく低い分Too muchと判断
DBは標準のものを利用
PostgreSQLも使えるらしいがそこまで拡張性は必要ない
インスタンスの起動
スペックなどはマーケットプレイスのAMIで構築したインスタンスを参考に設定していきます。
Dockerのインストール
インスタンスが起動したらSSH接続してDockerをインストールしていきます。
インストール方法は以下の記事を参考にコピペで完結したので楽ちんでした。
1. SSHで接続してパッケージのアップデート
sudo dnf update
2. Dockerインストール
sudo dnf install -y docker
3. Dockerデーモン起動
sudo systemctl start docker
4. sudoなしで実行できるように、ユーザーグループの追加
sudo gpasswd -a $(whoami) docker
5. 一度インスタンス再起動後Dockerデーモンの自動起動設定
sudo systemctl enable docker
n8nのインストールと起動
Dockerがインストール出来たらn8nをインストールします。
公式ドキュメントはローカルでインストールする想定ですが、コマンドだけつまんでいけば問題ないですね。
1. データ保管用のボリューム n8n_data を作成
docker volume create n8n_data
2. n8nを起動
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e N8N_SECURE_COOKIE=false \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e GENERIC_TIMEZONE="Asia/Tokyo" \
-e TZ="Asia/Tokyo" \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
N8N_SECURE_COOKIE はhttpで接続するために設定しています。
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS は指定しないと「To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.」と表示されるので指定しています。
GENERIC_TIMEZONE と TZ はタイムゾーンですね。
他にも初回起動時は「Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. Changing permissions to 0600..」と書かれていますが、これはただのお知らせなので無視してOK。
アカウント作成したりするとちょろっとログが見えるのですが、特に気にならない人はControl+P,Qで抜けてください。
n8nのバージョンアップと再起動
必要に応じて適宜アップデートと再起動を行えばOK。