VPS पर n8n self-host kaise karein Docker se
Docker Compose, Postgres aur HTTPS ke saath n8n setup karein. WEBHOOK_URL aur encryption-key errors ko solve karne ka sahi tarika yahan seekhein.
आप क्या बना रहे हैं
n8n एक workflow automation tool है: यह एक visual editor है जहाँ एक trigger — जैसे कि webhook, schedule, या form submission — nodes की एक chain को activate करता है। ये nodes APIs को call करते हैं, data को reshape करते हैं और अन्य systems में write करते हैं। यह AI-agent workflows के लिए standard बन गया है क्योंकि यह बिना किसी custom service के हर model provider और database से connect कर सकता है। docker run केवल दो minutes में एक working editor प्राप्त कर सकता है। यह guide बाकी के ninety percent काम के बारे में है: default SQLite file के बजाय Postgres का उपयोग करके इसे durable बनाना, HTTPS के माध्यम से accessible बनाना, और — वह हिस्सा जिसे लगभग सभी गलत करते हैं — webhooks को ऐसा URL देना जिसे external world वास्तव में reach कर सके।
Final stack एक Docker network पर दो containers है: n8n और ek Postgres database जो workflows और credentials को store करता है। Host पर ek reverse proxy TLS को terminate करता है और localhost पर n8n को forward करता है, जिससे internet के लिए proxy के अलावा कुछ भी visible नहीं होता है। यह 2026 self-hosting shortlist में शामिल अन्य services के साथ काम करता है।
Prerequisites, aur asli seemayein
Aapko kam se kam 1 GB RAM wale VPS ki zaroorat hogi; jab workflows zyada kaam karne lagein toh 2 GB ka plan karein. Iska karan yeh hai ki executions aur Node.js runtime kaafi memory consume karte hain, aur execution ke beech mein out-of-memory killer ka container ko band kar dena seekhne ka ek bura tareeka hai. Shuruat ke liye ek single vCPU kaafi hai.
Aapko ek domain ya subdomain — jaise n8n.example.com — chahiye jisme A record VPS ke public IP par point karta ho. Certificate request karne se pehle iska resolve hona zaroori hai. Proxy ke liye Port 80 aur 443 open hone chahiye; n8n ka apna port 5678 internet ke liye open nahi hona chahiye. Aapko Docker Engine aur Compose plugin ki zaroorat hogi; agar docker compose version mein docker: 'compose' is not a docker command error aata hai, toh iska matlab aapke paas purana standalone binary hai, aur plugin sudo apt install docker-compose-plugin hai.
SQLite टेस्टिंग के लिए ठीक है, लेकिन भरोसेमंद काम के लिए Postgres का उपयोग करें
n8n का default database /home/node/.n8n/database.sqlite पर एक SQLite file है। टेस्टिंग के लिए यह ठीक है — यदि आप कोई volume mount नहीं करते हैं, तो container को दोबारा recreate करने पर सारा data नष्ट हो जाएगा। Postgres पर स्विच करने का कारण केवल speed नहीं है; SQLite में single writer lock होता है। इसलिए, यदि एक saath कई workflows चल रहे हों, या आप queue mode का उपयोग कर रहे हों, तो concurrency के दौरान SQLITE_BUSY: database is locked की समस्या आती है। Postgres में ऐसी कोई सीमा नहीं है, यह pg_dump के साथ cleanly backup लेता है, और n8n के docs भी production server के लिए इसी का सुझाव देते हैं। बाद में switch करने का मतलब है data को manually migrate करना, इसलिए यदि यह setup महत्वपूर्ण है, तो Postgres से शुरुआत करें।
DNS और firewall
सबसे पहले record को point करें और ports को open करें। इससे बाद में certificate step में name resolution की समस्या नहीं आएगी।
dig +short n8n.example.com
curl -s ifconfig.me
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow OpenSSH
sudo ufw enable5678 को open न करें। compose file n8n को 127.0.0.1:5678 पर bind करती है, इसलिए केवल host का reverse proxy ही इसे access कर सकता है। ufw allow 5678 करने से यह isolation समाप्त हो जाएगा।
Compose file
एक working directory और docker-compose.yml बनाएँ। इसमें पूरा stack शामिल है — दो services, एक private network, और दो named volumes।
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: n8n
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- n8n_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: docker.n8n.io/n8nio/n8n:2.29.10
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_PROXY_HOPS=1
- GENERIC_TIMEZONE=Europe/London
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- n8n_data:/home/node/.n8n
networks:
- n8n_net
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
n8n_data:
networks:
n8n_net:कुछ महत्वपूर्ण निर्णय यहाँ दिए गए हैं। DB_POSTGRESDB_HOST=postgres service name है, जिसे Docker shared network पर resolve करता है — न कि localhost को, जिसका n8n container के अंदर अर्थ n8n स्वयं है। condition: service_healthy के साथ depends_on n8n को boot के समय Postgres से पहले चलने से रोकता है; इसके बिना n8n शुरू होता है, database नहीं मिल पाता, और exit हो जाता है। /home/node/.n8n पर n8n_data named volume encryption key और SQLite के मामले में database को सुरक्षित रखता है — यह वह एकमात्र directory है जिसे आपको खोना नहीं चाहिए। Image को एक exact version पर pin करें, कभी भी latest का उपयोग न करें; इसके कारण नीचे upgrade section में दिए गए हैं।
The secrets file
Compose file में कभी भी passwords न रखें। इसके बगल में एक .env file रखें जिसे Compose अपने आप पढ़ सके, और passwords को पूरी तरह random generate करें।
printf 'POSTGRES_PASSWORD=%s\n' "$(openssl rand -hex 24)" > .env
printf 'N8N_ENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" >> .env
chmod 600 .envयहाँ N8N_ENCRYPTION_KEY सबसे महत्वपूर्ण string है — यह वह key है जिससे हर stored credential encrypt होता है। इसे n8n द्वारा generate करने के बजाय खुद explicitly set करें, क्योंकि आपके द्वारा generate किया गया value आप लिख सकते हैं और उसे restore कर सकते हैं। एक बार जब n8n इस key से अपना पहला credential encrypt कर लेता है, तो इसे बदलने से हर credential undecryptable हो जाएगा — इसलिए इसे अभी एक बार set करें, और उस line को फिर कभी न छुएं।
Webhooks के काम करने का निर्धारण करने वाले env vars
चार variables यह नियंत्रित करते हैं कि n8n बाहरी दुनिया को खुद को कैसे बताता है। इन्हें गलत सेट करना n8n support का सबसे बड़ा सवाल है।
N8N_HOSTसार्वजनिक hostname है,n8n.example.com। यदि आप proxy के पीछे इसे defaultlocalhostपर छोड़ देते हैं, तो editor आपके browser मेंlocalhostसे अपनी API लोड करने की कोशिश करता है, जो विफल हो जाती है।N8N_PROTOCOL=httpsn8n को बताता है कि इसे TLS के माध्यम से serve किया जा रहा है, इसलिए यह अपने session cookieSecureको mark करता है औरhttps://URLs बनाता है।N8N_PORT=5678वह port है जिस पर n8n container के अंदर listen करता है। यह public port नहीं है; proxy 443 port का उपयोग करता है।WEBHOOK_URL=https://n8n.example.com/सबसे महत्वपूर्ण variable है। n8n Stripe, GitHub या किसी भी external caller में paste करने के लिए webhook addresses इन्हीं values से बनाता है। यदि यह unset या गलत है, तो n8nN8N_HOST:N8N_PORTपर fallback करता है और आपकोhttps://n8n.example.com:5678/webhook/...या, इससे भी बुरा,http://localhost:5678/webhook/...देता है — जो बिना किसी error के सही दिखता है, लेकिन internet से unreachable होता है। इसके कारण caller के requests चुपचाप कभी नहीं पहुँच पाते। इसे trailing slash के साथ सटीक public base URL पर सेट करें, फिर पुष्टि करें कि webhook node में बिना port वाला URL दिखाई दे रहा है।
N8N_PROXY_HOPS=1 n8n के Express server को अपने सामने मौजूद एक proxy पर trust करने के लिए कहता है। इससे rate-limiting और client IP पढ़ने वाले सभी features को proxy के बजाय वास्तविक address दिखाई देता है। एक variable जिसे हम यहाँ जानबूझकर do not set करते हैं, वह है N8N_RUNNERS_ENABLED: task runners — n8n द्वारा Code-node logic को एक अलग sandboxed process में चलाना — version 1.69 से default है और इस guide में बताए गए 2.x line से अनिवार्य है, इसलिए पुराना opt-in अब deprecated है। इसे अभी सेट करने पर n8n केवल एक notice log करेगा जिसमें इसे हटाने के लिए कहा जाएगा।
First start
docker compose up -d
docker compose ps
docker compose logs -f n8nएक सफल first boot Editor is now accessible via: line के साथ समाप्त होता है, जिसके ऊपर एक n8n ready on ..., port 5678 line होती है। docker compose ps में दोनों containers Up दिखने चाहिए, जिसमें postgres को (healthy) के रूप में मार्क किया गया हो। यदि n8n किसी Restarting loop में फंस जाता है, तो logs पढ़ें — यह लगभग हमेशा database connection या नीचे दिए गए volume permissions की समस्या होती है।
Reverse proxy के साथ TLS
n8n स्वयं 5678 पोर्ट पर plain HTTP का उपयोग करता है; इसके आगे लगा कोई घटक HTTPS को terminate करता है। इसके दो सरल विकल्प हैं।
यदि आप पहले से ही कई containers चला रहे हैं, तो n8n को Traefik reverse proxy के पीछे रखें जो automatically TLS certificates जारी करता है और कुछ labels का उपयोग करें — Traefik आपके लिए certificate request और renew करता है।
यदि यह server पर एकमात्र app है, तो Let's Encrypt certificate के साथ nginx virtual host का उपयोग करना अधिक सरल है। Certificate प्राप्त करने के लिए Ubuntu 24.04 के लिए Certbot और nginx TLS setup का उपयोग करें, फिर इस server block का उपयोग करें:
server {
listen 443 ssl;
server_name n8n.example.com;
ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600;
client_max_body_size 16m;
}
}Upgrade और Connection "upgrade" headers अनिवार्य हैं। n8n WebSocket के माध्यम से editor को live execution updates भेजता है, और इन दो lines के बिना login page लोड होने के बाद "lost-connection" banner के साथ रुक जाएगा। proxy_read_timeout 3600 यह सुनिश्चित करता है कि long-running executions nginx के default 60 seconds पर समाप्त न हों। X-Forwarded-Proto $scheme header, N8N_PROXY_HOPS=1 का पूरक है: यह n8n को बताता है कि original request HTTPS थी, भले ही proxy इसे plain HTTP के माध्यम से प्राप्त कर रहा हो, ताकि n8n connection को insecure मानकर अपने स्वयं के cookie को reject न कर दे।
अपना पहला workflow, इसे वास्तविक बनाने के लिए
https://n8n.example.com/ खोलें, owner account बनाएँ (अगला section), और सबसे छोटा workflow बनाएँ जो यह सिद्ध करे कि path काम कर रहा है: एक webhook input, एक HTTP call, और एक response output.
- एक Webhook node जोड़ें। method को
POSTपर सेट करें और path कोhelloजैसा रखें। यह दो URLs दिखाता है, एक Test URL और एक Production URL — यही आधे "मेरा webhook काम नहीं कर रहा" की शिकायतों का कारण है। Test URL केवल एक call का उत्तर देता है, और वह भी केवल तब जब आपने Listen for test event पर क्लिक किया हो; इसके बाद यह expire हो जाता है। Production URL तब उत्तर देता है जब workflow Active होता है। - इसके बाद एक HTTP Request node जोड़ें, जिसे किसी भी public JSON API पर point करें —
https://api.github.com/zenको GET करने पर एक one-line string मिलती है, जो पर्याप्त है। - एक Respond to Webhook node जोड़ें, और Webhook node के Respond option को "Using Respond to Webhook node" पर सेट करें ताकि caller को HTTP node का output वापस मिल सके।
- workflow को Active (top right) करें और इसे call करें:
curl -X POST https://n8n.example.com/webhook/hello। आपको वापस वही zen line मिलनी चाहिए — POST input, API call, response output; यही अधिकांश वास्तविक automations का स्वरूप है।
एक scheduled variant Webhook node को Schedule Trigger से बदल देता है और इसके बजाय एक model endpoint को call करता है — Ollama running on the same VPS से self-hosted endpoint का उपयोग करना nightly summariser बनाने का एक सरल तरीका है।
User management, basic auth नहीं
पुराने n8n guides में N8N_BASIC_AUTH_ACTIVE=true सेट करने के लिए कहा गया है। n8n 1.0 में इन variables को हटा दिया गया है और अब इनका कोई उपयोग नहीं है। आज authentication का आधार owner account है: जब आप पहली बार editor लोड करते हैं, तो n8n आपको एक email-and-password owner बनाने के लिए कहता है। यह प्रक्रिया अनिवार्य है — इसमें कोई anonymous mode नहीं है। पहली बार boot होने के तुरंत बाद इसे बना लें, इससे पहले कि आप किसी को URL दें: docker compose up और उस पहले form submission के बीच, जो भी instance तक पहले पहुँचेगा, वह उसे claim कर सकता है। ऊपर से एक reverse-proxy basic-auth layer लगाना एक अतिरिक्त सुरक्षा है, लेकिन यह second factor है, असली authentication नहीं।
Backups: पहले encryption key, फिर database
दो चीज़ों का backup लेना आवश्यक है, और दोनों को बदलना एक समान नहीं है।
The N8N_ENCRYPTION_KEY. n8n में आपके द्वारा स्टोर किए गए सभी credentials — जैसे API tokens, database passwords, OAuth secrets — इस key के साथ encrypted रहते हैं। बिना इसके Postgres में मौजूद workflows बेकार हैं: यदि आप database को किसी नए box पर अलग key के साथ restore करते हैं, तो n8n किसी भी credential को decrypt नहीं कर पाएगा; इसे recover या reset नहीं किया जा सकता। आपकी .env file में यह key होती है; इसे बनाने के तुरंत बाद server से बाहर कहीं सुरक्षित रखें — password-manager का उपयोग करना सबसे अच्छा है। यह सबसे महत्वपूर्ण backup है।
The Postgres database, workflows, execution history और encrypted credentials के लिए:
docker compose exec -T postgres pg_dump -U n8n -d n8n \
| gzip > n8n-db-$(date +%F).sql.gzइसे एक schedule पर चलाएं और dump को server से बाहर copy करें। नए VPS पर restore करने के लिए: पहले stack को start करें ताकि database बन जाए, n8n को stop करें, psql का उपयोग करके dump को load करें, N8N_ENCRYPTION_KEY को .env में डालें, और n8n को start करें। वही key और dump मिलकर एक working instance बनाते हैं; नई key के साथ workflows तो मिलेंगे, लेकिन वे किसी भी credential का उपयोग नहीं कर पाएंगे।
Upgrades: tag ko pin karein
Compose file jaan-बूझकर latest के बजाय n8nio/n8n:2.29.10 को pin करती है। n8n हर हफ्ते एक नया minor version release करता है और कभी-कभी database schema या node behaviour बदल देता है। इसलिए latest का मतलब है कि unattended pull से आपको ऐसा build मिल सकता है जो start होते ही आपके database को migrate कर दे। एक version pin करें, version update करने से पहले release notes पढ़ें — n8n वहां breaking changes के बारे में बताता है — और upgrade को सोच-समझकर करें:
docker compose exec -T postgres pg_dump -U n8n -d n8n | gzip > pre-upgrade.sql.gz
# edit the image tag in docker-compose.yml, then:
docker compose pull n8n
docker compose up -d n8n
docker compose logs -f n8nMajor-version jumps में यह सबसे महत्वपूर्ण होता है। उदाहरण के लिए, 2.0 line ने default रूप से N8N_BLOCK_ENV_ACCESS_IN_NODE को true में बदल दिया, इसलिए कोई भी Code node जो process.env पढ़ता था, वह तब तक access खो देगा जब तक आप उसे वापस false पर सेट नहीं कर देते; इसी release ने settings file पर strict permissions लागू करना शुरू कर दिया था। Major boundary पार करने से पहले 2.0 breaking-changes page पढ़ें। n8n start होते ही सभी आवश्यक database migrations automatically चलाता है — यही कारण है कि upgrade से पहले pg_dump करना अनिवार्य है। चूंकि credentials .env में एक key के साथ encrypted रहते हैं और data Postgres में रहता है, इसलिए containers disposable हैं: आप उन्हें replace करके upgrade कर सकते हैं, और पिछले tag को pin करके और dump को restore करके roll back कर सकते हैं।
Failure modes, with the strings you will see
The requested webhook "POST hello" is not registered. Webhook call fails with 404 error. Yeh tab hota hai jab workflow Active nahi hai, ya test path par koi listener nahi hai. Test paths (/webhook-test/...) tabhi response dete hain jab aapne "Listen for test event" par click kiya ho; production paths (/webhook/...) tabhi response dete hain jab workflow toggle on ho. Sibling This webhook is not registered for GET requests. Did you mean to make a POST request? ka matlab hai ki method galat hai — node POST expect kar raha hai aur aapne GET bheja hai.
The webhook URL shows a :5678 or localhost. Node https://n8n.example.com:5678/webhook/... ya http://localhost:5678/... dikhata hai. WEBHOOK_URL unset ya galat hai, isliye n8n ne aapke public base ke bajaye N8N_HOST:N8N_PORT se address banaya hai. WEBHOOK_URL=https://n8n.example.com/ set karein, docker compose up -d ke saath container ko recreate karein, aur port ki samasya solve ho jayegi.
There was a problem loading init data browser mein. Editor load ho gaya hai lekin apne backend API tak nahi pahunch pa raha hai. Proxy ke peeche, yeh aksar galat N8N_HOST ya WEBHOOK_URL, WebSocket Upgrade headers ki kami, ya N8N_PROTOCOL ka connection mismatch hone ke karan hota hai. Charon public-facing variables aur proxy ke Upgrade aur Connection forwarding ko confirm karein.
password authentication failed for user "n8n" logs mein, container restart ho raha hai. n8n dwara bheja gaya password database ke initial password se match nahi karta. Samasya: Postgres POSTGRES_PASSWORD ko sirf tab padhta hai jab woh ek empty data directory ko initialise karta hai. Stack ko ek baar start karein, phir .env mein POSTGRES_PASSWORD badlein, aur existing postgres_data volume mein purana password hi rahega. Ise wapas original par set karein, ya agar aapko data nahi chahiye, toh postgres volume ko docker compose down aur docker volume rm karein, phir ise fresh start karein.
EACCES: permission denied, open '/home/node/.n8n/config' start hote waqt. n8n node user (UID 1000) ke roop mein chalta hai aur apne config directory mein write nahi kar sakta. Yeh un logo ke liye hota hai jo root dwara owned host folder (./n8n_data:/home/node/.n8n) ko bind-mount karte hain. Upar diye gaye named volume ka upyog karein, ya agar aap bind mount hi chahte hain, toh pehle sudo chown -R 1000:1000 ./n8n_data karein.
Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. Changing permissions to 0600.. n8n ki 2.x line se default roop mein settings file par 0600 enforce karta hai aur boot ke waqt ise khud fix kar leta hai — is log line ka matlab hai ki isne mode ko pehle hi sahi kar diya hai, aksar bind mount ke baad ya restore ke baad file loose permissions ke saath wapas aane par. Kisi action ki zaroorat nahi hai; N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false tabhi set karein agar aapka filesystem permissions support nahi kar sakta.
Mismatching encryption keys — poori line batati hai ki settings file mein encryption key /home/node/.n8n/config aapke environment ki N8N_ENCRYPTION_KEY se match nahi karti. Aapke environment ki key us key se alag hai jo n8n ne pichle run mein apne data volume mein likhi thi — aksar isliye kyunki n8n ne pehle boot ke waqt random key generate ki thi jab variable unset tha, aur phir aapne koi doosri key set kar di. Original key ko .env mein wapas daalein, ya, agar aapke paas koi important credentials nahi hain, toh n8n_data volume ke andar config file ko delete kar dein aur n8n ko ise regenerate karne dein — yeh maante hue ki purane credentials unreadable ho jayenge.
A login banner about secure cookies: Your n8n server is configured to use a secure cookie, however you are either visiting this via an insecure URL, or using Safari. Aapne N8N_PROTOCOL=https set kiya hai lekin n8n tak plain HTTP ke zariye pahunche — aam taur par HTTPS proxy ke bajaye direct IP aur port ka upyog karke. https://n8n.example.com/ ke zariye connect karein. N8N_SECURE_COOKIE=false sirf tabhi set karein agar aap sach mein HTTPS ka upyog nahi kar sakte, aur kabhi bhi internet-facing box par nahi.
In workflows ke andar language model lagane ke liye, building AI workflows with Claude and n8n dekhein.
FAQ
क्या मुझे n8n के लिए SQLite या Postgres का उपयोग करना चाहिए?
SQLite (default) n8n को आज़माने के लिए और एक समय में एक workflow चलाने वाले personal instance के लिए ठीक है। यदि आपका काम महत्वपूर्ण है, तो Postgres पर स्विच करें: concurrency के दौरान SQLite का single writer lock database is locked का कारण बनता है, जबकि Postgres pg_dump के साथ cleanly backup लेता है। बाद में migration मैन्युअल होता है, इसलिए यदि server महत्वपूर्ण है, तो Postgres से शुरुआत करें।
मेरे n8n webhooks कभी fire क्यों नहीं होते?
लगभग हमेशा WEBHOOK_URL। यदि N8N_HOST:N8N_PORT unset या गलत है, तो n8n ऐसे webhook addresses प्रिंट करता है जिनमें :5678 या localhost हो सकता है — जो वैध दिखते हैं लेकिन internet से unreachable होते हैं, इसलिए caller के requests कभी नहीं पहुँच पाते। WEBHOOK_URL=https://n8n.example.com/ सेट करें और पुष्टि करें कि node में बिना port वाला URL दिख रहा है। दूसरा कारण ऐसे webhook को call करना है जिसका workflow Active नहीं है, जिससे The requested webhook ... is not registered. मिलता है।
मुझे n8n में क्या backup करना चाहिए?
दो चीजें। आपके .env file से N8N_ENCRYPTION_KEY, क्योंकि हर stored credential इसके साथ encrypted होता है और इसे खोने पर वे permanently undecryptable हो जाते हैं — इसे बनाने वाले दिन ही server से कॉपी कर लें। और workflows, history और credentials के लिए Postgres database का pg_dump। Restore करने के लिए दोनों की आवश्यकता होती है: वही key और dump।
मैं n8n को HTTPS के पीछे कैसे रखूँ?
n8n port 5678 पर plain HTTP सर्व करता है; इसके आगे एक reverse proxy TLS को terminate करता है। n8n को 127.0.0.1:5678 से bind करें ताकि केवल proxy ही इसे पहुँच सके, फिर automatic certificates के साथ Traefik या Let's Encrypt certificate के साथ nginx का उपयोग करें। N8N_PROTOCOL=https और WEBHOOK_URL=https://your-host/ सेट करें, और सुनिश्चित करें कि proxy WebSocket Upgrade headers को forward करता है, अन्यथा editor hang हो जाएगा।
मैं n8n को safely कैसे upgrade करूँ?
latest के बजाय एक specific image tag का उपयोग करें, पहले pg_dump लें क्योंकि n8n start होते ही migrations automatically चलाता है, breaking changes के लिए release notes पढ़ें, फिर tag बदलें और docker compose pull n8n && docker compose up -d n8n चलाएँ। Container disposable है, इसलिए पिछले tag को pin करके और upgrade से पहले वाला dump restore करके roll back करें।