n8nセルフホスティング完全ガイド

n8n

日々の業務で「この作業、毎回同じことをしていて面倒だな」と感じることはありませんか?

そんなあなたにぴったりのツールが n8n(エヌエイトエヌ) です。n8nは、ノーコードまたはローコードでワークフローを自動化できる強力なオープンソースツールです。たとえば、次のようなことが簡単にできます。

  • 毎朝特定の時間にGoogleスプレッドシートの内容をSlackに通知
  • フォームの入力内容を受け取って、自動でメール返信
  • 新しいファイルがDropboxにアップロードされたら、別のフォルダにコピーして通知

このようにたくさんのアプリを簡単に紐付け、自分が望むことを自動化させることができます。

この記事ではn8nのセルフホスティングするまでの流れを詳しく解説していきます。

目次

n8nの使い方

n8nには以下の2つの使い方があります。

方法説明
クラウド版(有料)n8n公式が提供するホスティングサービス。すぐに使えるが月額費用がかかる。
セルフホスティング自分でサーバーを用意してn8nを動かす方法。無料で自由度が高い。

クラウド版の場合は、難しい設定不要ですぐに使うことができますが、月に約4000円ほどかかります。

それに対して、自分でサーバーを用意して使うセルフホスティングの場合はサーバー代だけで使うことが可能です。
しかし、サーバー内にn8nを自分でインストールしたりなど、一部専門的な知識が必要になるため、挫折してしまう人もいるかもしれません。

そこで本記事ではn8nのセルフホスティングのやり方を詳しく解説していきます。

必要なものを用意しよう

まずはセルフホスティングに必要なものを用意しましょう。

セルフホスティングとはインターネット上に自分のn8nを公開するということです。そのため、VPSサーバーを用意する必要があります。一番手軽なのが、レンタルサーバーを使うことです。

おすすめVPSは以下の通りです。

サービス名月額料金(目安)特徴
XServer VPS2GBプラン(約1,000円〜)処理性能能力が高い。
さくらのVPS1GBプラン(約800円〜)地域が選べる(東京・大阪など)
ConoHa VPS1GBプラン(約700円〜)直感的で使いやすい
シンVPS1GBプラン(325円)価格がリーズナブル

サーバーにインストールするOSはUbuntuが良いでしょう。

次にssh接続をするための設定をおこないましょう。
ターミナルからVPSサーバーにssh接続ができれば準備OKです。

今回の推奨構成

今回は以下のように初心者でも構成しやしく、メンテナンスも楽な構成にしています。

  • OS:Ubuntu
  • Docker + Docker Compose
  • n8n本体(Dockerコンテナで動かす)
  • (任意)Nginx(独自ドメインやHTTPS対応する人は必要)

図で表すと以下のような感じです。

[あなたのPC]
  ↓ SSHで接続
[VPSサーバー(Ubuntu)]
  ├─ Docker
  │   └─ n8n(ポート5678)
  └─ Nginx(https://~)※任意

サーバーにn8nをインストールしよう

それではサーバーにn8nをインストールしていきます。
ssh接続をしてVPSサーバーに入ります。

パッケージの更新

まずは以下のコマンドでシステムを最新の状態に更新します。

sudo apt update && sudo apt upgrade -y

途中で「Y/N」と聞かれたら、Y を入力して進みます。

DockerとDocker Composeのインストール

次に以下のコマンドでdockerをインストールする準備をします。

curl -fsSL https://get.docker.com -o get-docker.sh

以下のコマンドでDockerをインストールします。

sudo sh get-docker.sh

次にDocker Composeをインストールします。

sudo apt install docker-compose -y

n8n用の作業ディレクトリを作成

次にn8nをインストールするディレクトリを作成します。
今回は「n8n-docker」という名前で作成しますが、名前は自由につけていただいて問題ありません。

mkdir ~/n8n-docker

作成したディレクトリに移動します。

cd ~/n8n-docker

必要なファイルの作成

ここからは、docker-compose.yml という設定ファイルを作成し、n8nを実際にサーバー上で起動させていきます。
以下のコマンドでファイルを作成し、編集します。

nano docker-compose.yml

するとファイルの編集画面が表示されるので、以下の内容を貼り付けます。
赤字の部分はご自身のVSPのIPアドレスに差し替えてください。

version: "3.8"

services:
  n8n:
    image: n8nio/n8n
    restart: always
    user: root
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=password
      - N8N_HOST=123.45.67.89
      - N8N_PROTOCOL=http
      - N8N_PORT=5678
      - WEBHOOK_URL=http://123.45.67.89:5678
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_RUNNERS_ENABLED=true
      - TZ=Asia/Tokyo
    volumes:
      - ./n8n_data:/home/node/.n8n

n8nの起動

そして以下のコマンドでn8nを起動します。

docker-compose up -d

起動後、以下のコマンドで状態を確認できます。

docker-compose ps

コンテナがUpになっていればOKです。

Webブラウザからアクセス

以下のURLにアクセスして、n8nの画面が表示されるか確認します。

http://<ご自身のVPSのIPアドレス>:5678

例えばVPSのIPアドレスが123.45.67.89であったら以下のようになります。

http://123.45.67.89:5678

アクセスすると以下のような画面に遷移します。

もし表示されない場合はVPSサーバーの5678ポートが開いていない可能性があるので、以下のコマンドを入力しポート5678をファイアウォールで許可しましょう。

sudo ufw allow 5678

また、VPSサーバーの管理画面からも解放するポート5678を追加しましょう。

n8nはデフォルトだとhttps接続しかできないため、上のような表示になります。
アクセスするにはhttpでも接続できるようにするため、docker-compose.ymlに以下のコードを追加します。

N8N_SECURE_COOKIE=false

ファイル全体のコードは以下のようになります。
赤字の部分はご自身のVSPのIPアドレスに差し替えてください。

version: "3.8"

services:
  n8n:
    image: n8nio/n8n
    restart: always
    user: root
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=password
      - N8N_HOST=123.45.67.89
      - N8N_PROTOCOL=http
      - N8N_PORT=5678
      - WEBHOOK_URL=http://123.45.67.89:5678
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_RUNNERS_ENABLED=true
      - N8N_SECURE_COOKIE=false
      - TZ=Asia/Tokyo
    volumes:
      - ./n8n_data:/home/node/.n8n

コードの追加後、以下のコマンド順番に入力し、Dockerを再起動させます。

docker compose down

docker compose up -d

再びアクセスし、以下の画面が表示されればセルフホスティング成功です。

独自ドメインを取得し、HTTPSに対応させよう

これでブラウザからn8nを使うことができるようになりましたが、ログインする際、パスワードなどの重要な情報が通信中に見えてしまうのは大きなリスクです。
これを防ぐには、通信を暗号化する HTTPS化(暗号化通信) が必要です。

今回は、Nginx + Let’s Encrypt を使ったシンプルな方法をご紹介します。

ドメインの設定

現在はVSPのIPアドレスを入力していますが、本格的に使うのであれば独自ドメインを取得し設定するのが良いでしょう。
まず、「お名前.com」や「ムームードメイン」などのサービスで、あなた専用のWebアドレス(ドメイン)を購入します。
例: example.com

※これからは独自ドメインの例としてexample.comを使います。
このアドレスはこれ以降赤字で表示しているので、ご自身の独自ドメインに都度差し替えてください。

次に、購入したドメインが、あなたのVPSサーバーにアクセスできるように、独自ドメインとVPSのIPアドレスをつなぐ作業を行います。
そのためには、ドメインを取得したサービスで「ドメインの設定画面(DNS設定画面)」の「DNSレコード設定」を開いて、以下のようにレコードを設定します。

・ TYPE: A
・ VALUE(値): ご自身のVPSのIPアドレス(例:123.45.67.89
(この二つ以外は空欄でも大丈夫です。)

Aレコードとは「このドメインを使ったアクセスは、このIPアドレスに転送してください」という意味の設定です。
設定を反映するまでに数分〜数時間かかることがあります。

この作業を行うことで、独自ドメインでアクセスしても、IPアドレス(http://123.45.67.89:5678でアクセスした時と同じように、n8nの画面が表示されるようになります。

HTTPS通信をする準備をしよう

HTTPS通信をするにはWebサーバーを用意する必要があります。
今回は「Nginx(エンジンエックス)」を使います。

Nginxとは、Webサイトをインターネット上で表示するためのソフトウェアで、主に以下の3つの働きをします。

1. Webサーバー
 Webブラウザ(ChromeやSafariなど)からのアクセスに対して、HTMLファイルや画像などを返します。
2. リーバスプロキシ
 ユーザーからのリクエストを別のサーバーに転送して、結果を返します。
3. HTTPS対応
 SSL証明書を使って安全な通信を実現します。

Nginxのインストール

まずは以下のコマンドでNginxをインストールします。

apt install nginx -y

インストール後、Nginxを起動・有効化します。

systemctl start nginx
systemctl enable nginx

リバースプロキシの設定

次にNginxでリバースプロキシ設定をします。

リバースプロキシ設定とはクライアント(ユーザー)からのリクエストを、別のサーバー(バックエンドサーバー)に中継(転送)し、そのレスポンスをクライアントに返す設定のことを言います。

これは以下のことを行うための設定です。

1. ポート変換
 n8nは5678ポートで動いていますが、外部からは80ポートでアクセスさせたい。

2. HTTPS対応
 n8nはデフォルトだとHTTPSでのみ接続が可能です。そのため、HTTPSで転送させるように変更します。

まずは、以下のコマンドで設定ファイルを作成しましょう。

nano /etc/nginx/conf.d/n8n.conf

そして以下のコードを入力しましょう。
赤字の部分はご自身の独自ドメインに差し替えてください。

server {
  listen 80;
  server_name example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name example.com;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;

  location / {
    proxy_pass http://localhost:5678;
    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;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

そして以下のコマンドでNginxを再起動します。

systemctl reload nginx

SSL証明書の取得

HTTPSは通信内容を第三者に盗聴されたり改ざんされたりしないよう、暗号化通信を行います。そのために必要なのがSSL証明書です。

SSL証明書は、「このドメインは本当にこのサーバーが管理しているものですよ」ということを証明するものです。

ユーザーのブラウザは、接続先が本物のWebサイトかどうかをSSL証明書でチェックしています。これにより、なりすまし(偽サイト)を防ぐことができます。

SSL証明書には有料と無料があります。有料SSL証明書は、セキュリティのレベルやサポート体制、信頼性の面でより充実したサービスを提供しています。今回は無料でSSL証明書を発行できる「Let’s Encrypt」を使います。

まずLet’s Encryptのツールである「Certbot(サートボット)」を使って証明書を取得します。
以下のコマンドでCertbotをインストールします。

apt install certbot python3-certbot-nginx -y

次に以下のコマンドで証明書を取得します。
※赤字の部分はご自身の独自ドメインに差し替えてください。

certbot –nginx -d example.com

実行後、以下のようなログが含まれていれば成功です。

Congratulations! You have successfully enabled HTTPS on https://example.com

失敗している場合は、DNSレコード設定がうまくいっていない可能性があります。
以下のコマンドを実行し、ご自身のVPSのIPアドレスが返ってくるか確認をしましょう。
※赤字の部分はご自身の独自ドメインに差し替えてください。

dig +short example.com

設定したIPアドレスが返ってこない場合は、少し時間を空けて再度試してみましょう。

証明書が発行されると、先ほどの/etc/nginx/conf.d/n8n.confファイルに以下のコードが追記されているはずです。

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

これで以下のようにHTTPSの安全なURLでn8nにアクセスできるようになります。
赤字の部分はご自身の独自ドメインに差し替えてアクセスしてください。

https://example.com

n8nの画面が表示されれば成功です。

これで安全にn8nを使えるようになりました。

まとめ

セルフホスティングは少し手間がかかりますが、サブスクリプション費用を抑えたい方にとっては非常に大きなメリットがあります。
また、n8nを自前で運用できれば、自分自身やチームの作業自動化の自由度が大きく向上します。

この記事を参考に、ぜひn8nのセルフホスティングに挑戦してみましょう。

お問い合わせ

このフォームに入力するには、ブラウザーで JavaScript を有効にしてください。
メールアドレス
ご相談内容
同意事項
プライバシーポリシー

株式会社PRODUCEWAVES

最終更新日:2023年10月26日


株式会社PRODUCEWAVES(以下「当社」といいます)は、お客様の個人情報を尊重し、適切に取り扱うことを重要な責務と考えております。本プライバシーポリシーでは、当社のウェブサイト及びサービスにおける個人情報の収集・利用・保護に関する方針を定めております。


1. 収集する個人情報

当社は、以下の場合にお客様の個人情報を収集することがあります。


お問い合わせをいただいた場合

イベントにご登録いただいた場合

当社サービスをご利用いただく場合

収集する個人情報には、氏名、メールアドレス、電話番号などが含まれますが、必要な範囲内に限定して収集いたします。


2. 個人情報の利用目的

当社は、収集した個人情報を以下の目的で利用いたします。


お客様からのお問い合わせへの対応

当社サービスの提供及び改善

ウェブサイトの品質向上

お客様に最適な情報提供及び体験の実現

3. 個人情報の第三者提供

当社は、以下のいずれかに該当する場合を除き、お客様の個人情報を第三者に提供いたしません。


お客様ご本人の同意がある場合

法令に基づく場合

お客様との契約の履行のために必要な範囲で委託先に提供する場合

当社の合併、事業譲渡等の事由による事業承継に伴う場合

4. 個人情報の安全管理

当社は、個人情報の漏洩、滅失、毀損等を防止するため、適切なセキュリティ対策を講じ、個人情報の安全管理に努めます。また、個人情報を取り扱う従業者に対し、適切な監督を行います。


5. お客様の権利

お客様は、当社が保有するご自身の個人情報について、開示、訂正、利用停止、削除等を請求する権利を有しています。これらの権利を行使されたい場合は、下記のお問い合わせ先までご連絡ください。


6. 未成年者の個人情報

当社のサービスは18歳未満の方を対象としておりません。当社は、18歳未満の方の個人情報を意図的に収集することはありません。18歳未満の方が当社に個人情報を提供された場合、保護者の同意を得たうえでご連絡いただきますようお願いいたします。


7. プライバシーポリシーの変更

当社は、必要に応じて本プライバシーポリシーを変更することがあります。変更した場合は、当社ウェブサイト上に変更後のプライバシーポリシーを掲載し、効力発生日を更新いたします。


8. お問い合わせ

本プライバシーポリシーに関するご質問やお問い合わせは、下記までご連絡ください。


株式会社PRODUCEWAVES

メールアドレス:info@producewaves.com


💬
目次