n8n本体の新バージョンを毎朝自動検知し、kotaroに通知。承認後ワンコマンドで適用する仕組み。完全自動更新ではなく、breaking changeの影響を事前に確認できるセミ自動方式を採用している。
| パス | 内容 |
|---|---|
/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.log | cron実行ログ |
/root/n8n-updater/backups/ | DB + compose.yml バックアップ |
n8nに作成した汎用通知ワークフロー。他のシステムからも再利用可能。
| ワークフロー名 | Gmail Notify Webhook |
|---|---|
| Workflow ID | gmailNotifyHook01 |
| Webhook URL | https://n8n.srv905819.hstgr.cloud/webhook/gmail-notify |
| Method | POST |
| Payload | {"subject": "件名", "body": "本文"} |
| Credential | Gmail account 3 (gmailOAuth2) |
| 送信先 | t.miura.work@gmail.com |
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()
ssh -i ~/.ssh/hostinger_vps root@168.231.119.138/root/n8n-updater/n8n_update_apply.sh 2.17.230 6 * * * /usr/bin/python3 /root/n8n-updater/n8n_update_check.py >> /root/n8n-updater/cron.log 2>&1
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
workflow_entity — 本体(activeVersionId要セット)shared_workflow — プロジェクト紐付けworkflow_history — バージョン履歴workflow_published_version — published紐付けjson.dumps(..., ensure_ascii=False).encode("utf-8"))を使えば確実。