自分のサーバーに n8n をデプロイ:ドメイン、ワークフロー、バックアップ

Zenavo のテンプレートで n8n をデプロイし、HTTPS、Webhook URL、タイムゾーンを設定します。最初のワークフローを動かし、暗号化キーの保管とボリュームのバックアップまでを説明します。

この記事は English、简体中文、繁體中文、Español、Bahasa Indonesia でもお読みいただけます。

フォームの送信内容をスプレッドシートに書き込む、定期的にメッセージを集約する、Webhook を受け取って別の API を呼び出す——こうした繰り返しの自動化は n8n に任せられます。セルフホストなら実行回数ごとの課金制限がなく、ワークフローも認証情報も自分のサーバーに置けます。

この記事では、Zenavo の n8n テンプレートを使って、デプロイ、ドメインと Webhook の設定、バックアップとアップグレードまでを順に説明します。サーバー、Zenavo プラットフォーム、ワークフローから呼び出す外部 API の料金はそれぞれ別です。

n8n をデプロイする

まず Zenavo に Linux サーバーを接続し、n8n テンプレートを開いて、サーバーを選んでデプロイします。

現在のテンプレートの設定は次のとおりです。

設定 値・用途
イメージ n8nio/n8n:latest
HTTP ポート 5678
永続ボリューム /home/node/.n8n。標準の SQLite データベース、ワークフロー、認証情報がここに保存されます
N8N_ENCRYPTION_KEY プロジェクト作成時に自動生成され、保存した認証情報の暗号化に使われます
GENERIC_TIMEZONE 初期値は UTC。以下で自分のタイムゾーンに変更します
N8N_DIAGNOSTICS_ENABLED false(テレメトリーを無効化)

latest は上流の更新に追従します。長く使う場合は、n8n サービスの 設定 → ソース でイメージタグを動作確認済みの固定バージョン(例:n8nio/n8n:1.82.0)に変更し、再デプロイで意図せずバージョンが上がらないようにしてください。

ドメインを設定し、Webhook URL とタイムゾーンを指定する

n8n サービスの ネットワーク タブでポート 5678 にドメイン(例:n8n.example.com)を割り当て、DNS にサーバーを指す A レコードを追加して HTTPS が有効になるのを待ちます。手順はドメインと HTTPS をご覧ください。

次に、n8n サービスの 変数 タブを開き、ドメインとタイムゾーンの設定を追加します。

N8N_HOST=n8n.example.com
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://n8n.example.com/
WEBHOOK_URL=https://n8n.example.com/
N8N_PROXY_HOPS=1
GENERIC_TIMEZONE=Asia/Tokyo
TZ=Asia/Tokyo

補足:

  • WEBHOOK_URL は Webhook ノードが生成する公開 URL を決めます。未設定だと、コンテナ内部の http://localhost:5678 が表示されます。
  • N8N_PROXY_HOPS=1 は Zenavo のゲートウェイ1段分のリバースプロキシに対応します。ドメインの手前に Cloudflare などの CDN プロキシを挟む場合は、実際の段数に合わせて調整してください。
  • GENERIC_TIMEZONE はスケジュールトリガー(Schedule Trigger)の標準タイムゾーンになります。

保存してサービスを再起動したら、https://n8n.example.com を開いて管理者アカウントを作成します。あとでドメインを変更する場合は、上の URL 関連の変数もあわせて更新してください。

最初のワークフローと Webhook を動かす

エディターに入ったら、まず小さなワークフローを作って動作を確認します。

  1. 新しいワークフローを作成し、Manual Trigger を追加します。
  2. Edit Fields (Set) ノードを追加し、文字列フィールド message に Hello from n8n を設定します。
  3. Test workflow をクリックし、右側の出力にメッセージが表示されることを確認して保存します。

続いて、外部からのリクエストが Webhook に届くか試します。

  1. Webhook ノードを追加し、HTTP Method を GET にします。
  2. Listen for test event をクリックし、ノードに表示される Test URL をブラウザで開いて、エディターにすぐリクエストが届くことを確認します。
  3. GitHub、Stripe、Slack などの外部サービスから本番接続するときは、Production URL を使い、ワークフロー右上のスイッチを Active にします。Test URL はテスト待機中だけ有効なアドレスです。

N8N_ENCRYPTION_KEY を控えておく

n8n に登録した API キー、データベースのパスワード、OAuth トークンはすべて、N8N_ENCRYPTION_KEY で暗号化されてデータベースに保存されます。

n8n サービスの 変数 タブを開き、N8N_ENCRYPTION_KEY の値をパスワードマネージャーにコピーして保管してください。デプロイ後にこの値を変更しないでください。 将来バックアップを新しいプロジェクトや別のサーバーに復元するときも、同じ N8N_ENCRYPTION_KEY を設定しないと、保存済みの認証情報を復号できなくなります。

エディターの「ワークフローのエクスポート」はノードと接続の JSON だけを書き出す機能で、認証情報や実行履歴は含まれません。ボリュームのバックアップの代わりにはならない点に注意してください。

バックアップとアップグレード

n8n のデータはすべて /home/node/.n8n ボリュームにあります。n8n サービスの バックアップと復元 タブでバックアップします。

  1. 重要なワークフローが動いていない時間帯を選び、プロジェクトを停止します(ボリュームのバックアップにはプロジェクトの停止が必要です)。
  2. ボリュームのバックアップを作成し、完了したらプロジェクトを再起動します。
  3. バックアップを1つダウンロードし、N8N_ENCRYPTION_KEY と一緒に保管します。

詳しい手順はバックアップと復元をご覧ください。検証のために別のプロジェクトへ復元する場合は、有効化されているスケジュールトリガーが起動後に動き出すため、先にトリガーを止めるか本番環境と切り離して確認してください。

アップグレードの前には n8n のリリースノートを読み、先にボリュームをバックアップしてから 設定 → ソース でイメージのバージョンを変更します。アップグレードでデータベース構造が移行された場合、イメージタグだけを元に戻しても起動しないことがあるため、戻すときはアップグレード前のバックアップを復元します。

よくある質問

Webhook ノードの URL が localhost:5678 のままになります 変数 タブに WEBHOOK_URL=https://あなたのドメイン/ が設定されているか確認し、保存後に n8n サービスを再起動してください。

外部サービスから Webhook を呼ぶと 404 になります Production URL(/webhook-test/ ではなく /webhook/ のパス)を使っているか、またワークフロー右上の Active スイッチがオンになっているか確認してください。

スケジュールトリガーが日本時間で動きません 変数の GENERIC_TIMEZONE と TZ が Asia/Tokyo になっているか、またワークフロー個別の Settings → Timezone で別のタイムゾーンが指定されていないか確認してください。

どのくらいのサーバーが必要ですか? 日常的な軽いワークフローならメモリ消費は少なく、1 vCPU・2 GB のサーバーから始められます。大きなファイルや大量の JSON 配列をメモリ上で処理する場合、または同時実行が多い場合は、2 vCPU・4 GB 以上のサーバーをおすすめします。

まずは n8n テンプレートから始めましょう。ドメインを割り当てて WEBHOOK_URL とタイムゾーンを設定し、N8N_ENCRYPTION_KEY の控えと最初のボリュームバックアップを取っておけば安心です。