見出し画像

【技術記事 #01】n8nをGCEにセルフホストして、無料で運用してみる

皆さん、お疲れ様です。
隣のAIくんです。

今後、日々の活動を備忘録として技術記事シリーズに投稿していきたいと思いますのでぜひフォローよろしくお願いいたします。

日々の業務で、面倒な作業に多くの時間と労力を費やされていませんか?

そんな「面倒」を解決してくれるのが、n8n(エヌエイトエヌ)です。
n8nは、様々なアプリやサービスを連携させて、日々の面倒な作業を自動化できるツールです。プログラミングの知識がなくても、マウス操作でワークフローを作ることができます。

例えば、以下のような自動化が実現できます。

  • 特定のメールが届いたらSlackに通知する

  • フォームの回答をスプレッドシートに自動記録する

  • Twitterで特定のキーワードを含む投稿を自動チェックする

このように、あなたのアイデア次第で、あらゆる面倒な作業を自動化できる可能性を秘めています。

なぜ、セルフホスティングなのか?

n8nには、主に2つの使い方があります。

① クラウド版(有料):
n8n公式が提供するサービスです。すぐに使い始められますが、本格的に利用するには月額費用(約4,000円〜)がかかります。

②セルフホスト版(無料):
n8nはオープンソースソフトウェアであるため、プログラム自体は無料で利用できます。これが最大のメリットです。

n8nの料金プラン

ただし、「セルフホスト」を選ぶと、n8nを動かすためのサーバーを自分で用意する必要があります。

ローカルPCで動かすだけでは、PCを起動している間しか自動化が実行されません。かといって、一般的なVPS(レンタルサーバー)を契約すると、結局サーバー代(月額数百円〜1,000円程度)が発生してしまいます。

この記事では、Google Cloud Engine (GCE)※1 の「Always Free(永年無料枠)」という制度を利用し、無料でn8nをセルフホスティングする手順を詳しく解説していきます。

Google Cloudの基礎知識が習得できるので、下記をおすすめさせていただきます。


1. GCEインスタンスの準備

まずはn8nを動かすためのサーバー(VMインスタンス)をGCE上に作成します。ここで無料枠の条件を確実に満たすことが重要です。

VMインスタンスを作成する

  1. Google Cloudコンソールにログインし、「Compute Engine」から「VMインスタンス」ページを開きます。

  2. 「インスタンスを作成」をクリックします。

  3. 以下の設定を厳密に行います。

    • リージョン: us-west1(オレゴン州)、us-central1(アイオワ州)、us-east1(サウスカロライナ州)のいずれかを選択します。
      > asia-northeast1(東京)など、上記3つ以外のリージョンを選ぶと無料枠の対象外となります。

    • マシンタイプ: e2-micro(vCPU x2(共有), 1 GB メモリ)を選択します。

    • ブートディスク: 「変更」をクリックし、以下を設定します。

      • オペレーティング システム: Ubuntu(例: Ubuntu 22.04 LTS)

      • ブートディスクのタイプ: 標準永続ディスク (HDD)
        > 「SSD」や「バランス永続ディスク」を選ぶと無料枠の対象外となります。

      • サイズ: 30 GB
        > 30GBを超えると無料枠の対象外となります。

    • ファイアウォール: 「HTTP トラフィックを許可する」にチェックを入れます。

課金を防ぐための設定確認

インスタンス作成画面を下に進み、詳細設定を確認します。余計な有料オプションが有効になっていないか確認しましょう。

  • バックアップ: 「バックアップ プラン」や「スナップショット スケジュール」が「バックアップなし」になっていることを確認します。

  • ネットワーキング: 「Tier_1 ネットワーキング」などが無効(チェックが外れている)になっていることを確認します。

  • 監視: 「Ops エージェント」は、収集するログや指標データが無料枠を超えると課金されるリスクがあるため、チェックを外しておくことを推奨します。

  • IPアドレス: VMが停止中に静的IPアドレスを保持すると課金対象となります。まずはデフォルトの「エフェメラル(一時)」のまま運用しましょう。

設定が完了したら「作成」ボタンをクリックします。

DockerとDocker Composeのインストール

インスタンスが作成されたら、SSHで接続します。VMインスタンス一覧の「接続」列にある「SSH」ボタンをクリックすると、ブラウザ上でターミナルが開きます。

次に、開いたターミナルで以下のコマンドを順番に実行し、DockerとDocker Composeをインストールしましょう。

# まずはパッケージリストを更新
sudo apt update

# Dockerのインストールに必要なパッケージを導入
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# Dockerの公式GPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Dockerのリポジトリを追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.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

# Docker Engine と CLI をインストール
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Docker Compose Plugin をインストール
sudo apt install -y docker-compose-plugin

インストールが完了したら、docker compose versionと入力し、バージョン情報が表示されれば成功です。

最後に、sudoなしでDockerコマンドを実行できるように、現在のユーザーをdockerグループに追加します。

# ユーザーをdockerグループに追加
sudo usermod -aG docker $USER

【重要】 このコマンドを実行したら、一度SSHのブラウザタブを閉じ、再度「SSH」ボタンを押して再接続してください。 再接続しないと、グループへの追加が反映されません。


2. n8nをDocker Composeで起動

サーバーの準備が整いました。いよいよn8nを起動します。

docker-compose.yml の作成

SSHターミナルで、n8n用のディレクトリを作成し、そこに移動します。

mkdir n8n_server
cd n8n_server

次に、nano(テキストエディタ)を使ってdocker-compose.ymlファイルを作成します。

nano docker-compose.yml

エディタが開いたら、以下の内容をコピーして貼り付けてください。

> ```yaml
> services:
>   n8n:
>     image: n8nio/n8n:latest
>     container_name: n8n_server
>     restart: unless-stopped
>     ports:
>       - "5678:5678"
>     environment:
>       # ↓ 必ず強力なランダム文字列に変更してください!
>       - N8N_ENCRYPTION_KEY=YOUR_VERY_STRONG_RANDOM_KEY 
>       - GENERIC_TIMEZONE=Asia/Tokyo
>       # GCE(HTTP)でのアクセスエラー回避のため
>       - N8N_SECURE_COOKIE=false 
>     volumes:
>       - n8n_data:/home/node/.n8n
> ```

> volumes:
> n8n\_data:
>
> ```
> ```

貼り付けたら、Ctrl + Sで保存し、Ctrl + Xでエディタを終了します。

ymlファイルのポイント解説

  • N8N_ENCRYPTION_KEY:
    これはn8nが認証情報(APIキーなど)を暗号化するために使う非常に重要な鍵です。YOUR_VERY_STRONG_RANDOM_KEYの部分は、必ず推測不可能な文字列に変更してください。SSHターミナルで以下のコマンドを実行すると、強力なキーを生成できます。

    openssl rand -base64 32

生成された文字列(例: lLwggnIRdu6g...)を、ymlファイルにコピペします。

  • N8N_SECURE_COOKIE=false:
    これは、GCEのIPアドレス(HTTP接続)で直接アクセスした際に発生する「セキュアクッキー」関連のエラーを回避するためのおまじないです。本番運用で独自ドメインとHTTPS化を行う際は、この行を削除(またはtrueに)する必要があります。

n8nコンテナの起動とアクセス

docker-compose.ymlが準備できたら、いよいよn8nコンテナを起動します。

docker compose up -d

-dオプションにより、コンテナはバックグラウンドで起動します。

最後に、外部からn8nにアクセスできるよう、GCEのファイアウォールでポート5678を開放します。

  1. Google Cloudコンソールのメニューから「VPC ネットワーク」>「ファイアウォール」に移動します。

  2. 「ファイアウォール ルールを作成」をクリックします。

  3. 以下の設定を行います。

    • 名前: allow-n8n-5678(分かりやすい名前)

    • ターゲットタグ: n8n-server(後でVMインスタンスに設定するタグ)

    • ソース IPv4 範囲: 0.0.0.0/0(すべてのIPからのアクセスを許可)

    • プロトコルとポート: 「指定したプロトコルとポート」にチェックし、tcp:5678と入力します。

  4. 「作成」をクリックします。

[ここに図解を入れる:GCEファイアウォールルール作成画面のキャプチャ指示。ターゲットタグとポート設定箇所をハイライト]

ルールを作成したら、「VMインスタンス」ページに戻り、作成したインスタンスをクリックして編集画面を開きます。「ネットワーク タグ」の欄に、先ほど設定したタグ(n8n-server)を入力して保存します。

これで準備完了です!

ブラウザのアドレスバーに http://[GCEインスタンスの外部IP]:5678 と入力してください。(外部IPはVMインスタンス一覧で確認できます)

n8nの初期設定画面が表示されれば成功です!


3. 運用のためのヒント

構築して終わりではありません。セルフホスト環境を快適に使い続けるためのヒントを紹介します。

n8nのアップデート方法

セルフホスト環境では、アップデートも自分で行う必要があります。n8nは頻繁にアップデートされるため、定期的に実行しましょう。

手順は簡単です。SSHで接続し、docker-compose.ymlがあるディレクトリで以下の3つのコマンドを実行するだけです。

# 1. 最新のDockerイメージを取得
docker compose pull

# 2. 現在のコンテナを停止・削除
docker compose down

# 3. 新しいイメージでコンテナを再起動
docker compose up -d

コミュニティ版(セルフホスト)の注意点

セルフホスト版は無料ですが、有料のクラウド版と全く同じ機能が使えるわけではありません。以下の点に注意してください。

  • ライセンス登録が必要:
    セルフホスト版でも、メールアドレスを登録してライセンスキーを取得しないと、フォルダ作成やデバッグ画面の表示など、一部の機能が制限されます。

  • 外部アプリ連携(OAUTH):
    Googleログインなど、クラウド版では簡単な連携も、セルフホスト版では自分でOAUTHアプリケーションを準備する必要がある場合があります。

(発展)独自ドメインとHTTPS化

今回はIPアドレスで直接アクセスしましたが、N8N_SECURE_COOKIE=falseの状態はセキュリティ上好ましくありません。

もし本格的に運用するのであれば、独自ドメインを取得し、NginxやCaddyといったリバースプロキシ※2を導入して、Let's EncryptでHTTPS化すること(SSL/TLS対応)を強く推奨します。


まとめ

GCEの「Always Free」の条件(us-west1などの特定リージョン、e2-micro、30GB HDDなど)を正しく守れば、サーバーコスト無料で常時稼働するn8n環境が手に入ります。

ローカル実行の「PCを閉じたら止まる」という面倒さから解放され、コストを気にせず自動化ライフを楽しみましょう。

ただし、VM停止時に「静的IP」を保持し続けると課金されるなど、無料枠には細かなルールがあります。運用しながらもコスト管理を意識することが、無料で使い続けるための鍵となります。


注釈

※1 : GCE (Google Cloud Engine) とは、Googleが提供するクラウドコンピューティングサービス(IaaS)の一つ。仮想マシン(VM)をオンデマンドで作成・実行できる。
※2 : リバースプロキシ とは、外部からのリクエストを受け取り、内部のサーバー(この場合はn8nコンテナ)に転送する仕組み。SSL/TLS(HTTPS化)の処理を一手に引き受けるためによく使われる。

いいなと思ったら応援しよう!