n8nの公開サーバをOracle Cloudの無料枠でつくる

忘れないうちにメモしておく。

OCIサーバの構築

基本的にn8nの構築まで以下のサイトに書いてあることを参考にすればだいたいうまくいく。

Setting up a free n8n server on Oracle Cloud
An updated guide to setting up a free n8n instance on Oracle Cloud.

なので、ここではポイントだけ書いておく。

  • 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と不要な通信をしないようにする設定で、以下のサイト(冒頭と同じ人)を参考にした。

n8n: Disable tracking
Like most other products out there, n8n uses telemetry to track and analyse user behaviour. Here's how you can prevent this.

次に環境設定を編集する。

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(IFTTT,Zappierの代替)をセルフホストして自動化を快適にする - Qiita
はじめにこんにちは。みなさんZappierやIFTTTを使ったノーコード自動化は好きですか?僕は業務の効率化や自動化が好きなので、こういったツールは今まで興味を持っていましたが、料金的なところで二の足を踏んでいました。。。最...

ここまでくればn8nを起動できるはずなので、以下のコマンドを実行する。

docker compose up -d

Caddyの設定

インターネットからアクセスできるようにCaddyの設定を変更する。

sudo nano /etc/caddy/Caddyfile

うちのサイトはCloudflareのSSL証明書を使ってるので、それにあわせた設定にする。設定は以下のサイトを参考にした。

How to use Caddy with Cloudflare's SSL settings
Cloudflare is one of the most used reverse proxies on the internet. There are a number of different ways to configure your SSL and TLS settings on Cloudflare as...
{
        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も対象にしてたからで、対象のサブドメインを除外したらうまくいった。

タイトルとURLをコピーしました