Cài đặt n8n trên VPS: Thay thế Zapier, tiết kiệm chi phí & không giới hạn workflow

Tác giả: Trần Thảo 05 tháng 02, 2026

Trong kỷ nguyên số, Automation (Tự động hóa) không còn là lợi thế cạnh tranh mà là yếu tố sống còn. Các nền tảng SaaS như Zapier hay Make (trước đây là Integromat) rất tuyệt vời để bắt đầu, nhưng chi phí của chúng thường tăng theo cấp số nhân khi quy mô doanh nghiệp mở rộng.

Bạn có đang phải trả hàng trăm đô la mỗi tháng chỉ để đồng bộ dữ liệu đơn hàng? Đó là lúc giải pháp cài đặt n8n trên VPS (Self-hosted) trở thành lựa chọn tối ưu. Với n8n tự host, bạn làm chủ hoàn toàn dữ liệu, bảo mật tuyệt đối và đặc biệt: Không giới hạn số lượng quy trình chạy.

Bài viết này là tài liệu kỹ thuật chuyên sâu giúp bạn triển khai một hệ thống n8n chuẩn Production-ready, sử dụng các công nghệ tiêu chuẩn ngành như Docker, PostgreSQL và Caddy.

Tại sao Marketer và SMB nên chọn n8n self-hosted?

Sơ đồ kiến trúc n8n Queue Mode với Redis và Worker để xử lý tác vụ lớn.

Kiến trúc Queue Mode của n8n cho phép mở rộng hệ thống để xử lý hàng triệu tác vụ (Mô hình nâng cao khi doanh nghiệp tăng trưởng).

Trước khi đi vào triển khai kỹ thuật, hãy làm rõ bài toán kinh tế và mô hình bản quyền để bạn yên tâm đầu tư dài hạn.

Hiểu đúng về license (giấy phép) của n8n

n8n hoạt động theo mô hình Fair-code (thuộc giấy phép Sustainable Use License). Điều này mang lại lợi thế lớn cho doanh nghiệp:

  • Quyền lợi: Bạn được miễn phí 100% khi sử dụng cho mục đích nội bộ doanh nghiệp hoặc cá nhân.
  • Giới hạn: Bạn không được phép kinh doanh bằng cách bán lại dịch vụ hosting n8n cho người khác kiếm lời.

Bài toán chi phí: n8n vs. Zapier

Tiêu chí Zapier (Gói Professional) n8n trên VPS (Self-hosted)
Chi phí hàng tháng ~$49/tháng (2.000 tasks) ~$5 – $10/tháng (Tiền thuê VPS)
Giới hạn thực thi Bị giới hạn số tasks, mua thêm rất đắt Không giới hạn (Unlimited Executions)
Quyền riêng tư Dữ liệu đi qua máy chủ Zapier (Mỹ) Dữ liệu nằm trên VPS của bạn (Việt Nam/Sing…)
Cơ chế trigger Polling: 1-15 phút (tùy gói) Polling: Tùy chỉnh linh hoạt (Giây, Phút, Cron)
Độ trễ (latency) Phụ thuộc gói trả phí Real-time (Với Webhook)

Kết luận: Nếu doanh nghiệp của bạn thực hiện trên 5.000 tác vụ/tháng, chuyển sang n8n sẽ giúp tiết kiệm từ 500 – 2.000 USD/năm.

Chuẩn bị hạ tầng VPS: Cấu hình production

Để hệ thống chạy mượt mà, ổn định và không bị gián đoạn khi xử lý các file nặng hay hàng nghìn workflow cùng lúc, việc lựa chọn phần cứng phù hợp là bước đầu tiên quan trọng. Bạn có thể cân nhắc sử dụng Cloud VPS để đảm bảo khả năng mở rộng linh hoạt hơn so với VPS vật lý truyền thống.

Dưới đây là cấu hình tiêu chuẩn cho năm 2026:

  • CPU: Tối thiểu 2 vCPU để đảm bảo khả năng xử lý đa nhiệm.
  • RAM: Tối thiểu 2GB RAM (Khuyến nghị 4GB RAM).
    • Lưu ý kỹ thuật: n8n chạy cùng Database PostgreSQL và Web Server sẽ tiêu tốn tài nguyên đáng kể. Việc sử dụng các gói VPS 1GB RAM thường dẫn đến lỗi Out Of Memory (OOM), khiến hệ thống tự động khởi động lại khi tải cao.
  • Ổ cứng: 40GB NVMe SSD (Tốc độ đọc/ghi cao của NVMe giúp xử lý log và database nhanh hơn).
  • Hệ điều hành: Ubuntu 22.04 LTS hoặc 24.04 LTS.
  • Tên miền: Một subdomain (ví dụ: auto.tenmiencongty.com) đã trỏ về địa chỉ IP của VPS.

Hướng dẫn cài đặt n8n (quy trình chuẩn với Docker Official)

Chúng ta sẽ sử dụng Docker Compose để cài đặt. Đây là phương pháp hiện đại nhất, giúp dễ dàng sao lưu, nâng cấp và quản lý. Hệ thống bao gồm 3 thành phần được container hóa:

  1. n8n: Core xử lý workflow.
  2. PostgreSQL: Database lưu trữ dữ liệu (Mạnh mẽ và ổn định hơn SQLite mặc định).
  3. Caddy: Web Server đóng vai trò Reverse Proxy và tự động cấp chứng chỉ SSL (HTTPS).

Bước 1: Cài đặt Docker Engine từ official repository

Để đảm bảo tính ổn định và nhận được các bản vá bảo mật mới nhất, chúng ta sẽ cài đặt Docker từ kho lưu trữ chính thức thay vì kho mặc định của Ubuntu.

Hãy SSH vào VPS và chạy lần lượt các nhóm lệnh sau. Nếu bạn chưa quen thuộc với giao diện dòng lệnh, hãy tham khảo trước bài viết về Các lệnh Linux cơ bản cần biết để thao tác chính xác hơn.

1. Cập nhật và cài đặt các gói phụ thuộc:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

2. Thêm GPG Key chính thức của Docker:

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

3. Thêm repository vào nguồn APT:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Cài đặt Docker và Docker Compose:

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Kiểm tra cài đặt thành công bằng lệnh:

docker compose version

Bước 2: Thiết lập cấu trúc thư mục

Tạo một thư mục riêng để chứa các file cấu hình, giúp việc quản lý gọn gàng hơn:

mkdir n8n-docker

Di chuyển vào thư mục vừa tạo:

cd n8n-docker

Tiếp theo, tạo file cấu hình Docker Compose:

nano docker-compose.yml

Bước 3: Thiết lập file docker-compose.yml (bản tối ưu)

Đây là “trái tim” của hệ thống. File cấu hình dưới đây đã được tối ưu hóa với các tính năng quan trọng:

  • PostgreSQL Healthcheck: Đảm bảo Database khởi động xong mới bật n8n, tránh lỗi kết nối.
  • Data Pruning: Tự động xóa lịch sử chạy cũ để không làm đầy ổ cứng.
  • Security: Yêu cầu khóa mã hóa cố định để bảo vệ thông tin đăng nhập.

Lưu ý: Bạn cần thay thế các thông tin trong ngoặc vuông [...] bằng thông tin thực tế của bạn.

version: "3.7"

services:
  caddy:
    image: caddy:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - caddy_data:/data
      - caddy_config:/config
      - ./Caddyfile:/etc/caddy/Caddyfile

  postgres:
    image: postgres:16-alpine
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=YourStrongPassword2026! # [Thay đổi mật khẩu này]
      - POSTGRES_DB=n8n
    volumes:
      - db_storage:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h localhost -U n8n -d n8n"]
      interval: 5s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=auto.tenmiencongty.com # [Thay domain của bạn]
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://auto.tenmiencongty.com/ # [Thay domain của bạn]
      - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
      - TZ=Asia/Ho_Chi_Minh
      
      # Kết nối Database PostgreSQL
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=YourStrongPassword2026! # [Phải trùng với ở trên]
      
      # BẢO MẬT (RẤT QUAN TRỌNG)
      # Hãy tự nghĩ ra một chuỗi ký tự ngẫu nhiên dài và lưu lại
      - N8N_ENCRYPTION_KEY=Generate_Random_String_Longer_Than_16_Chars_Here! 
      
      # TỰ ĐỘNG DỌN DẸP DỮ LIỆU (Tránh đầy ổ cứng)
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168 # Xóa dữ liệu cũ hơn 7 ngày (168 giờ)
      - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 # Giữ tối đa 50k lượt chạy
      
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy

volumes:
  caddy_data:
  caddy_config:
  db_storage:
  n8n_data:

Nhấn Ctrl + O để lưu file và Ctrl + X để thoát trình soạn thảo.

Cảnh báo bảo mật: Chuỗi N8N_ENCRYPTION_KEY là khóa giải mã cho toàn bộ Credentials (kết nối Gmail, Slack, API…). Bạn bắt buộc phải lưu trữ chuỗi này vào nơi an toàn (như Password Manager). Nếu mất chuỗi này khi chuyển server, bạn sẽ không thể khôi phục các kết nối.

Bước 4: Cấu hình Caddy (auto HTTPS)

Caddy sẽ tự động xin chứng chỉ SSL từ Let’s Encrypt và gia hạn nó, giúp bạn có ngay kết nối HTTPS bảo mật mà không cần thao tác phức tạp.

Tạo file Caddyfile:

nano Caddyfile

Dán nội dung sau (thay thế bằng domain thực tế của bạn):

auto.tenmiencongty.com {
    reverse_proxy n8n:5678
}

Bước 5: Khởi chạy hệ thống

Tại thư mục n8n-docker, chạy lệnh sau để Docker tải xuống các image và khởi động container:

docker compose up -d

Quá trình này sẽ mất khoảng 1-2 phút tùy thuộc vào tốc độ mạng của VPS. Sau khi hoàn tất, hãy truy cập https://auto.tenmiencongty.com trên trình duyệt để bắt đầu thiết lập tài khoản Admin.

Thiết lập bảo mật & mẹo vận hành chuyên sâu

Hệ thống đã chạy, nhưng để vận hành an toàn và hiệu quả, bạn cần thực hiện các bước tinh chỉnh sau.

Bảo mật VPS với tường lửa (firewall)

Chúng ta chỉ nên mở các cổng thực sự cần thiết để ngăn chặn các cuộc tấn công quét cổng. Để hiểu rõ cơ chế hoạt động và cấu hình nâng cao hơn, bạn có thể xem hướng dẫn chi tiết về UFW là gì và cách cấu hình Firewall.

Thực hiện lần lượt các lệnh sau để mở cổng SSH (22), HTTP (80) và HTTPS (443):

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Quản lý Docker dễ dàng hơn

Nếu bạn cảm thấy việc quản lý n8n và Database qua dòng lệnh quá phức tạp, bạn có thể tham khảo cách Cài đặt Portainer trên VPS Linux. Đây là công cụ quản lý Docker qua giao diện web trực quan, giúp bạn xem log và restart service dễ dàng hơn rất nhiều.

Quản lý người dùng (user management)

Trong các phiên bản n8n hiện đại, tính năng đăng ký công khai (Public Signup) đã được tắt mặc định.

  • Chế độ Invite-only: Chỉ có tài khoản Owner (bạn) mới có quyền mời thành viên mới thông qua email. Điều này đảm bảo người lạ không thể tự ý đăng ký vào hệ thống của bạn.
  • Cách mời: Truy cập menu Users > Invite để thêm nhân viên vào workspace.

Mở khóa tính năng “Registered Community”

Để sử dụng các tính năng tiện ích như Folders (gom nhóm workflow) hay Debug in Editor, bạn cần kích hoạt phiên bản Registered Community (miễn phí):

  1. Vào Settings > Usage and plan.
  2. Nhập email doanh nghiệp của bạn vào phần đăng ký.
  3. Hệ thống sẽ mở khóa ngay lập tức các tính năng này mà không tốn phí.

Thực hành: Workflow tự động hóa đầu tiên

Giao diện thiết kế workflow kéo thả trên n8n tích hợp AI Agent và rẽ nhánh điều kiện.

Giao diện thiết kế Workflow trực quan trên n8n: Tích hợp AI Agent, bộ nhớ ngữ cảnh và rẽ nhánh điều kiện phức tạp mà không tốn thêm chi phí.

Để kiểm chứng hệ thống hoạt động hoàn hảo, hãy xây dựng một workflow “Hello World” đơn giản: Gửi thông báo về Telegram khi có sự kiện Webhook.

  1. Tạo Bot Telegram: Chat với @BotFather trên Telegram, gõ lệnh /newbot, đặt tên và nhận về API Token.
  2. Thiết lập trên n8n:
    • Tạo Workflow mới.
    • Thêm node Webhook (Chọn Method: GET, Path: test).
    • Thêm node Telegram.
    • Nối Webhook vào Telegram.
    • Trong node Telegram: Chọn Credential -> Create New -> Dán API Token vừa lấy. Nhập Chat ID và nội dung tin nhắn (ví dụ: “Hệ thống n8n đã online!”).
  3. Kiểm thử:
    • Nhấn Execute Workflow.
    • Copy “Test URL” từ node Webhook và dán vào trình duyệt.
    • Nếu điện thoại bạn rung lên với tin nhắn từ Bot -> Chúc mừng, bạn đã sở hữu một hệ thống Automation mạnh mẽ!

Bảo trì và cập nhật

Một hệ thống tự host đòi hỏi quy trình bảo trì tối thiểu để đảm bảo tính ổn định lâu dài.

Cách cập nhật phiên bản mới nhất:

n8n phát hành bản cập nhật rất thường xuyên. Để nâng cấp, bạn chỉ cần chạy các lệnh sau trong thư mục n8n-docker.

Tải phiên bản mới nhất:

docker compose pull

Khởi động lại container với image mới:

docker compose up -d

Sao lưu dữ liệu (backup):

Dữ liệu quan trọng nhất của bạn nằm trong 2 Docker Volume:

  1. db_storage: Chứa toàn bộ dữ liệu PostgreSQL.
  2. n8n_data: Chứa khóa mã hóa và các file cấu hình. Hãy đảm bảo bạn có quy trình sao lưu định kỳ (Snapshot VPS) hoặc sao lưu các thư mục này ra một nơi lưu trữ khác.

Bạn có thể tham khảo 3 cách backup VPS phổ biến để chọn giải pháp phù hợp nhất như dùng Snapshot hoặc Rclone để đẩy dữ liệu lên Google Drive.

Câu hỏi thường gặp (FAQ)

1. n8n có miễn phí cho doanh nghiệp không?

Có. Doanh nghiệp được dùng miễn phí 100% cho mục đích nội bộ (bất kể quy mô). Bạn chỉ phải trả phí bản quyền nếu kinh doanh dịch vụ hosting n8n bán lại cho người khác.

2. Cấu hình VPS 1 CPU / 1 GB RAM có chạy được không?

Chạy được nhưng rủi ro. RAM 1GB dễ bị tràn bộ nhớ (OOM) khi n8n xử lý file nặng, gây sập hệ thống. Khuyên dùng tối thiểu 2GB RAM để vận hành ổn định lâu dài.

3. Dữ liệu của tôi có an toàn trên VPS không?

An toàn hơn Cloud (nếu làm đúng). Dữ liệu nằm hoàn toàn trên server của bạn, không bên thứ 3 nào truy cập được. Tuy nhiên, bạn chịu trách nhiệm bảo mật server (Firewall, Update) và sao lưu dữ liệu định kỳ.

4. Tôi có thể chuyển Workflow từ Zapier sang n8n tự động không?

Không. Tư duy xử lý của hai nền tảng khác nhau (Linear vs Flow-based). Bạn cần xây dựng lại thủ công, nhưng đây là cơ hội tốt để tối ưu quy trình gọn nhẹ hơn.

5. Tại sao Webhook URL hiện là “localhost” thay vì tên miền?

Do sai cấu hình. Bạn cần sửa biến môi trường WEBHOOK_URL trong file docker-compose.yml thành địa chỉ HTTPS thực tế (ví dụ: https://auto.domain.com/), không được để mặc định.

6. Lỗi “502 Bad Gateway” sau khi cài đặt xử lý sao?

Hãy chờ 1-2 phút. Database PostgreSQL cần thời gian khởi tạo lần đầu. Nếu sau 5 phút vẫn lỗi, hãy kiểm tra log bằng lệnh docker logs n8n-docker-n8n-1.

7. Làm thế nào để dùng Python trong n8n?

Dùng Node “Code”. n8n hỗ trợ sẵn Python trong node Code. Nếu cần thư viện chuyên sâu (Pandas, Numpy…), bạn cần build lại Docker Image tùy chỉnh.

Kết luận

Việc cài đặt n8n trên VPS là một bước đi chiến lược cho bất kỳ doanh nghiệp nào muốn tối ưu hóa quy trình vận hành. Với chi phí cố định thấp và khả năng mở rộng không giới hạn, bạn đã loại bỏ được rào cản chi phí mà các nền tảng SaaS thường gặp phải.

Hệ thống bạn vừa xây dựng với Docker, PostgreSQL và Caddy là một nền tảng vững chắc, an toàn và sẵn sàng xử lý hàng triệu tác vụ mỗi tháng.

Tài liệu tham khảo