Retention। डिफ़ॉल्ट्स चौदह दिन या 10 000 executions रखते हैं, जो भी पहले आए, हर node के पूरे input और output data के साथ। एक व्यस्त schedule trigger वाले छोटे NVMe पर यही चीज़ disk को भर देती है। इन्हें n8n environment block में जोड़ें और restart करें:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none एक high-frequency instance पर सबसे बड़ी जीत है: यह सफल runs के payloads लिखना बंद कर देता है, जबकि हर failed run को पूरी तरह store करता रहता है ताकि आप उसे debug कर सकें। जब तक आप workflow बना ही रहे हों तब तक इसे "all" पर रखें, फिर जब workflow उबाऊ यानी stable हो जाए तो इसे बदल दें।
Silence। Compose file पहले से diagnostics, version notifications और personalisation survey को बंद कर देती है। बचा हुआ outbound caller template gallery है, जो api.n8n.io से fetch करता है; अगर आप बिलकुल कोई third-party call नहीं चाहते तो N8N_TEMPLATES_ENABLED=false सेट करें। अगर आप version notifications बंद करते हैं, तो अपने calendar में एक monthly reminder रखें कि release notes पढ़ें — एक ऐसा self-hosted instance जिसे कोई update नहीं करता, उससे बुरा नतीजा है जो versions के लिए ping करता रहे।
Code node। N8N_BLOCK_ENV_ACCESS_IN_NODE=true, जो file में पहले से मौजूद है, expressions और Code nodes को process environment variables पढ़ने से रोकता है — जिसका मतलब इस box पर PostgreSQL password और encryption key है। अगर आप public REST API इस्तेमाल नहीं करते, तो N8N_PUBLIC_API_DISABLED=true जोड़ें और उस surface को भी बंद कर दें।
Backups — तीनों हिस्से या कोई नहीं। अकेले database का backup, encryption key के बिना बेकार है, और अकेली key कुछ भी restore नहीं करती। PostgreSQL dump, n8n data volume और .env को एक साथ backup करें, और कम से कम एक copy server से बाहर रखें:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
volume का नाम Compose project के नाम और volume के नाम को जोड़कर बनता है; अगर आपकी directory का नाम n8n नहीं है, तो docker volume ls चलाएं और जो दिखे उसे इस्तेमाल करें। तीनों lines को एक cron job में डालें, archives को कहीं और भेजें, और एक बार restore करके test करें — एक untested backup सिर्फ़ एक विश्वास है, backup नहीं।
Updates। docker compose pull, फिर उसके बाद docker compose up -d। पहले एक snapshot लें: n8n शुरू होने पर database migrations चलाता है, और migrations को roll back करने के लिए नहीं बनाया गया है। किसी major version के आर-पार — जैसे 1.x से 2.x की छलांग — pull करने से पहले release notes पढ़ें, बाद में नहीं, और :latest की बजाय एक स्पष्ट image tag pin करने पर विचार करें ताकि एक unattended restart आपको कभी अचानक upgrade न कर दे।