SSD Nodes Learn
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-07-24

VPS वर n8n Docker आणि HTTPS मध्ये कसे सेट करावे

Docker Compose, Postgres आणि HTTPS वापरून n8n सेट करा. WEBHOOK_URL आणि encryption-key संबंधित त्रुटी टाळण्यासाठी हा सविस्तर मार्गदर्शक वाचा.

तुम्ही काय तयार करत आहात

n8n हे workflow automation tool आहे: हा एक visual editor आहे जिथे trigger — जसे की webhook, schedule, किंवा form submission — nodes ची एक साखळी सुरू करते. या nodes APIs कॉल करतात, डेटा reshape करतात आणि इतर systems मध्ये डेटा लिहितात. AI-agent workflows साठी हे एक standard tool बनले आहे, कारण तुम्हाला कोणताही नवीन service लिहिण्याची गरज पडण्यापूर्वीच ते सर्व model providers आणि databases सोबत संवाद साधू शकते. एका docker run ला दोन मिनिटांत कार्यरत editor मिळते. हा guide उर्वरित 90 टक्के कामाबद्दल आहे: default SQLite file ऐवजी Postgres वापरून system अधिक durable बनवणे, HTTPS द्वारे accessible करणे आणि — जिथे बहुतेक लोक चुका करतात तो भाग — webhooks साठी असा URL तयार करणे जो बाहेरील जग (outside world) प्रत्यक्षात reach करू शकेल.

तयार झालेली stack एका Docker network वरील दोन containers आहे: n8n स्वतः, आणि workflows व credentials साठवणारा एक Postgres database. host वरील reverse proxy TLS terminate करतो आणि localhost वरील n8n कडे traffic forward करतो, त्यामुळे proxy शिवाय इंटरनेटवर काहीही थेट उपलब्ध नसते. हे 2026 self-hosting shortlist मधील इतर services सोबत समाविष्ट आहे.

पूर्वअटी आणि मर्यादा

तुम्हाला किमान 1 GB RAM असलेला VPS आवश्यक आहे; जेव्हा workflows प्रत्यक्ष काम करू लागतील तेव्हा 2 GB साठी नियोजन करा. याचे कारण असे की, executions आणि Node.js runtime मुळे मेमरीचा वापर वाढतो आणि रनिंग दरम्यान container बंद होणे (out-of-memory killer मुळे) ही एक कठीण समस्या आहे. सुरुवातीला एक single vCPU पुरेसा आहे.

तुम्हाला एक domain किंवा subdomain — उदा. n8n.example.com — आवश्यक आहे. सर्टिफिकेट Request करण्यापूर्वी त्यामध्ये A record VPS च्या public IP कडे निर्देशित (pointing) केलेला असावा. Proxy साठी 80 आणि 443 ports उघडे (open) असणे आवश्यक आहे; n8n चा 5678 port इंटरनेटसाठी उघडा नसावा. तुम्हाला Docker Engine आणि Compose plugin आवश्यक आहे; जर docker compose version मध्ये docker: 'compose' is not a docker command एरर येत असेल, तर तुमच्याकडे जुनी standalone binary आहे आणि plugin sudo apt install docker-compose-plugin आहे.

SQLite चा वापर चाचणीसाठी ठीक आहे, परंतु महत्त्वाच्या कामांसाठी Postgres वापरा

n8n चा default database /home/node/.n8n/database.sqlite येथे असलेला SQLite file आहे. केवळ चाचणीसाठी (kicking the tyres) तो पुरेसा आहे — जर तुम्ही volume mount केले नाही, तर container पुन्हा तयार करताना (recreate) सर्व डेटा निघून जाईल, जो एक महत्त्वाचा धडा आहे. Postgres कडे वळण्याचे मुख्य कारण वेग (speed) नसून SQLite ची मर्यादा आहे; SQLite मध्ये single writer lock असतो. त्यामुळे एकाच वेळी अनेक workflows चालवताना किंवा queue mode वापरताना concurrency मुळे SQLITE_BUSY: database is locked त्रुटी येते. Postgres मध्ये अशा मर्यादा नाहीत, ते pg_dump द्वारे व्यवस्थित backup घेता येते, आणि n8n च्या अधिकृत डॉक्युमेंटेशनमध्ये देखील महत्त्वाच्या server साठी Postgres वापरण्याचा सल्ला दिला आहे. नंतर बदल करणे म्हणजे डेटा मॅन्युअली migrate करणे होय, त्यामुळे जर हा server महत्त्वाचा असेल, तर सुरुवातीपासूनच Postgres वापरा.

DNS आणि firewall

प्रथम record पॉइंट करा आणि ports उघडा, जेणेकरून नंतरच्या certificate स्टेपमध्ये नाव resolve न झाल्यामुळे त्रुटी (fail) येणार नाही.

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 enable

5678 पोर्ट उघडू नका. compose file n8n ला 127.0.0.1:5678 ला bind करते, त्यामुळे फक्त host चा reverse proxy त्याला reach करू शकतो; 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 मुळे boot होताना n8n आणि Postgres यांच्यात स्पर्धा (race condition) होत नाही; याशिवाय n8n सुरू होते, डेटाबेस सापडत नाही आणि प्रक्रिया थांबते (exits). /home/node/.n8n मधील n8n_data हा named volume encryption key आणि SQLite साठी डेटाबेस साठवतो — हा असा एकमेव directory आहे जो तुम्ही गमावू नये. Image साठी नेहमी एक निश्चित version वापरा, latest वापरू नका; याची कारणे खालील upgrade section मध्ये दिली आहेत.

The secrets file

Compose file मध्ये कधीही passwords ठेवू नका. त्याऐवजी, त्याच्या शेजारी एक .env file ठेवा जी Compose आपोआप वाचू शकेल. पासवर्ड्स खरोखर 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 आहे — सर्व stored credentials याच key ने encrypt केली जातात. n8n ला स्वतः key generate करू न देता, ती तुम्ही स्पष्टपणे (explicitly) सेट करा; कारण तुम्ही स्वतः generate केलेली value तुम्ही लिहून ठेवू शकता आणि नंतर restore करू शकता. एकदा n8n ने या key वापरून पहिले credential encrypt केले की, ती key बदलल्यास सर्व credentials undecryptable होतील — म्हणून ती एकदाच सेट करा आणि त्या line ला पुन्हा कधीही स्पर्श करू नका.

Webhooks कार्यान्वित होतील की नाही हे ठरवणारे env vars

n8n बाह्य जगाला स्वतःची माहिती कशी देईल हे चार variables नियंत्रित करतात. या variables चुकीच्या असल्यास n8n संदर्भात सर्वाधिक सपोर्ट प्रश्न विचारले जातात.

  • N8N_HOST हा public hostname आहे, n8n.example.com. जर तुम्ही proxy वापरत असाल आणि हे localhost वर ठेवले, तर editor तुमच्या browser मध्ये localhost कडून स्वतःची API लोड करण्याचा प्रयत्न करतो, ज्यामुळे त्रुटी येते.
  • N8N_PROTOCOL=https n8n ला TLS द्वारे सेवा दिली जात आहे हे सांगते, ज्यामुळे ते its session cookie Secure मार्क करते आणि https:// URLs तयार करते.
  • N8N_PORT=5678 हा तो port आहे ज्यावर n8n container च्या आत listen करते. हा public port नाही; 443 हा port proxy कडे असतो.
  • WEBHOOK_URL=https://n8n.example.com/ मुळे मुख्य समस्या उद्भवते. Stripe, GitHub किंवा कोणत्याही बाह्य caller मध्ये तुम्ही paste केलेले webhook addresses n8n या values वरून तयार करते. जर हे unset किंवा चुकीचे असेल, तर n8n N8N_HOST:N8N_PORT कडे वळते आणि तुम्हाला https://n8n.example.com:5678/webhook/... किंवा, अधिक वाईट म्हणजे, http://localhost:5678/webhook/... देते — जे कोणतीही error न दाखवता, योग्य वाटणारे पण internet वरून unreachable असतात, त्यामुळे caller कडील requests शांतपणे पोहचत नाहीत. याला शेवटी slash असलेला अचूक public base URL सेट करा, आणि त्यानंतर webhook node मध्ये port शिवाय URL दिसत असल्याची खात्री करा.

N8N_PROXY_HOPS=1 n8n च्या Express server ला त्याच्या समोर असलेल्या एका proxy वर विश्वास ठेवण्यास सांगते, ज्यामुळे rate-limiting आणि client IP वाचणाऱ्या सर्व features ला proxy ऐवजी खरा address दिसतो. येथे आपण मुद्दाम not सेट केलेले एक variable म्हणजे N8N_RUNNERS_ENABLED: task runners — n8n मधील Code-node logic एका वेगळ्या sandboxed process मध्ये चालवणे — हे 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

यशस्वी पहिल्या बूट प्रक्रियेच्या शेवटी Editor is now accessible via: ओळ येईल आणि त्याच्या वर n8n ready on ..., port 5678 ओळ असेल. docker compose ps मध्ये दोन्ही कंटेनर Up दिसले पाहिजेत आणि postgres (healthy) असावा. जर n8n Restarting लूपमध्ये अडकले असेल, तर लॉग्स तपासा — याचे मुख्य कारण डेटाबेस कनेक्शन किंवा खाली दिलेल्या वॉल्यूम परमिशनमधील त्रुटी असू शकते.

TLS with a reverse proxy

n8n स्वतः 5678 पोर्टवर plain HTTP वापरते; त्याआधीचा घटक HTTPS टर्मिनेट करतो. यासाठी दोन सोपे पर्याय आहेत.

जर तुम्ही आधीच अनेक containers वापरत असाल, तर n8n ला Traefik reverse proxy च्या मागे ठेवा जो आपोआप TLS certificates जारी करतो. यासाठी काही labels वापरा — Traefik तुमच्यासाठी certificate request आणि renew करतो.

जर या मशीनवर हे एकमेव 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 पाठवते. या दोन ओळींशिवाय, 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 ला सांगते की मूळ request HTTPS होता, जरी proxy द्वारे तो plain HTTP वर येत असला तरी. यामुळे n8n कनेक्शन insecure आहे असे मानून स्वतःचे cookie reject करत नाही.

तुमचा पहिला workflow, प्रत्यक्ष अंमलबजावणीसाठी

https://n8n.example.com/ उघडा, owner account तयार करा (पुढील विभाग पहा), आणि मार्ग (path) काम करतो हे सिद्ध करण्यासाठी सर्वात लहान workflow तयार करा: एक webhook इनपुट, एक HTTP call, आणि एक response आउटपुट.

  1. एक Webhook node जोडा. method POST सेट करा आणि path hello सारखा ठेवा. यामध्ये दोन URLs दिसतात: एक Test URL आणि एक Production URL — "माझा webhook काम करत नाहीये" अशा तक्रारींचे हे मुख्य कारण आहे. Test URL फक्त एकच call स्वीकारते आणि फक्त तेव्हाच जेव्हा तुम्ही Listen for test event वर क्लिक केलेले असते; त्यानंतर ते expire होते. Production URL तेव्हाच प्रतिसाद देते जेव्हा workflow Active असतो.
  2. त्यानंतर एक HTTP Request node जोडा, जो कोणत्याही public JSON API कडे निर्देशित असेल — https://api.github.com/zen ला दिलेला GET request एक ओळीची string परत करतो, जे पुरेसे आहे.
  3. एक Respond to Webhook node जोडा, आणि Webhook node मधील Respond पर्याय "Using Respond to Webhook node" असा सेट करा, जेणेकरून caller ला HTTP node चे output परत मिळेल.
  4. workflow Active करा (वरच्या उजव्या कोपऱ्यात) आणि त्याला curl -X POST https://n8n.example.com/webhook/hello वर call करा. तुम्हाला ती zen line परत मिळायला हवी — POST इनपुट, API call, आणि response आउटपुट; हे बहुतेक वास्तविक automations चे स्वरूप आहे.

एक scheduled variant Webhook node च्या जागी Schedule Trigger वापरतो आणि त्याऐवजी model endpoint ला call करतो — Ollama running on the same VPS कडून self-hosted endpoint वापरणे हा nightly summariser तयार करण्याचा एक सोपा मार्ग आहे.

User management, not basic auth

जुने n8n मार्गदर्शक तुम्हाला 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 वर ताबा मिळवू शकतो. वरच्या बाजूला reverse-proxy basic-auth layer वापरणे हा एक अतिरिक्त सुरक्षा उपाय आहे, परंतु तो second factor आहे, खरे authentication नाही.

Backups: प्रथम encryption key, नंतर database

दोन गोष्टींचा backup घेणे आवश्यक आहे आणि त्या दोन्हीची विनिमेयता (replaceability) सारखी नाही.

The N8N_ENCRYPTION_KEY. n8n मध्ये तुम्ही साठवलेली प्रत्येक credential — जसे की API tokens, database passwords, OAuth secrets — या key द्वारे encrypted असतात. या key शिवाय Postgres मधील workflows निरुपयोगी ठरतात: जर तुम्ही डेटाबेस दुसऱ्या सर्व्हरवर restore केला आणि तिथे वेगळी key असेल, तर n8n एकही credential decrypt करू शकणार नाही; यासाठी कोणताही recovery किंवा reset पर्याय उपलब्ध नाही. तुमची .env फाईल ही key साठवते; ती तयार केल्यावर लगेचच सर्व्हरच्या बाहेर कुठे तरी तिची प्रत (copy) सुरक्षित ठेवा — 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

हा command एका schedule वर चालवा आणि dump सर्व्हरच्या बाहेर copy करा. नवीन VPS वर restore करण्यासाठी: प्रथम stack सुरू करा जेणेकरून database तयार होईल, n8n थांबवा, psql वापरून dump लोड करा, तीच N8N_ENCRYPTION_KEY .env मध्ये टाका, आणि n8n सुरू करा. जर तुमच्याकडे तीच key आणि dump असेल, तर instance व्यवस्थित चालेल; परंतु नवीन key असल्यास workflows मध्ये एकही credential वापरता येणार नाही.

Upgrades: pin the tag

compose file मुद्दाम n8nio/n8n:2.29.10 ऐवजी latest pin करते. n8n दर आठवड्याला नवीन minor version releases करते आणि कधीकधी त्यामध्ये database schema किंवा node behaviour बदलले जाते. त्यामुळे latest मुळे unattended pull केल्यास, container सुरू होताच तुमची database migrate होऊ शकते. version pin करा, version bump करण्यापूर्वी 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 n8n

Major-version jumps मध्ये हे सर्वात महत्त्वाचे असते. उदाहरणार्थ, 2.0 line मध्ये default प्रमाणे N8N_BLOCK_ENV_ACCESS_IN_NODE बदलून true करण्यात आले आहे. त्यामुळे process.env वाचणारा कोणताही Code node, जोपर्यंत तुम्ही तो पुन्हा false वर सेट करत नाही, तोपर्यंत त्याचा access गमावून बसतो; याच release मध्ये settings file वर strict permissions लागू करण्यास सुरुवात झाली. major boundary पार करण्यापूर्वी 2.0 breaking-changes page वाचा. n8n सुरू होताना आवश्यक migrations आपोआप राबवते — म्हणूनच upgrade करण्यापूर्वी pg_dump करणे अनिवार्य आहे. credentials हे .env मधील key सह encrypted स्वरूपात असतात आणि data Postgres मध्ये असतो, त्यामुळे containers disposable आहेत: तुम्ही them replace करून upgrade करू शकता, आणि मागील tag pin करून व dump restore करून roll back करू शकता.

Failure modes, with the strings you will see

The requested webhook "POST hello" is not registered. जर workflow Active नसेल किंवा test path ला कोणीही 'listen' करत नसेल, तर webhook कॉल केल्यावर 404 error येईल. Test paths (/webhook-test/...) फक्त तेव्हाच प्रतिसाद देतात जेव्हा तुम्ही "Listen for test event" वर क्लिक केलेले असते; production paths (/webhook/...) फक्त workflow toggle चालू असतानाच प्रतिसाद देतात. शेजारील This webhook is not registered for GET requests. Did you mean to make a POST request? चा अर्थ असा आहे की method चुकीचा आहे — node ला POST अपेक्षित आहे आणि तुम्ही GET पाठवला आहे.

Webhook URL मध्ये :5678 किंवा localhost दिसते. Node https://n8n.example.com:5678/webhook/... किंवा http://localhost:5678/... दर्शवते. WEBHOOK_URL unset किंवा चुकीचा आहे, म्हणून n8n ने तुमच्या public base ऐवजी N8N_HOST:N8N_PORT वरून address तयार केले आहे. WEBHOOK_URL=https://n8n.example.com/ सेट करा, docker compose up -d वापरून container पुन्हा तयार करा, आणि port ची समस्या सुटेल.

Browser मध्ये There was a problem loading init data. Editor लोड झाला आहे पण तो स्वतःच्या backend API ला reach करू शकत नाही. Proxy च्या मागे, हे सहसा चुकीचा N8N_HOST किंवा WEBHOOK_URL, WebSocket Upgrade headers नसलेला proxy, किंवा N8N_PROTOCOL आणि तुमच्या कनेक्शनमधील विसंगतीमुळे होते. चारही public-facing variables आणि proxy द्वारे Upgrade आणि Connection फॉरवर्ड होत असल्याची खात्री करा.

Logs मध्ये password authentication failed for user "n8n" आणि container restart होत आहे. n8n कडून पाठवला जाणारा password आणि database च्या initialization वेळी वापरलेला password मॅच होत नाहीये. मुख्य अडचण: Postgres POSTGRES_PASSWORD फक्त तेव्हाच वाचते जेव्हा तो empty data directory initialize करतो. Stack एकदा सुरू करा, त्यानंतर .env मधील POSTGRES_PASSWORD बदला, आणि अस्तित्वात असलेला postgres_data volume अजूनही जुना password धरून ठेवतो. ते पुन्हा मूळ पासवर्डवर सेट करा, किंवा जर तुम्हाला डेटा ठेवायचा नसेल, तर postgres volume docker compose down आणि docker volume rm करा, आणि मग नवीन पद्धतीने सुरू करा.

Start करताना EACCES: permission denied, open '/home/node/.n8n/config'. n8n node user (UID 1000) म्हणून चालते आणि त्याच्या config directory मध्ये write करू शकत नाही. हे अशा लोकांसाठी घडते जे root कडून मालकी असलेला host folder (./n8n_data:/home/node/.n8n) bind-mount करतात. वर दाखवलेला named volume वापरा, किंवा जर तुम्हाला bind mount वापरायचेच असेल, तर आधी sudo chown -R 1000:1000 ./n8n_data करा.

Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. Changing permissions to 0600.. n8n च्या 2.x line पासून, default प्रमाणे settings file वर 0600 लागू केले जाते आणि boot करताना ते स्वतः दुरुस्त करते — या log line चा अर्थ असा आहे की n8n ने mode आधीच दुरुस्त केला आहे, सामान्यतः bind mount नंतर किंवा restore करताना loose permissions सह फाईल कॉपी केल्यामुळे. कोणतीही कृती करण्याची गरज नाही; N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false फक्त तेव्हाच सेट करा जर तुमचे filesystem खरोखर permissions ला सपोर्ट करू शकत नसेल.

Mismatching encryption keys — पूर्ण line सांगते की settings file मधील encryption key /home/node/.n8n/config तुमच्या environment मधील N8N_ENCRYPTION_KEY शी मॅच होत नाही. तुमच्या environment मधील key आणि n8n ने मागील run मध्ये त्याच्या data volume मध्ये लिहिलेली key वेगळी आहे — बहुतेक वेळा n8n ने आधीच्या boot वेळी (जेव्हा variable unset होता) एक random key तयार केली असते आणि नंतर तुम्ही दुसरी key सेट केली असते. मूळ key पुन्हा .env मध्ये टाका, किंवा, जर तुमच्याकडे जपण्यासारखे कोणतेही credentials नसतील, तर n8n_data volume मधील config फाईल डिलीट करा आणि n8n ला ती पुन्हा तयार करू द्या — हे लक्षात घेऊन की जुने credentials वाचता येणार नाहीत.

Secure cookies बद्दल login banner: Your n8n server is configured to use a secure cookie, however you are either visiting this via an insecure URL, or using Safari. तुम्ही N8N_PROTOCOL=https सेट केले आहे पण n8n ला plain HTTP वरून एक्सेस करत आहात — सहसा HTTPS proxy ऐवजी थेट IP आणि port वापरल्यामुळे. https://n8n.example.com/ द्वारे एक्सेस करा. जर तुम्हाला खरोखर HTTPS वापरता येत नसेल तरच N8N_SECURE_COOKIE=false सेट करा, आणि इंटरनेटवर असलेल्या सर्व्हरवर हे कधीही करू नका.

या workflows मध्ये language model समाविष्ट करण्यासाठी, building AI workflows with Claude and n8n पहा.

FAQ

n8n साठी मी SQLite वापरायला हवे की Postgres?

n8n चा वापर करून पाहण्यासाठी किंवा एका वेळी एक workflow चालवणाऱ्या वैयक्तिक instance साठी SQLite (default) ठीक आहे. जर तुम्हाला n8n वर अवलंबून राहायचे असेल, तर Postgres कडे वळा: concurrency दरम्यान SQLite च्या single writer lock मुळे database is locked त्रुटी येते, आणि Postgres मध्ये pg_dump द्वारे सुलभ बॅकअप घेता येतो. नंतर migration करणे मॅन्युअल असते, त्यामुळे जर तुमचा डेटा महत्त्वाचा असेल, तर Postgres पासून सुरुवात करा.

माझे n8n webhooks कधीच का चालत नाहीत?

बहुतेक वेळा हे WEBHOOK_URL मुळे होते. जर N8N_HOST:N8N_PORT चुकीचे किंवा unset असेल, तर n8n त्यावरून webhook addresses तयार करते — ज्यामध्ये अनेकदा :5678 किंवा localhost असते — जे वैध वाटतात पण इंटरनेटवरून त्यापर्यंत पोहोचता येत नाहीत, त्यामुळे caller कडून येणाऱ्या requests कधीच पोहोचत नाहीत. WEBHOOK_URL=https://n8n.example.com/ सेट करा आणि node मध्ये पोर्टशिवाय URL दिसत आहे याची खात्री करा. दुसरे कारण म्हणजे असा webhook कॉल करणे ज्याचा workflow 'Active' मोडमध्ये नाही, ज्यामुळे The requested webhook ... is not registered. एरर येते.

n8n मध्ये मला कशाचा बॅकअप घेणे आवश्यक आहे?

दोन गोष्टी. तुमच्या .env फाईलमधील N8N_ENCRYPTION_KEY, कारण प्रत्येक stored credential त्याद्वारे encrypt केले जाते आणि ती फाईल गमावल्यास ते कायमचे undecryptable होतील — फाईल तयार झाल्याच्या दिवशीच ती सर्व्हरवरून कॉपी करून ठेवा. आणि workflows, history आणि credentials साठी Postgres database चा pg_dump. रिस्टोर करण्यासाठी दोन्ही गोष्टी आवश्यक आहेत: तीच key आणि dump.

मी n8n ला HTTPS च्या मागे कसे ठेवाल?

n8n पोर्ट 5678 वर plain HTTP सर्व्ह करते; त्यासमोर एक reverse proxy TLS टर्मिनेट करतो. 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 फॉरवर्ड केले आहेत याची खात्री करा, अन्यथा editor हँग होऊ शकतो.

मी n8n सुरक्षितपणे कसे upgrade करू?

latest ऐवजी एक विशिष्ट image tag वापरा, आधी pg_dump घ्या कारण n8n स्टार्टअपवर आपोआप migrations चालवते, breaking changes साठी release notes वाचा, त्यानंतर tag अपडेट करा आणि docker compose pull n8n && docker compose up -d n8n चालवा. कंटेनर विल्हेवाट लावण्यायोग्य (disposable) आहे, त्यामुळे मागील tag वापरून आणि upgrade करण्यापूर्वीचा dump रिस्टोर करून तुम्ही roll back करू शकता.