はじめに
オープンソースのワークフロー自動化ツールである n8n を Amazon Lightsail にセルフホストする機会がありましたのでご紹介します。
Dockerは使わずに
公式ドキュメントでは Docker を使用してセルフホストする方法が紹介されていますが、今回は Docker を使わずに行いました。
セットアップ
Amazon Lightsail のインスタンス作成
Amazon Lightsail のコンソールで、LightSailの新規インスタンスを以下のスペックで作成します。
- Node.js
- 4GB以上のMemory
メモリは4GB以上でないとメモリ不足で正常に動作しない可能性があります。
Lightsailセットアップ
作成したインスタンスのコンソール画面から、SSHでログインします。
ProxyPassの設定
以下のファイルに下記のとおり追記します。
# 末尾に以下を追加
ProxyPass / http://localhost:5678/
ProxyPassReverse / http://localhost:5678/
apacheを再起動します
sudo /opt/bitnami/ctlscript.sh restart apache
n8n インストール
以下のディレクトリに移動します
cd /opt/bitnami/apache2/htdocs/
n8nをインストールします
sudo npm install n8n -g
pm2 インストール
sudo npm install pm2 -g
pm2 で n8n を永続化します
$ pm2 start n8n --name "n8n"
$ pm2 save
$ pm2 startup
IPアドレスを固定化する
Lightsailのインスタンスは起動のたびにIPアドレスが変わってしまうため、固定化します。
- LightSail管理画面のNetworkingを開く
- Attach Static IP をクリック
- 適当な名前(Staticip-1とかのデフォルト名でもOK)で作成する
- IPアドレスが固定される
ここまで完了すると、表示されたIPアドレスをブラウザに入力するとn8nのホーム画面が表示されると思います。
追加の設定
ドメイン設定とSSL化
今回はAWSの Route53 を使用します。
以下を参考にしてください。
WEBソケットの設定
n8nはWEBソケットを使ってブラウザとサーバで双方向通信をします。
この設定をしなくてもn8nは動作しますが、ブラウザ上の見た目や表示を正常にしたい場合は以下の設定を行います。
bitnami-ssl.conf を編集する
<VirtualHost _default_:443>
の内容を以下のように書き換えます。
<VirtualHost _default_:443>
DocumentRoot "/opt/bitnami/apache/htdocs"
SSLEngine on
SSLCertificateFile "/opt/bitnami/apache/conf/n8n-selfhost-8gb.nakamura.trial-sandbox.com.crt"
SSLCertificateKeyFile "/opt/bitnami/apache/conf/n8n-selfhost-8gb.nakamura.trial-sandbox.com.key"
# BEGIN: Configuration for letsencrypt
Include "/opt/bitnami/apps/letsencrypt/conf/httpd-prefix.conf"
# END: Configuration for letsencrypt
# BEGIN: Support domain renewal when using mod_proxy without Location
<IfModule mod_proxy.c>
ProxyPass /.well-known !
</IfModule>
# END: Support domain renewal when using mod_proxy without Location
<Directory "/opt/bitnami/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Error Documents
ErrorDocument 503 /503.html
# BEGIN: Support domain renewal when using mod_proxy within Location
<Location /.well-known>
<IfModule mod_proxy.c>
ProxyPass !
</IfModule>
</Location>
# END: Support domain renewal when using mod_proxy within Location
# WebSocket Setting
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:5678/$1 [P,L]
# HTTP Request Setting
ProxyPass / http://localhost:5678/
ProxyPassReverse / http://localhost:5678/
ErrorLog /opt/bitnami/apache2/logs/error_log
CustomLog /opt/bitnami/apache2/logs/access_log combined
</VirtualHost>
保存して、Apacheを再起動します。
sudo /opt/bitnami/ctlscript.sh restart apache
まとめ
以上、Docker を使わずに n8n を Amazon Lightsail にセルフホストする方法をまとめました。
参考になりましたら幸いです。