⚙️ n8n Auto Updater LIVE

運用開始: 2026-04-17 方式: B案 セミ自動 対象: n8n on VPS

1. 概要

n8n本体の新バージョンを毎朝自動検知し、kotaroに通知。承認後ワンコマンドで適用する仕組み。完全自動更新ではなく、breaking changeの影響を事前に確認できるセミ自動方式を採用している。

2. 動作フロー

[毎日 6:30 JST cron] │ ▼ n8n_update_check.py ├─ 現バージョン取得 (docker exec) ├─ Docker Hub から最新stable取得 ├─ 差分なし → 終了 └─ 差分あり → ├─ GitHub releases から CHANGELOG取得 │ └─ "BREAKING" / "BREAKING CHANGE" 検知 ├─ Gmail通知 (n8n Webhook → Gmail account 3) └─ Vikunja「VPS/インフラ」プロジェクトにタスク登録 (期限: 7日後 / Priority: BREAKING時はUrgent) [kotaro承認後、手動実行] │ ▼ n8n_update_apply.sh <version> ├─ DB + docker-compose.yml バックアップ ├─ image を <version> に固定 ├─ docker compose pull && up -d ├─ /healthz を90秒チェック (5秒×18回) ├─ 失敗時 → ロールバック + Gmail通知 └─ 成功時 → Gmail成功通知

3. ファイル構成

パス内容
/root/n8n-updater/n8n_update_check.py毎朝のチェックスクリプト
/root/n8n-updater/n8n_update_apply.sh承認後の適用スクリプト
/root/n8n-updater/last_notified.txt重複通知抑制(最後に通知したバージョン)
/root/n8n-updater/update_check.logチェック履歴ログ
/root/n8n-updater/apply.log適用履歴ログ
/root/n8n-updater/cron.logcron実行ログ
/root/n8n-updater/backups/DB + compose.yml バックアップ

4. 通知基盤: Gmail Notify Webhook

n8nに作成した汎用通知ワークフロー。他のシステムからも再利用可能。

ワークフロー名Gmail Notify Webhook
Workflow IDgmailNotifyHook01
Webhook URLhttps://n8n.srv905819.hstgr.cloud/webhook/gmail-notify
MethodPOST
Payload{"subject": "件名", "body": "本文"}
CredentialGmail account 3 (gmailOAuth2)
送信先t.miura.work@gmail.com

呼び出し例(Python)

import urllib.request, json
data = json.dumps({
    "subject": "[xxx] 件名",
    "body": "本文(日本語OK)"
}, ensure_ascii=False).encode("utf-8")
req = urllib.request.Request(
    "https://n8n.srv905819.hstgr.cloud/webhook/gmail-notify",
    data=data,
    headers={"Content-Type": "application/json; charset=utf-8"},
)
urllib.request.urlopen(req, timeout=15).read()

5. 適用手順

  1. Gmail通知を受信したらCHANGELOGを確認(特にBREAKING CHANGE)
  2. Vikunjaの該当タスクを確認
  3. SSHしてapply.sh実行: ssh -i ~/.ssh/hostinger_vps root@168.231.119.138
  4. /root/n8n-updater/n8n_update_apply.sh 2.17.2
  5. 結果Gmail通知を確認、Vikunjaタスクをcomplete

6. Cron設定

30 6 * * * /usr/bin/python3 /root/n8n-updater/n8n_update_check.py >> /root/n8n-updater/cron.log 2>&1

7. ロールバック

apply.shが自動でロールバックするが、手動でも可能:

# DB復元
cp /root/n8n-updater/backups/database_<TS>_pre_<VER>.sqlite \
   /var/lib/docker/volumes/n8n_data/_data/database.sqlite

# docker-compose.yml復元
cp /root/n8n-updater/backups/docker-compose_<TS>_pre_<VER>.yml \
   /root/docker-compose.yml

# 再起動
cd /root && docker compose pull n8n && docker compose up -d n8n

8. 重要な学び

n8n 2.x DB直接INSERT
新版n8n(2.x以降)でDB直接にワークフローを追加する場合、以下4テーブル全てに登録が必要。1つでも欠けるとGUI非表示またはActivate時に「Version not found」エラー。
文字エンコード
Webhookに日本語を送る場合、Windows curlからだと文字化けする。VPS上のPython(json.dumps(..., ensure_ascii=False).encode("utf-8"))を使えば確実。

9. 関連リンク