Oracle Cloud Infrastructure(OCI)で、インターネットから接続可能なn8nのサーバを構築します。
OCIサーバの構築
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のインストール方法は色々なサイトで紹介されているので、どこを参考にしてもよいです。ここでは先ほど紹介したサイトのコマンドを引用します。
$ 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のインストール
Caddyは、httpsの通信をn8nに転送(リバースプロキシ)するためのWebサーバです。Caddy以外にも、nginxとか、公式サイトにもあるTraefikをDockerで起動する方法とかいくつか選択肢はあるようですが、Caddy以外は数時間苦戦してもうまくいかなかったので、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
構成ファイルの内容は以下のとおり。restart: always
とenvironment:
は、冒頭に記載したサイトから変更しています。
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も対象にしてたからで、対象のサブドメインを除外したらうまくいきました。