Ubuntu 26.04 に n8n を npm でインストールする手順

n8n はノードを線でつないでワークフローを組み立てるオープンソースの自動化ツールです。SaaS 版も提供されていますが、自前のサーバーに導入すればデータを手元に置いたまま無制限に実行でき、ランニングコストも抑えられます。

この記事では、Ubuntu 26.04 Server の minimal 構成に対して、Docker を使わず npm から n8n を導入する手順を解説します。Node.js のセットアップから systemd による常駐化、起動確認までを一通りカバーします。

minimal 構成は GUI を持たない CLI 環境のため、作業はすべて SSH 接続またはコンソールからのコマンド操作で進めます。


前提条件

作業を始める前に、以下の環境が整っていることを確認してください。

  • Ubuntu 26.04 Server (minimal) がインストール済みであること
  • sudo 権限を持つユーザーでログインできること
  • サーバーがインターネットに接続されていること
  • メモリは最低 1GB、推奨 2GB 以上

本記事では一般ユーザー名を ubuntu、n8n の動作用ポートを 5678(既定値)として説明します。環境に合わせて適宜読み替えてください。


1. システムを最新化する

まずパッケージインデックスを更新し、インストール済みのパッケージを最新の状態にします。

sudo apt update
sudo apt upgrade -y

minimal 構成では基本的なコマンドが入っていないことがあるため、後の手順で使うツールもこの段階で入れておきます。

sudo apt install -y curl ca-certificates gnupg build-essential

build-essential は、n8n が依存する一部のネイティブモジュールをビルドする際に必要になります。


2. Node.js をインストールする

n8n は Node.js 上で動作します。Ubuntu の標準リポジトリに含まれる Node.js はバージョンが古いことがあるため、NodeSource が提供するリポジトリを使って LTS 版を導入します。

n8n が対応している Node.js のバージョンは時期によって変わります。導入前に n8n の公式ドキュメント で対応バージョンを確認しておくと安全です。本記事では LTS 版(記事執筆時点で対応している系統)を使います。

NodeSource のセットアップスクリプトを取得して実行します。

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo bash -

続いて Node.js をインストールします。npm も同時に入ります。

sudo apt install -y nodejs

インストールが終わったら、バージョンを確認します。

node -v
npm -v

nodenpm のバージョン番号が表示されれば成功です。


3. n8n 専用ユーザーを作成する

n8n をルート権限や個人ユーザーの権限で常時動かすのはセキュリティ上望ましくありません。専用のシステムユーザーを作り、その権限で動作させます。

sudo useradd --system --create-home --shell /usr/sbin/nologin n8n

このユーザーはログインできないシステム専用ユーザーとして作成されます。ホームディレクトリは /home/n8n になり、n8n の設定ファイルや認証情報がここに保存されます。

id n8n

上記のコマンドでユーザが登録されているか確認できます


n8n をインストールする前に:Takumi Guard を導入する

n8n を npm でインストールすると、本体だけでなく多数の依存パッケージが芋づる式に取得されます。npm エコシステムでは、タイポスクワッティング(正規パッケージに似せた名前で公開する手口)や、アカウント乗っ取りによる正規パッケージへの不正コード注入といったサプライチェーン攻撃が年々増えています。インストールするパッケージ数が多いほど、こうした悪性パッケージを踏むリスクも高まります。

そこで、n8n を入れる前に Takumi Guard を導入しておきます。Takumi Guard は GMO Flatt Security が提供する、npm のサプライチェーンセキュリティを強化するレジストリプロキシです。開発環境と公開 npm レジストリの間にプロキシとして入り、npm install のたびに各パッケージをブロックリストと照合して、既知の悪性パッケージを tarball のダウンロード前に拒否します。

システム全体に適用したい場合は、以下のコマンドで設定が可能です

npm config set registry https://npm.flatt.tech

設定が反映されたか確認します。

npm config list

https://npm.flatt.tech/ と表示されれば、以降の npm install はすべて Takumi Guard を経由します。

なお、メールアドレスを登録するとダウンロード追跡や感染可能性の通知(過去にインストールしたパッケージに後からアドバイザリが出た際の通知)も利用できます。ブロック機能のみであれば登録なしで使えます。

5. n8n をインストールする

npm を使って n8n をグローバルにインストールします。

sudo npm install -g n8n

インストールには数分かかることがあります。ネイティブモジュールのビルドが走るため、ここで build-essential が役立ちます。

完了したら、コマンドが認識されるか確認します。

n8n --version

バージョン番号が表示されれば、n8n 本体のインストールは完了です。


6. 動作確認(手動起動)

systemd に登録する前に、一度手動で起動して正しく動くか確認します。専用ユーザーの権限で起動します。

sudo -u n8n -H n8n start

-H はユーザーのホームディレクトリを正しく参照させるためのオプションです。起動すると、待ち受けている URL がログに表示されます。

Editor is now accessible via:
http://localhost:5678/

minimal 構成のサーバーにはブラウザがないため、別の PC からアクセスして確認します。サーバーの IP アドレスを調べるには次のコマンドを使います。

ip a

表示された IP アドレスを使い、手元の PC のブラウザから http://<サーバーのIPアドレス>:5678/ を開きます。初回アクセス時はアカウント作成画面が表示されます。

ファイアウォール(後述)やネットワークの設定によってはアクセスできないことがあります。その場合は手順 7 のファイアウォール設定を先に済ませてください。

動作を確認できたら、ターミナルで Ctrl + C を押して n8n をいったん停止します。

エラーが表示される

以下のエラーが表示される場合があります。これは、HTTPの非暗号化通信での接続のときに表示されます(n8nは、Secure Cookieを要求しておりHTTP通信ではSecure Cookieが送信されないため)

これを解消するにはHTTPSの暗号化通信にすることで解消されます

ただし、ローカル環境でしか使わないのであれば、以下のコマンドで一時的に

sudo -u n8n -H N8N_SECURE_COOKIE=false n8n start

7. systemd サービスとして常駐化する

手動起動のままだと、SSH を切断したりサーバーを再起動したりすると n8n が止まってしまいます。systemd に登録して、バックグラウンドで常時稼働し、再起動後も自動で立ち上がるようにします。

サービス定義ファイルを作成します。

sudo nano /etc/systemd/system/n8n.service

エディタが開いたら、以下の内容を貼り付けます。

[Unit]
Description=n8n workflow automation
After=network.target

[Service]
Type=simple
User=n8n
Environment=N8N_HOST=0.0.0.0
Environment=N8N_PORT=5678
Environment=N8N_PROTOCOL=http
Environment=NODE_ENV=production
ExecStart=/usr/bin/n8n start
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

ExecStart のパスは環境によって異なる場合があります。次のコマンドで実際のパスを確認し、必要なら書き換えてください。

which n8n

保存してエディタを閉じます(nano の場合は Ctrl + OEnterCtrl + X)。

設定を反映し、サービスを有効化して起動します。

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n

状態を確認します。

sudo systemctl status n8n

active (running) と表示されていれば、常駐化に成功しています。

ログをリアルタイムで確認したい場合は次のコマンドを使います。

sudo journalctl -u n8n -f

8. ファイアウォールの設定

外部からアクセスできるようにするため、使用するポートを開放します。Ubuntu では ufw が標準で利用できます。

sudo ufw allow 22/tcp
sudo ufw allow 5678/tcp
sudo ufw enable

最初に SSH のポートを開けておかないと、ufw 有効化後に SSH 接続ごと締め出されてしまうため、OpenSSH の許可を忘れないようにしてください。

設定状況を確認します。

sudo ufw status

なお、5678 ポートを直接インターネットに公開するのはセキュリティ上推奨されません。本番運用ではこのポートを外部に開けず、次の手順のリバースプロキシ経由でアクセスするのが安全です。検証目的であればこのまま進めてかまいません。


9. (任意)リバースプロキシと HTTPS

本番運用を想定する場合は、Nginx などのリバースプロキシを前段に置き、ドメイン経由の HTTPS 接続にすることを推奨します。これにより通信が暗号化され、ポート番号を意識せずにアクセスできるようになります。

Nginx をインストールします。

sudo apt install -y nginx

サイト設定ファイルを作成します。

sudo nano /etc/nginx/sites-available/n8n

以下を貼り付け、n8n.example.com を自分のドメインに置き換えます。

server {
    listen 80;
    server_name n8n.example.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

UpgradeConnection のヘッダーは、n8n が使う WebSocket 通信を通すために必要です。

設定を有効化して Nginx を再読み込みします。

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -t で構文エラーがないことを確認してから reload してください。

続いて Let’s Encrypt で証明書を取得し、HTTPS 化します。

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.example.com

対話形式でメールアドレスの入力などを求められます。完了すると Nginx の設定が自動で書き換えられ、HTTPS でアクセスできるようになります。

HTTPS 化したあとは、n8n 側にも正しい URL を伝える必要があります。systemd のサービスファイルを編集し、環境変数を追加します。

Environment=N8N_PROTOCOL=https
Environment=N8N_HOST=n8n.example.com
Environment=WEBHOOK_URL=https://n8n.example.com/

編集後はサービスを再起動します。

sudo systemctl daemon-reload
sudo systemctl restart n8n

最後に、ufw で開けていた 5678 ポートは外部公開が不要になるため閉じておきます。

sudo ufw delete allow 5678/tcp
sudo ufw allow 'Nginx Full'

10. アップデートとメンテナンス

n8n は更新が頻繁です。新しいバージョンに上げるには、サービスを止めてから npm で更新し、再度起動します。

sudo systemctl stop n8n
sudo npm update -g n8n
sudo systemctl start n8n

アップデート前には、設定や認証情報が保存されている /home/n8n/.n8n ディレクトリをバックアップしておくと安心です。

sudo cp -r /home/n8n/.n8n /home/n8n/.n8n.backup

まとめ

Ubuntu 26.04 Server (minimal) への n8n 導入手順を、Node.js のセットアップから systemd による常駐化、HTTPS 化まで解説しました。

Docker を使わない npm 構成は、システムの仕組みが見えやすく、リソースの消費も抑えられるのが利点です。一方で Node.js のバージョン管理やアップデートは自分で面倒を見る必要があります。長期運用ではこの点を意識しておくとよいでしょう。

導入後はワークフローのバックアップ体制を整え、定期的なアップデートを習慣にしておくことをおすすめします。

コメント

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