メインコンテンツへスキップ
  1. ブログ/

【初心者向け】n8n を Nginx 経由でセルフホストする方法(AlmaLinux 10)

·
AlmaLinux N8n Nginx
目次

【初心者向け】n8n を Nginx 経由でセルフホストする方法(AlmaLinux 10)
【初心者向け】n8n を Nginx 経由でセルフホストする方法(AlmaLinux 10)

本手順でご紹介する n8n は最新の 2.x 系となっており CVE-2025-6861 の影響は受けないバージョンとなっております。

初めに
#

n8n は、業務自動化やワークフロー構築を柔軟に実現できる強力なオープンソースツールです。

近年では、LLMと外部ツールを繋ぐAIエージェントの実装基盤として注目を集めています。

公式が提供するクラウド版 n8n は、環境構築の手間が不要で手軽に利用できる一方、サブスクリプション費用が発生します。

そのため、学習目的での利用や個人開発、小規模な検証用途においては、コスト面で導入のハードルが高いのが現状です。

一方、セルフホスト版 n8n であれば、サーバーの用意は必要となるものの、ソフトウェア自体は無償で利用でき、実行回数やワークフロー数に制限はありません。

また、社内ネットワーク内でのクローズドな運用が可能なことから、社内システム連携や内部業務向けツールとして、クラウドサービスを利用しにくい環境にも適しています。

本記事では、AlmaLinux 10 環境で Node.js(npm)を用いて n8n をインストールし、systemd による自動起動と Nginx を使った HTTPS 対応のセルフホスト構成を解説します。

n8nとは?
#

n8n は業務プロセスや各種サービス連携を視覚的に構築できるオープンソースのワークフロー自動化ツールです。

ノーコードやローコードで扱うことができプログラミングの専門知識がない初心者でも、API 連携や定型処理の自動化を実現する事ができます。

近年では、LLM と外部ツールを組み合わせたAIエージェントの実装基盤としても活用が進んでおり注目を集めています。

n8n はセルフホストに対応しており、オンプレミス環境や社内ネットワーク内に閉じた構成で運用することが可能です。

n8nのインストール形式
#

セルフホスト版 n8n のインストール方法としては、主に以下の2通りが存在します。

  • Docker を利用する方法
  • Node.jsnpm を用いてインストールする方法

Docker を利用する方法は、環境差異を吸収しやすく複数環境への展開や将来的なスケールを見据えた構成に適しています。

一方で、Node.js を用いたインストール方法では、通常の Linux アプリケーションとして扱うことができます。

そのため、シンプルな構成で安定した運用を行いたい場合や、Linux の基本的な運用に沿って管理したいケースなどに適しています。

本記事では、後者である Node.jsnpm を利用したインストール方法を解説します。

Node.jsの導入
#

要件と事前確認
#

n8nNode.js 上で動作するアプリケーションとなっており、バージョン要件は以下の通りとなります。

  • Node.js 20.19 以上
  • Node.js 24.x 系まで対応

初めに以下のコマンドを実行し AlmaLinux 標準リポジトリで提供されている Node.js のバージョンを確認してください。

dnf info nodejs |fgrep "Version"

このコマンドにより、インストール可能な Node.js のバージョンが表示されます。

AlmaLinux 10環境では、以下のバージョンが提供されておりました。

Version      : 22.19.0

そのため、標準リポジトリの Node.js をそのまま利用することが可能となっております。

一方で、環境によっては要件を満たさないバージョンしか利用できない場合も考えられます。

そのような場合は、外部リポジトリを有効化してインストールする、あるいは独自に Node.js を導入する といった回避策を検討する必要があります。

インストール
#

次に以下のコマンドを実行しインストールを進めてください。

dnf install nodejs

実行すると、以下のようにインストールパッケージの確認画面が表示されます。

dnf install nodejs
Last metadata expiration check: 2:10:47 ago on Tue 23 Dec 2025 02:18:31 PM JST.
Dependencies resolved.
============================================================================================================================================
 Package                           Architecture            Version                                         Repository                  Size
============================================================================================================================================
Installing:
 nodejs                            x86_64                  1:22.19.0-2.el10_0                              appstream                   50 k
Installing dependencies:
 libuv                             x86_64                  1:1.51.0-1.el10_0                               appstream                  262 k
 nodejs-libs                       x86_64                  1:22.19.0-2.el10_0                              appstream                   20 M
Installing weak dependencies:
 nodejs-docs                       noarch                  1:22.19.0-2.el10_0                              appstream                  8.9 M
 nodejs-full-i18n                  x86_64                  1:22.19.0-2.el10_0                              appstream                  8.6 M
 nodejs-npm                        x86_64                  1:10.9.3-1.22.19.0.2.el10_0                     appstream                  2.0 M

Transaction Summary
============================================================================================================================================
Install  6 Packages

Total download size: 40 M
Installed size: 215 M
Is this ok [y/N]:

内容を確認し問題なければ y を入力してインストールを進めてください。

インストールが完了すると、次のメッセージが表示されます。

Complete!

以下のコマンドを実行することで、バージョンを確認することができます。

node -v
npm -v

以上で Node.js の導入は完了となります。

n8nの導入
#

Node.js のインストールが完了したら、次に npm を利用して n8n を導入します。

n8nnpm パッケージとして提供されているため、特別なビルド作業は不要となります。

以下のコマンドを実行しインストールを進めてください。

npm install -g n8n

インストールが完了すると、次のメッセージが表示されます。

added 1815 packages in 4m

241 packages are looking for funding
  run `npm fund` for details

今回は約4分程度でインストールが完了しました。

表示される所要時間やパッケージ数は、サーバーの性能やネットワーク環境により前後する場合がございます。

正しくインストールされていることを確認するため、以下のコマンドを実行してください。

n8n --version

以下のように n8n のバージョン情報が表示されれば、インストールは正常に完了しています。

2.1.2

インストールされた n8n の実行コマンドおよび本体ファイルは、以下のシステム領域に配置されています。

/
├─ usr/
│  └─ local/
│     ├─ bin/
│     │  └─ n8n                ← 実行コマンド
│     │
│     └─ lib/
│        └─ node_modules/
│           └─ n8n/            ← システム本体

専用ユーザーの作成
#

今回はセキュリティおよび運用管理の観点から管理者(root)ではなく専用ユーザーを作成し実行する構成とします。

n8n は実行ユーザーのホームディレクトリ配下に設定やワークフローなどのデータを保存するため、ホームディレクトリは必要となります。

一方で SSH 接続は不要なため、ログインシェルは無効化します。

以下のコマンドを実行し、n8n ユーザーを作成してください。

useradd -r -m -s /sbin/nologin n8n

この設定により、n8n は ログイン不可のサービス実行専用ユーザーとして、安全に運用することができます。

systemdサービスファイルの作成
#

次に n8n をサーバー起動時に自動で立ち上げるため、systemd のサービスファイル作成を進めていきます。

初めに認証情報(API キーやトークン等)を安全に保存するための暗号化鍵を作成します。

以下のコマンドを実行しランダムな文字列を生成してください。

head -c 32 /dev/urandom | base64

今回は以下の結果となりました。

この文字列は後ほどサービスファイルを作成する際に利用します。

ifxoq28NxSHi6eMuhiolGihIfo/ASk2ULLl+eKzZxrc=

次に以下のコマンドを実行し、ファイルを作成してください。

vi /etc/systemd/system/n8n.service

エディタが開いたら、以下の内容をファイルに書き込んで保存してください。

[Unit]
Description=n8n Workflow Automation
After=network.target

[Service]
Type=simple
User=n8n
Group=n8n
ExecStart=/usr/local/bin/n8n
Restart=always
RestartSec=10
Environment="HOME=/home/n8n"
Environment=NODE_ENV=production
Environment=WEBHOOK_URL=https://<サーバーのIPアドレス>/
Environment=N8N_PROTOCOL=https
Environment=N8N_PORT=5678
Environment=N8N_PROXY_HOPS=1
Environment=N8N_ENCRYPTION_KEY=<先ほど生成した暗号化鍵>

[Install]
WantedBy=multi-user.target

それぞれの設定内容は以下の通りとなります。

設定項目 説明
Type=simple ExecStart のコマンドをそのまま起動するように指定
User=n8n n8n 専用ユーザーで実行
Group=n8n 実行グループを n8n に指定
ExecStart=/usr/local/bin/n8n n8n の実行コマンド
Restart=always 終了時に自動再起動
RestartSec=10 再起動までの待機時間
"HOME=/home/n8n" ホームディレクトリを指定
NODE_ENV=production 本番モードで実行
WEBHOOK_URL=https://<サーバーのIPアドレス>/ Webhook の公開 URL を指定
N8N_PROTOCOL=https n8n が HTTPS 環境で動作していることを明示
N8N_PORT=5678 n8n が 5678 ポートで動作していることを明示
N8N_PROXY_HOPS=1 リバースプロキシ(Nginx)を 1 段挟んでいることを指定
N8N_ENCRYPTION_KEY=<先ほど生成した暗号化鍵> データベース内の認証情報を暗号化するために使用する暗号化文字列を指定

以上で systemd サービスの登録は完了となります。

n8n単体では利用できない理由
#

n8n は、ログインセッションの安全性を高めるために Secure Cookie を使用しています。

そのため、原則として SSL(HTTPS)通信が必須となります。

SSL が有効化されていない状態でアクセスした場合、以下のような警告画面が表示されます。

n8nのSSL通信必須に関する警告画面
n8nのSSL通信必須に関する警告画面

この問題への対策として本構成では、 Nginx をリバースプロキシとして利用し、HTTPS 接続を行います。

Nginxの導入
#

インストール
#

以下のコマンドを実行し、Nginx をインストールしてください。

dnf install nginx

以下のコマンドを実行することで、パッケージの導入有無を確認することができます。

rpm -qa |grep "nginx"
nginx-filesystem-1.26.3-1.el10.noarch
nginx-core-1.26.3-1.el10.x86_64
nginx-1.26.3-1.el10.x86_64

自己証明書の作成
#

今回は動作確認および検証用途を想定し、自己署名証明書を使用します。

本番環境で運用する場合は、Let's Encrypt や各種認証局が発行する正式な SSL 証明書を利用してください。

初めに証明書を配置するディレクトリを作成してください。

mkdir -p /etc/nginx/ssl

次に以下のコマンドを実行し、証明書の作成を進めてください。

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/n8n.key -out /etc/nginx/ssl/n8n.crt

コマンドを実行すると対話形式での作成が始まります。

以下の内容を入力し作成を進めてください。

項目 内容 今回の入力
Country Name (2 letter code) 国コード(ISO 3166-1) 未入力
State or Province Name 都道府県・州名 未入力
Locality Name 市区町村名 未入力
Organization Name 組織名 未入力
Organizational Unit Name 部署名 未入力
Common Name (CN) ホスト名または IP アドレス サーバーの IP アドレス
Email Address 管理者メールアドレス 未入力

作成が完了すると、証明書および秘密鍵が /etc/nginx/ssl 配下に作成されます。

$ ls -al /etc/nginx/ssl
total 12
drwxr-xr-x. 2 root root   36 Dec 23 19:28 .
drwxr-xr-x. 5 root root 4096 Dec 23 19:22 ..
-rw-r--r--. 1 root root 1302 Dec 23 19:28 n8n.crt
-rw-------. 1 root root 1708 Dec 23 19:23 n8n.key

リバースプロキシ設定
#

次に作成した自己署名証明書を使用し、Nginx をリバースプロキシとして設定します。

以下のコマンドを実行しファイルを作成してください

vi /etc/nginx/conf.d/n8n.conf

続いて、作成したファイルに以下の内容を記述してください。

server {
    listen 443 ssl;
    server_name _;

    ssl_certificate     /etc/nginx/ssl/n8n.crt;
    ssl_certificate_key /etc/nginx/ssl/n8n.key;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;

        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-Host $host;
        proxy_set_header X-Forwarded-Proto https;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        client_max_body_size 25m;
    }
}

本構成ではホスト名を使用しないため、server_name には _ を指定し、すべてのホスト名および IP アドレスにマッチする設定としています。

最後にシンタックスチェックを実行し記述した構文に問題がないことを確認してください。

nginx -t

SELinux有効時の注意点
#

AlmaLinux では、デフォルトで SELinux が有効になっています。

その場合、Nginxn8n に接続する際に SELinux により通信がブロックされ以下のようなエラーが発生します。

502 Bad Gateway

この問題を解消するため以下のコマンドを実行しネットワーク接続を許可してください。

setsebool -P httpd_can_network_connect 1

なお、SELinux が 無効な環境では本設定は不要となりますのでスキップしてください。

ファイアウォールの設定
#

本構成では、n8nNginx の背後で動作し、外部からのアクセスは HTTPS(TCP ポート 443)経由で行います。

そのため、n8n が内部で使用する TCP ポート 5678 を外部に公開する必要はありません。

なお、本手順はサーバーのファイアウォール管理ツールとして firewalld が稼働している環境を前提としています。

利用環境に合わせて手順を調整し進めてください。

firewalld を利用している場合は以下のコマンドを実行し 443 ポートを解放してください。

firewall-cmd --add-service=https --permanent

実行結果が success と表示されれば成功となります。

変更した設定を反映させるため以下のコマンドを実行しリロードを行ってください。

firewall-cmd --reload

こちらも実行結果が success と表示されれば成功となります。

以上でファイアウォールの設定は完了となります。

サービスの起動
#

各種設定が完了したら、n8nNginx を起動する事ができます。

以下のコマンドを順に実行しそれぞれのサービスの起動と自動起動を有効化してください。

systemctl enable --now n8n
systemctl enable --now nginx

次に以下のコマンドを順に実行し、サービスの起動確認を行ってください。

systemctl is-active n8n
systemctl is-active nginx

いずれも以下のように表示されれば、サービスが正常に稼働しています。

active

failed となっている場合は、設定ファイルの記述ミスや環境変数の不足などが考えられます。

管理画面へアクセス
#

すべての設定が完了したら、ブラウザから n8n の管理画面へアクセスを行なってください。

https://<サーバーのIPアドレス>/

アクセスを行うと以下のように初期セットアップ画面が表示されます。

n8nの初期セットアップ画面(管理者アカウントの作成)
n8nの初期セットアップ画面(管理者アカウントの作成)

以下の項目を入力して、管理者アカウントを作成してください。

なおパスワードは8文字以上とし数字1文字以上、大文字1文字以上を含める必要があります。

項目 入力内容
Email ログインに使用するメールアドレス
First Name 名前
Last Name 苗字
Password パスワード

管理者アカウントの作成が完了し、初めてログインすると、利用状況に関するアンケートが表示されます。

これらはすべて任意となっており空白で提出する事ができます。

次に機能アンロックのためのメールアドレス登録画面が表示されます。

これらも必須ではなく、画面下部にある 「Skip」を選択する事で登録せずに利用を開始することが可能です。

すべてのステップが完了すると 以下のように n8n のメイン画面であるダッシュボードが表示されます。

n8nのメインダッシュボード画面
n8nのメインダッシュボード画面

以上で構築は完了となります。

関連記事

【簡単ガイド】AlmaLinuxでNginxをインストールする方法
Linux AlmaLinux Nginx Webサーバー
【CVE-2025-68613】n8n にてリモート コード実行に関する脆弱性が公開されました
AlmaLinux N8n
【初心者向け】AlmaLinux 10 で Knot DNS 権威サーバーを構築する方法
DNS AlmaLinux Linux
【超入門】AlmaLinux 10でChrootによるSSHユーザー隔離環境を構築する方法
セキュリティ Linux AlmaLinux Chroot
【初心者向け】timeoutコマンド入門|Linuxでプロセスの実行時間を制限する
Timeout AlmaLinux Linux
【入門】AlmaLinux 9でClamAVを導入し、定期スキャンを自動設定する方法
セキュリティ AlmaLinux ClamAV