忘れないうちにメモしておく。
OCIサーバの構築
基本的にn8nの構築まで以下のサイトに書いてあることを参考にすればだいたいうまくいく。

なので、ここではポイントだけ書いておく。
- OSはCanonical Ubuntu 22.04 with the latest build dateを選択
- 東京リージョンの場合「VM.Standard.A1.Flex」は空いてないので「VM.Standard.E2.1.Micro」で妥協すること
- インスタンス構築後、パブリックIPを予約して対象インスタンスに付与する
- 80,443ポートを許可を忘れないこと
Dockerのインストール
n8nはDockerのコンテナで動かす。なのでDockerをインストールする。
Dockerのインストール方法はいろんなサイトで紹介されてるので、どこを参考にしてもよいと思うけど、先ほどのリンク先のコマンドを貼っておく。
sudo apt install ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
インストール後に以下のコマンドでsudoなしでdockerコマンド打てるようにしておく。
sudo usermod -aG docker $USER
Caddyのインストール
httpsの通信をn8nに転送するためのWebサーバ(リバースプロキシ)。Caddy以外にも、nginxとか、公式サイトにもあるTraefikをDockerで起動する方法とかいくつか選択肢はあるみたいだけど、Caddy以外は数時間苦戦してどれもうまくいかなかった。
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
iptablesのアンインストール
OCIのUbuntuではiptablesがufwの役割を果たしてるようで、はっきり言って邪魔なので削除する。終わったらついでに再起動する。
sudo apt remove iptables-persistent sudo reboot
n8nのインストール(Docker)
n8n用のフォルダを作成して、Docker構成ファイルを作成する。
cd ~ mkdir n8n cd n8n nano docker-compose.yml
構成ファイルの内容は以下のとおり。太字は、冒頭に記載したサイトから変更している。
version: '2' services: n8n: image: n8nio/n8n:latest restart: always ports: - 5678:5678 environment: - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} - N8N_DIAGNOSTICS_ENABLED=false - N8N_VERSION_NOTIFICATIONS_ENABLED=false - N8N_TEMPLATES_ENABLED=false - EXTERNAL_FRONTEND_HOOKS_URLS= - N8N_DIAGNOSTICS_CONFIG_FRONTEND= - N8N_DIAGNOSTICS_CONFIG_BACKEND= - N8N_ONBOARDING_FLOW_DISABLED=true volumes: - ./n8n_data:/home/node/.n8n
「- N8N_DIAGNOSTICS_ENABLED=false」以下の設定は、今回構築したサーバがn8n.io/n8n.cloudと不要な通信をしないようにする設定で、以下のサイト(冒頭と同じ人)を参考にした。

次に環境設定を編集する。
nano .env
DOMAIN_NAME=yusukesakai.com SUBDOMAIN=n8n N8N_LOG_OUTPUT=file EXECUTIONS_TIMEOUT=600 EXECUTIONS_DATA_MAX_AGE=240 GENERIC_TIMEZONE=Asia/Tokyo
パラメータは以下のサイトを参考にした。

ここまでくればn8nを起動できるはずなので、以下のコマンドを実行する。
docker compose up -d
Caddyの設定
インターネットからアクセスできるようにCaddyの設定を変更する。
sudo nano /etc/caddy/Caddyfile
うちのサイトはCloudflareのSSL証明書を使ってるので、それにあわせた設定にする。設定は以下のサイトを参考にした。
{ ocsp_stapling off servers { strict_sni_host } } n8n.yusukesakai.com { root * /usr/share/caddy file_server reverse_proxy localhost:5678 { flush_interval -1 transport http { compression off } } tls /etc/ssl/certs/yusukesakai.com.pem /etc/ssl/private/yusukesakai.com.key { client_auth { mode require_and_verify trusted_ca_cert_file /etc/ssl/certs/origin-pull-ca.pem } } }
ここは地味にハマったのでポイントをいくつか書き残しておく。
- 設定のインデントは半角スペースではなくタブを使う(でないとエラーになる)
- 証明書の格納先に適切な権限を設定する(でないとエラーになる)
以下のコマンドで設定ファイルに問題がないか検証する。
sudo caddy validate --config /etc/caddy/Caddyfile
問題なければサービスを再起動する。
sudo systemctl restart caddy
うまくいってればこれで最初のユーザ作成画面が表示されるはず。お疲れさまでした。
補足(Cloudflare)
n8nでいざ新規ワークフローを作成しようと思ったら、画面の右上に「Connection lost」と表示されて作成できなかった。原因はCloudflareのキャッシュ設定でn8nも対象にしてたからで、対象のサブドメインを除外したらうまくいった。