n8n: কী এবং Docker Compose দিয়ে VPS-এ কীভাবে ইনস্টল করবেন

5 মিনিট পড়া
Tropic
n8n: কী এবং Docker Compose দিয়ে VPS-এ কীভাবে ইনস্টল করবেন

VPS-এ n8n: manual ব্যস্ততা ছাড়াই নিজের automation platform

Website থেকে একটি request আসে। n8n data যাচাই করে, duplicate খোঁজে, একটি deal তৈরি করে, AI দিয়ে reply-এর draft বানায় এবং Telegram-এ manager-কে জানায়। সিদ্ধান্তের প্রয়োজন হলেই মানুষ যুক্ত হয়—browser tab-এর মধ্যে data সরানোর জন্য নয়।

নিচে n8n কীভাবে কাজ করে এবং PostgreSQL, HTTPS ও isolated code execution-সহ Docker Compose দিয়ে VPS-এ কীভাবে ইনস্টল করবেন তা দেখব।

সাত ধাপে n8n

ন্যূনতম launch plan:

  1. একটি VPS তৈরি করুন এবং n8n.example.com-এর মতো subdomain সেখানে point করুন।
  2. Docker ও Docker Compose ইনস্টল করুন।
  3. PostgreSQL, external task runner ও Caddy-সহ n8n চালু করুন।
  4. HTTPS-এ interface খুলে owner account তৈরি করুন।
  5. Telegram, CRM, email বা যেকোনো external API সংযুক্ত করুন।
  6. Error handling ও execution-data retention কনফিগার করুন।
  7. Database, data ও encryption key-এর backup স্বয়ংক্রিয় করুন।

ছোট production installation-এর জন্য 2 vCPU ও 4 GB RAM দিয়ে শুরু করা যুক্তিসঙ্গত। Testing-এর জন্য 2 GB প্রায়ই যথেষ্ট, কিন্তু PostgreSQL, Docker ও একসঙ্গে চলা process দ্রুত বাকি headroom ব্যবহার করে ফেলে।

n8n কী এবং কীভাবে কাজ করে

n8n হলো workflow automation platform। একটি workflow node দিয়ে তৈরি হয়: একটি node process শুরু করে, পরের node-গুলো data সংগ্রহ ও রূপান্তর করে, আর শেষ node action সম্পন্ন করে।

একটি সাধারণ workflow এমন হতে পারে:

Webhook → data validation → CRM → Telegram → website response

Webhook, schedule, email, message বা external service-এর event workflow চালু করতে পারে। Node-গুলোর মধ্যে condition, loop, filter, wait ও error handling ব্যবহার করা যায়।

n8n-এর একটি শক্তি হলো automation শুধু ready-made integration-এ সীমাবদ্ধ নয়। HTTP Request দিয়ে API-সহ যেকোনো service call করা যায়, আর Code node-এ JavaScript বা Python দিয়ে custom logic লেখা যায়। তাই n8n সাধারণ no-code builder এবং custom server-side code-এর মাঝামাঝি অবস্থান করে।

শুধু data forward করার চেয়ে বেশি

কোনো process একাধিক system জুড়ে চললে এবং সিদ্ধান্তের প্রয়োজন হলে n8n উপকারী:

form → validation → duplicate search → AI assessment → manager approval → CRM

মানুষকে শুধু control point-এ রাখা যায়। যেমন, AI reply তৈরি করবে, কিন্তু employee অনুমোদন করার পরেই customer-কে message পাঠানো হবে।

সাধারণ ব্যবহার:

  • sales ও support: request সংগ্রহ, lead assign এবং deal তৈরি;
  • content ও AI: draft তৈরি, inquiry শ্রেণিবিন্যাস এবং approval-এর পরে publish;
  • DevOps: outage notification, Git webhook ও API check;
  • internal operations: spreadsheet, email, calendar ও corporate system synchronize করা।

Self-hosted installation process ও database-এর ওপর control দেয়, কিন্তু external service-কে local করে না। Telegram, CRM বা cloud AI model-এ পাঠানো data VPS-এর বাইরে চলে যায়।

n8n Cloud নাকি নিজের server

Parametern8n CloudVPS-এ n8n
LaunchServer setup দরকার নেইDomain, Docker ও HTTPS প্রয়োজন
Updaten8n পরিচালনা করেOwner পরিচালনা করে
Database ও fileService-এর infrastructure-এনির্বাচিত server-এ
ScalingCloud plan অনুযায়ীস্বাধীনভাবে কনফিগার করা যায়
Responsibilityকম administrationBackup, security ও monitoring owner-এর দায়িত্ব
কার জন্যDevOps ছাড়া দ্রুত শুরুControl, customization ও always-on process

Community Edition নিজের server-এ বিনামূল্যে self-host করে ব্যক্তিগত ও internal business process-এ ব্যবহার করা যায়। তবে n8n traditional open-source license-এর অধীনে নয়, fair-code Sustainable Use License-এর অধীনে বিতরণ করা হয়। এটি internal use ও modification অনুমোদন করে, কিন্তু n8n deploy করে নিজের logo যোগ করে standalone SaaS হিসেবে access বিক্রি করার অনুমতি দেয় না। এমন product-এর জন্য license terms আলাদাভাবে যাচাই করা দরকার।

n8n-এর server requirements

Load data volume, concurrency এবং operation-এর ধরন অনুযায়ী বদলে যায়। File, দীর্ঘ list, Code node ও AI workflow API-র মধ্যে ছোট JSON payload পাঠানোর চেয়ে বেশি memory চায়।

ScenarioStarting configuration
Test ও personal text-based workflow1 vCPU, 2 GB RAM, 20 GB NVMe
Small production installation2 vCPU, 4 GB RAM, 25–40 GB NVMe
Concurrent process, AI বা file4 vCPU, 8 GB RAM বা বেশি
Queue mode-এ একাধিক worker processExecution volume অনুযায়ী মাপুন

শেখার জন্য এবং ছোট single-instance setup-এ SQLite উপযুক্ত। Production-এর জন্য PostgreSQL বেশি সুবিধাজনক: backup সহজ এবং পরে queue mode-এ migrate করা সরল।

VPS-এ n8n ইনস্টল করার উপায়

এই উদাহরণে Ubuntu 24.04, PostgreSQL, Caddy ও external task runner ব্যবহার করা হয়েছে। n8n.example.com এবং time zone নিজের value দিয়ে প্রতিস্থাপন করুন।

1. DNS কনফিগার করে server প্রস্তুত করুন

VPS-এর IPv4 address-এ নির্দেশ করা A DNS record তৈরি করুন, তারপর SSH দিয়ে সংযোগ করুন:

ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw openssl

Official repository থেকে Docker Engine ও Compose plugin ইনস্টল করুন:

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

apt update
apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin
docker compose version

শুধু SSH, HTTP ও HTTPS অনুমোদন করুন:

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

নতুন connection কাজ করছে নিশ্চিত না হওয়া পর্যন্ত বর্তমান SSH session বন্ধ করবেন না।

2. Environment variable তৈরি করুন

Directory প্রস্তুত করুন:

mkdir -p /opt/n8n
cd /opt/n8n

.env তৈরি করুন। নিচের command-গুলো PostgreSQL, n8n encryption ও task runner-এর জন্য আলাদা random secret তাৎক্ষণিকভাবে তৈরি করে:

cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin

POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)

N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF

chmod 600 .env

প্রথম launch-এর জন্য stable tag সুবিধাজনক। Installation যাচাই করার পর নির্দিষ্ট n8n version pin করা ভালো, যাতে পরের image update অপ্রত্যাশিতভাবে না ঘটে।

N8N_ENCRYPTION_KEY কখনো হারাবেন না। n8n এই key দিয়ে সংরক্ষিত password, token ও অন্যান্য credential encrypt করে। Key ছাড়া শুধু PostgreSQL restore করলে record database-এ থাকবে, কিন্তু n8n সেগুলো পড়তে পারবে না। N8N_ENCRYPTION_KEY কখনো হারাবেন না। n8n এই key দিয়ে সংরক্ষিত password, token ও অন্যান্য credential encrypt করে। Key ছাড়া শুধু PostgreSQL restore করলে record database-এ থাকবে, কিন্তু n8n সেগুলো পড়তে পারবে না।

3. Docker Compose file তৈরি করুন

compose.yaml তৈরি করুন:

services:
  postgres:
    image: postgres:18-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
    restart: unless-stopped
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: "5432"
      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
      DB_POSTGRESDB_USER: ${POSTGRES_USER}
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}

      N8N_HOST: ${N8N_HOST}
      N8N_PORT: "5678"
      N8N_PROTOCOL: https
      N8N_EDITOR_BASE_URL: https://${N8N_HOST}
      N8N_WEBHOOK_URL: https://${N8N_HOST}/
      N8N_PROXY_HOPS: "1"
      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      TZ: ${GENERIC_TIMEZONE}

      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
      N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"

      N8N_RUNNERS_MODE: external
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0

      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: "168"
      EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
    volumes:
      - n8n_data:/home/node/.n8n
    expose:
      - "5678"
    depends_on:
      postgres:
        condition: service_healthy

  n8n-runner:
    image: n8nio/runners:${N8N_VERSION}
    restart: unless-stopped
    environment:
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
    depends_on:
      - n8n

  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    environment:
      N8N_HOST: ${N8N_HOST}
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - n8n

volumes:
  postgres_data:
    name: n8n_postgres_data
  n8n_data:
    name: n8n_data
  caddy_data:
    name: n8n_caddy_data
  caddy_config:
    name: n8n_caddy_config

External task runner code আলাদাভাবে main n8n process থেকে execute করে। এটি internal mode-এর চেয়ে নিরাপদ এবং Code node-এর কোনো error editor ও webhook processing-কে প্রভাবিত করার সম্ভাবনা কমায়।

4. HTTPS চালু করুন

Caddyfile তৈরি করুন:

{$N8N_HOST} {
    reverse_proxy n8n:5678
}

DNS VPS-এ point করা এবং port 80 ও 443 reachable থাকলে Caddy স্বয়ংক্রিয়ভাবে TLS certificate নেবে। Internal port 5678 internet-এ প্রকাশিত নয়: বাইরে শুধু port 80 ও 443 available, আর Caddy Docker network দিয়ে n8n-এ access করে।

N8N_WEBHOOK_URLN8N_PROXY_HOPS variable দরকার, যাতে editor সঠিক public webhook address তৈরি করে এবং একটি reverse proxy থেকে আসা header trust করে।

5. n8n চালু করুন

Final configuration validate করে container চালু করুন:

docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddy

খুলুন:

https://n8n.example.com

Owner account তৈরি করুন। এর password সহকর্মীদের সঙ্গে share করবেন না: teamwork-এর জন্য আলাদা account ব্যবহার করুন এবং প্রত্যেককে প্রয়োজনীয় access-ই দিন।

আপনার প্রথম উপকারী workflow

Website থেকে আসা request process করা একটি ভালো test:

  1. Webhook node-এ POST method যোগ করুন।
  2. শুধু name, email address ও source রাখতে Edit Fields ব্যবহার করুন।
  3. Required data না থাকলে request reject করতে If node ব্যবহার করুন।
  4. CRM-এ deal তৈরি করুন অথবা HTTP Request দিয়ে request পাঠান।
  5. Telegram notification যোগ করুন।
  6. Respond to Webhook node দিয়ে chain শেষ করুন।
  7. Test-এর পর workflow activate করুন এবং test webhook-এর বদলে production URL ব্যবহার করুন।

এই উদাহরণে domain, HTTPS, incoming request, credential ও external integration একসঙ্গে যাচাই হয়। এরপর আলাদা Error Workflow যোগ করুন, যাতে main chain ব্যর্থ হলে আপনাকে notification পাঠায়।

Installation-এর পর n8n সুরক্ষিত করুন

ইনস্টল করা n8n স্বয়ংক্রিয়ভাবে নির্ভরযোগ্য হয় না। Launch-এর পর নিশ্চিত করুন:

  • editor শুধু HTTPS-এ accessible;
  • .env-এর permission 600 এবং এটি Git-এ commit করা হয়নি;
  • external API key-তে প্রয়োজনীয় minimum permission আছে;
  • প্রত্যেক webhook source-এর signature বা secret যাচাই করে;
  • execution history স্বয়ংক্রিয়ভাবে মুছে যায়;
  • critical workflow-এর error administrator-কে পাঠানো হয়।

Community node package হিসেবে install হয় এবং workflow data ও server-এ access পেতে পারে। Review না করে unknown node যোগ করবেন না। দরকার না হলে N8N_COMMUNITY_PACKAGES_ENABLED=false দিয়ে এগুলো disable করুন।

Built-in audit চালান:

docker compose exec n8n n8n audit

এটি unprotected webhook, ঝুঁকিপূর্ণ node ও credential issue চিহ্নিত করতে সাহায্য করে, কিন্তু manual review-এর বিকল্প নয়। এটি unprotected webhook, ঝুঁকিপূর্ণ node ও credential issue চিহ্নিত করতে সাহায্য করে, কিন্তু manual review-এর বিকল্প নয়।

Execution history ও personal data

Debugging-এর জন্য n8n input ও output data সংরক্ষণ করে। এর সঙ্গে email message, phone number, document ও API response database-এ থেকে যেতে পারে।

উপরের configuration-এ execution সাত দিন পরে মুছে যায় এবং সংখ্যা 10,000-এ সীমিত থাকে। Sensitive process-এর ক্ষেত্রে data-retention policy অনুযায়ী retention period বেছে নিন এবং workflow শেষ হওয়ার আগে অপ্রয়োজনীয় field সরিয়ে ফেলুন।

Backup ও update

Recovery-এর জন্য PostgreSQL dump, n8n_data volume, configuration file এবং N8N_ENCRYPTION_KEY-সহ .env দরকার। Copy করার আগে PostgreSQL চালু রেখে processor-গুলো বন্ধ করুন। এতে workflow execution-এ সাময়িক interruption হবে:

cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner

docker compose exec -T postgres sh -c \
  'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
  | gzip > "backup/n8n-db-$(date +%F).sql.gz"

docker run --rm \
  -v n8n_data:/source:ro \
  -v "$PWD/backup":/backup \
  alpine sh -c \
  'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'

tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
  .env compose.yaml Caddyfile

docker compose start n8n n8n-runner

.env থাকা archive-এ secret রয়েছে: এটি encrypt করে VPS-এর বাইরে সংরক্ষণ করুন। নিয়মিত test restore করে backup যাচাই করুন।

Update করার আগে backup তৈরি করুন এবং release notes পড়ুন:

cd /opt/n8n
docker compose pull
docker compose up -d
docker compose ps

Task runner ও main container-এ একই version tag ব্যবহার করতে হবে।

কখন scaling দরকার হয়

বাস্তব load না থাকা অবস্থায় Redis ও একাধিক worker দিয়ে শুরু করবেন না। PostgreSQL-সহ একটি single instance maintain করা সহজ এবং ছোট internal process-এর জন্য সাধারণত যথেষ্ট।

Long-running task webhook দেরি করালে, একসঙ্গে অনেক workflow শুরু হলে বা file processing নিয়মিত সব memory ব্যবহার করলে queue mode দরকার হয়। এই setup-এ main instance event গ্রহণ করে, Redis job distribute করে এবং worker-রা parallel-এ execute করে। সব component-কে একই PostgreSQL database-এ যুক্ত হতে হবে এবং একই N8N_ENCRYPTION_KEY ব্যবহার করতে হবে।

n8n-এর জন্য কোন VPS বেছে নেবেন

n8n, PostgreSQL, Caddy ও task runner একসঙ্গে চালাতে 2 vCPU, 4 GB RAM এবং NVMe drive দিয়ে শুরু করা যুক্তিসঙ্গত। tropic.host-এ Light plan এই configuration-এর সঙ্গে মেলে: 2 vCPU, 4 GB RAM এবং 25 GB NVMe। ভারী file processing ছাড়া প্রথম production workflow-এর জন্য এটি যথেষ্ট।

Document, বড় dataset এবং অনেক concurrent AI workflow-এর জন্য 8 GB RAM ভালো। Stable network-ও গুরুত্বপূর্ণ: webhook, OAuth callback ও scheduled job-কে সবসময় available থাকতে হবে।

উপসংহার

n8n পুনরাবৃত্ত কাজকে পরিষ্কার visual flow-তে পরিণত করে: ready-made node launch দ্রুত করে, HTTP Request প্রায় যেকোনো API-র সঙ্গে যুক্ত হয় এবং Code node নিজের logic যোগ করার সুযোগ দেয়।

Self-hosted version server ও database-এর ওপর control দেয়, কিন্তু HTTPS, সীমিত permission-সহ key, history cleanup এবং যাচাই করা backup প্রয়োজন। PostgreSQL-এর সঙ্গে N8N_ENCRYPTION_KEY সংরক্ষণ করুন: এটি ছাড়া restored credential decrypt করা যাবে না।

FAQ

n8n কি বিনামূল্যে ব্যবহার করা যায়?

হ্যাঁ। Community Edition নিজের server-এ ব্যক্তিগত ও internal process-এর জন্য বিনামূল্যে host করা যায়। Standalone SaaS হিসেবে hosted n8n পুনরায় বিক্রি করা fair-code license-এ সীমাবদ্ধ।

Domain ছাড়া কি n8n ইনস্টল করা যায়?

Local testing-এর জন্য যায়। Public webhook ও OAuth-এর জন্য domain ও HTTPS ব্যবহার করা ভালো।

n8n-এর কত RAM দরকার?

সাধারণ personal workflow 2 GB RAM-এ চলতে পারে। PostgreSQL, Caddy ও task runner-সহ n8n-এর জন্য 4 GB বেশি যুক্তিসঙ্গত; file ও concurrent execution-এর ক্ষেত্রে 8 GB বা বেশি লাগতে পারে।

সব data কি VPS-এর ভেতরেই থাকে?

Workflow অন্যত্র না পাঠালে থাকে। Database ও execution history VPS-এ সংরক্ষিত হয়, কিন্তু Telegram, CRM বা external AI-model node নির্বাচিত data সংশ্লিষ্ট service-এ পাঠায়।

n8n backup-এ কী রাখতে হবে?

PostgreSQL dump, n8n_data volume, compose.yaml, Caddyfile এবং N8N_ENCRYPTION_KEY-সহ .env। Backup encrypted অবস্থায় VPS-এর বাইরে রাখুন এবং restore করে যাচাই করুন।