n8nをセルフホスティングする
n8n cloudだと個人運用するには費用が高く、workflow数が限られるのでDigitalOceanにホスティングする
他のクラウドサービスを使う場合はよしなに読み替えてください。
手順
- SSH の設定
- Droplet 作成
- SSH テスト
- Docker のインストール
- DNS の設定
- Droplet のポート開放
- caddy の設定
- 起動
- アップデート
以下の公式ドキュメントを参考にする。 Hosting n8n on DigitalOcean - n8n
SSH の設定
Droplet 作成時に SSH する際に必要な公開鍵をアップロードしないといけないので先に作っておく。
ssh-keygen -t rsa -b 4096 -C "digitalocean-n8n"chmod 644 ~/.ssh/digitalocean-n8n.pubchmod 600 ~/.ssh/digitalocean-n8n
Droplet 作成
DigitalOcean にいわゆるインスタンスを作成。 作業なので説明は割愛。
- アカウント作成
- Project 作成
- Droplet 作成
サイズはとりあえず Basic でメモリ 1GB くらいにしておけば不自由ない。
SSH key は作成時にここで追加。
SSH テスト&残りの設定
SSH テスト
SSH し易いように config
を設定しておく。
まずは ssh できるかどうかの確認を行う。
ip_address
の箇所は Droplet の IP アドレスを入力する。
ssh root@ip_address -i ~/.ssh/digitalocean_n8n
次にconfig
を設定し、短い記述で SSH できることを確認。
vim ~/.ssh/config# 内容確認cat ~/.ssh/configHost my-n8nHostName ip_addressUser rootPort 22IdentityFile ~/.ssh/digitalocean_n8n# 接続確認ssh ssh my-n8n
残りの設定
- SSH ユーザーの作成
- root でログインできないように変更
- ファイアーウォール設定
今回は username をagent
とする
adduser agentusermod -aG sudo agent# rootの鍵情報をそのままコピーrsync --archive --chown=agent:agent ~/.ssh /home/agentchmod 600 /home/agent/.ssh/authorized_keyschown -R agent:agent /home/agent/.ssh
# PermitRootLogin noのコメントを外すvim /etc/ssh/sshd_configservice ssh restart
ufw app listufw allow OpenSSHufw enable # => yufw status
Docker インストール
Docker すでに入っているイメージを使えばいいかもしれないが、インストールする場合は以下の公式ドキュメントに沿ってインストールする。
How To Install and Use Docker on Ubuntu 22.04 - DigitalOcean
インストールが終わったら以下で確認。
sudo systemctl status docker
DNS の設定
n8n に好きなドメインでアクセスしたい場合は DNS の A レコードを追加する。n8n.example.com
みたいなサブドメインを設定しておくとよい。
このドメインは後続の設定の際に使用する。
Droplet のポート開放
sudo ufw allow 80sudo ufw allow 443
caddy をセットアップ
設定リポジトリセットアップ
n8n の設定用のプロジェクトとして n8n-docker-caddy
というものがあるのでセットアップ。
git clone https://github.com/n8n-io/n8n-docker-caddy.gitcd n8n-docker-caddysudo docker volume create caddy_datasudo docker volume create n8n_data
環境変数を設定
DOMAIN_NAME
, SUBDOMAIN
, SSL_EMAIL
あたりを設定。
cd n8n-docker-caddyvim .envcat .env# Replace <directory-path> with the path where you created folders earlierDATA_FOLDER=/home/agent/n8n-docker-caddy# The top level domain to serve from, this should be the same as the subdomain you created above# 好きなドメインDOMAIN_NAME=example.com# The subdomain to serve fromSUBDOMAIN=n8n# DOMAIN_NAME and SUBDOMAIN combined decide where n8n will be reachable from# above example would result in: https://n8n.example.com# Optional timezone to set which gets used by Cron-Node by default# If not set New York time will be usedGENERIC_TIMEZONE=Asia/Tokyo# The email address to use for the SSL certificate creation
その他設定
vim caddy_config/Caddyfilecat caddy_config/Caddyfilen8n.example.com {reverse_proxy n8n:5678 {flush_interval -1}}
起動
sudo docker compose up -d
設定変更する場合は build し直す
sudo docker compose up -d --build
おわりに
セルフホスティング版の場合いくつか使えなくなるものもあるが、大きな影響はない。 これにより月々の運用金額を可能な限り抑えて、バックエンドの実装を不要にしたりオペレーションを自動化したりできる。