💨

Dockerを使ってローカルホストでn8nを構築してみる【無課金/永続】

に公開

初めに

こんにちは、AIエンジニアを目指している mita です!

今回は Docker 上で n8n を動かし、AIニュース自動収集ワークフローをローカル環境に構築する方法 をまとめました。

  • 完全無料(無課金)でずっと使える
  • PC起動と同時にワークフローが自動で実行
  • 一度だけコードを入力すれば、あとはほったらかしでOK

つまり、課金ユーザーとほぼ同じように n8nを永続的に活用できる環境が手に入ります。
ワークフローは自由にカスタマイズできるので、AIツール活用の第一歩としてぜひ参考にしてください!

使用環境

  • OS: Windows
  • シェル: PowerShell 7 (以後pwshと表記)
  • ツール: Docker Desktop, n8n

自動化の流れ

  1. Docker Desktopインストール
  2. pwshを使ってDocker上にn8nを動かすコンテナを作成
  3. ローカルホストで起動したn8n上でワークフロー作成
  4. PC再起動でワークフロー実行

Docker Desktopの設定

  1. こちらからDocker Desktopをインストールする。
  2. Docker Desktop右上の歯車マークからsettingsGeneralへ移動し、Start Docker Desktop when you sign in to your computerにチェックを付けApply

上記の設定をしないとPCを起動したときにコンテナが動かないので注意してください。

pwshを使ってコンテナ作成

Docker Desktopをインストールしたらpwshを用いてコンテナを作成します。
その際にホストと連携してコンテナが消えてもn8nワークフローの情報が消えない設定と、PCが起動したら自動でコンテナを再起動する設定を組み込んでいきます。

具体的な流れは下記のようになります。
これらのコード入力は最初の1度だけとなり、次回以降はPC起動のみでコンテナが動作します。

1. pwsh起動

画面下部の検索窓に「pwsh」と入力してpwshを起動します。

2. ディレクトリ作成

n8n用の作業用ディレクトリを作成します。
ここに後ほど作成する環境変数や軌道に必要なYAMLファイルを置きます。

mkdir ~/n8n
cd ~/n8n

mkdirはディレクトリ(フォルダ)を作成するコマンド、cdは指定したディレクトリにカレントディレクトリを移動させるコマンドです。
~/n8n~はホームディレクトリ(ユーザーごとの作業領域)を意味しており、デフォルトだと
~ = C:\User\ユーザー名を指します。

3. 暗号化キーを作る

n8nが持つ認証情報を保存するストレージのカギを作成します。

n8nではN8N_ENCRYPRION_KEYという鍵を使用し、OpenAIAPIなど他サービスの認証情報を暗号化して保存しています。
これを設定しないと毎回APIキーをn8nのワークフローに入力しなければいけないので気を付けましょう。

[Convert]::ToBase64String((1..48 | ForEach-Object { Get-Random -Max 256 }))

ざっくり説明すると、48バイトの乱数を生成しbase64変換することによってランダムな文字列を生成しています。
本格的な暗号化キーは別の方法で生成しますが、実用上は上記で問題ないでしょう。

4. .envファイル作成

.envファイルを作成してn8nの基本設定を環境変数で管理します。
先ほど作った暗号鍵もここで使用します。

@'
N8N_HOST=localhost
N8N_PORT=5678
N8N_PROTOCOL=http
N8N_EDITOR_BASE_URL=http://localhost:5678

# 暗号化キー(手順3で作った値をここに貼る)
N8N_ENCRYPTION_KEY=<<PUT_RANDOM_KEY_HERE>>

# Basic認証(任意)
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=supersecret

# タイムゾーン
GENERIC_TIMEZONE=Asia/Tokyo
'@ | Set-Content .env -Encoding UTF8

@' → pwshのヒアドキュメントで複数行の文字列を入力可能にします。
| Set-Content .env → 文字列を.envというファイルに保存。

5. docker-compose.ymlを作成

Dockerにどういうサービスをどういう条件で起動させるかを定義した設計図を作成します。

@'
services:
  n8n:
    image: n8nio/n8n:latest
    env_file: .env
    ports:
      - "5678:5678"
    volumes:
      - ./n8n_data:/home/node/.n8n
    restart: unless-stopped
'@ | Set-Content docker-compose.yml -Encoding UTF8

services.n8n.image → 公式の n8n コンテナイメージを指定。
env_file: .env → 先ほど作った .env を読み込む。
portsホスト:コンテナ。ここでは Windows の localhost:5678 をコンテナの 5678 に割り当て。
volumes → ホストの ./n8n_data をコンテナ内 /home/node/.n8n にマウント(データ永続化)。
restart: unless-stopped → PC再起動や Docker 再起動時に自動復帰。手動で docker compose stop した時は止まる。

6. コンテナ起動

pwshからdockerを起動します。

docker compose up -d

docker composedocker-compose.ymlファイルを起動するコマンド
up → サービスを起動
-d → detached mode (バックグラウンドで起動)

7. 起動確認(任意)

現在動いているコンテナを確認します。

docker compose ps

ps → process status。コンテナがUpになっていれば起動成功

n8nワークフロー作成

ここからはn8nを使用して自動ワークフローを作成していきます。

本記事はローカルでn8nを動作させる方法に重点を置いているため、n8nの詳しい解説は省略します。
私が作成したワークフローは今後記事にする予定です。他ユーザー様が作成したものを参考に作っていたりしますので、他記事やYoutube動画も見てみてください。

1. n8n初期化

上記手順を終えた後、ブラウザで「http://localhost:5678」を開きましょう。
n8nのsign up画面が出ますので、ユーザーを作ってログインすればOKです。

2. ワークフローのトリガーを「PC起動時に実行」にする

課金ユーザーは時間指定などでワークフローを実行することが多いn8nですが、
ローカルホストだとPCに電源が入っていないとワークフローが動作しないため少し不便です。

そこでワークフロー開始のトリガーを「PC起動時に実行」へ変更することによってPC立ち上げと同時にワークフローが実施され、日常動作の中でn8nを使用することが可能です。

  1. n8nのワークフロー作成画面右上「Open Nodes Panel」を選択(Tabでも開きます)しn8nと入力/選択。
  2. TriggersタブのOn instance startedを選択
  3. ノードの設定においてEventsInstance Startedを選択

上記を設定しワークフローを組み、保存後ActiveにすることによってPC起動時にコンテナが再起動され、ワークフローのトリガーが引かれるようになりました。
pwsh上でdocker compose restart n8nとするとコンテナが再起動されるため、ワークフローのテストにお使いください。

特に最新ニュースを取ってくるワークフローなどは任意の時間で1日に1回動作すれば問題ないかなと思います。
もし時間指定を入れたい場合はサブトリガーとして設定可能なので、試してみて下さい。

まとめ

今回はDockerを使用して、ローカルホストでn8nのワークフローを起動・動作させる記事でした。

ずばり、ローカルホストを使用するメリットは 「お金がかからない」 、この一点にあると感じます。
逆にデメリットは下記のようなものがあります。

  • PCを動かしていないとワークフローが動作しない
  • Dockerの知識が必要でハードルが高く見える
  • 少なからず保守に工数を割く必要がある

なので「ストレスフリー、全自動でワークフローが動いてほしい」「時間指定をしっかりしたい」などと考えられている方には課金やセルフホストをおすすめします。

ただし、本記事のようにPC起動時にワークフローが動くよう設定できたり、業務用PCが動く平日の日中に時間指定をすれば課金ユーザーと同様に、何もせずワークフローが動作してくれます。
「お金をかけずに新しいツールを触ってみたい」「Docker使い慣れてないからキャッチアップしたい」などと考えられている方は、ぜひローカルホストでn8nを動かしていただきたいです。

現在私が使っているワークフローは「最新AIニュースをDiscordで取得するワークフロー」と「arXivから最新AI論文をNotionで取得するワークフロー」の2つです。

今後ワークフローの作成の仕方を記事にする予定なので、よかったらまた見てください!

Discussion