Cài đặt n8n trên VPS Ubuntu/Debian với webserver Caddy: đơn giản, có SSL tự động

n8n là công cụ tự động hóa mã nguồn mở đang rất được ưa chuộng, cho phép bạn nối hàng trăm ứng dụng như Gmail, Telegram, Google Sheets, database… thành các workflow tự động mà không cần viết nhiều code. Thay vì trả phí cho bản cloud, bạn hoàn toàn có thể tự host n8n trên VPS của mình để chủ động dữ liệu và tiết kiệm chi phí.

Trong bài viết này, Hoidapwp sẽ hướng dẫn bạn cài đặt n8n trên VPS Ubuntu/Debian bằng Docker, kết hợp database PostgreSQL và dùng webserver Caddy làm reverse proxy. Điểm cộng lớn nhất của Caddy là cấu hình cực kỳ đơn giản và tự động cài SSL miễn phí (Let’s Encrypt) cho domain — rất hợp với những bạn chưa rành về Nginx.

Chuẩn bị trước khi bắt đầu:

  • Một VPS chạy Ubuntu 22.04/24.04 hoặc Debian 11/12, có quyền root (hoặc user có sudo).
  • Một subdomain (ví dụ n8n.domain.com) đã trỏ bản ghi A về IP của VPS.

Bước 1 – Cập nhật hệ điều hành

Dù cài gì lên VPS, việc đầu tiên luôn là update hệ điều hành để vá lỗ hổng bảo mật và cập nhật các thư viện mới nhất, tránh lỗi vặt trong quá trình cài đặt:

apt -y update && apt -y upgrade

Bước 2 – Cài đặt Docker

Cài Docker nhanh bằng script chính thức của Docker:

curl -sSL "https://get.docker.com/" | bash

Sau khi cài xong, kiểm tra bằng hai lệnh docker --version và docker compose version. Nếu cả hai đều hiện số phiên bản thì Docker đã sẵn sàng.

Cài đặt n8n trên VPS Ubuntu/Debian với webserver Caddy: đơn giản, có SSL tự động

Bước 3 – Triển khai n8n và PostgreSQL bằng Docker Compose

3.1. Tạo thư mục làm việc và file .env

Tạo thư mục chứa file cấu hình:

mkdir n8n
cd n8n

Tạo file .env để khai báo thông tin domain và mật khẩu:

nano .env

Nhập nội dung sau (nhớ thay domain.com bằng domain thật của bạn):

SUBDOMAIN=n8n
DOMAIN_NAME=domain.com
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
POSTGRES_PASSWORD=
N8N_RUNNERS_ENABLED=true
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

Lưu ý: POSTGRES_PASSWORD là mật khẩu của database PostgreSQL. Bạn nên đặt mật khẩu mạnh, dài khoảng 16 ký tự gồm chữ hoa, chữ thường và số — có thể dùng công cụ tạo mật khẩu ngẫu nhiên.

3.2. Tạo file docker-compose.yml

Tạo file cấu hình Docker Compose:

nano docker-compose.yml

Dán nội dung sau vào file:

services:
  postgres:
    image: postgres:16
    container_name: n8n-postgres
    restart: always
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: n8n
      TZ: ${GENERIC_TIMEZONE}
    volumes:
      - /root/n8n/postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n-n8n
    restart: always
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}

      N8N_HOST: ${SUBDOMAIN}.${DOMAIN_NAME}
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://${SUBDOMAIN}.${DOMAIN_NAME}

      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      NODE_ENV: production
      N8N_RUNNERS_ENABLED: ${N8N_RUNNERS_ENABLED}
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: ${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS}

    volumes:
      - /root/n8n/n8n_data:/home/node/.n8n
    ports:
      - "5678:5678"

Giải thích nhanh: file này tạo 2 container — postgres (PostgreSQL 16, lưu dữ liệu vào /root/n8n/postgres_data, có healthcheck để đảm bảo database sẵn sàng trước khi n8n khởi động) và n8n (bản mới nhất, chạy ở port 5678, timezone Asia/Ho_Chi_Minh). Dữ liệu n8n được lưu bền vững vào /root/n8n/n8n_data nên không sợ mất workflow khi restart container.

3.3. Tạo thư mục dữ liệu và khởi chạy

mkdir -p /root/n8n/n8n_data
chown -R 1000:1000 /root/n8n/n8n_data
chmod 700 /root/n8n/n8n_data

Các lệnh trên gán đúng quyền cho user node (UID 1000) bên trong container n8n, tránh lỗi permission denied khi n8n ghi dữ liệu.

Khởi chạy toàn bộ stack:

docker compose up -d

Chờ 1–2 phút rồi kiểm tra bằng docker ps — nếu thấy 2 container n8n-n8n và n8n-postgres đang chạy là thành công.

Bước 4 – Cài đặt và cấu hình Caddy

Lúc này n8n mới chỉ chạy ở port 5678 trên localhost. Ta dùng Caddy làm reverse proxy để truy cập qua domain với HTTPS.

4.1. Cài đặt Caddy

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
systemctl enable caddy --now

Cài đặt n8n trên VPS Ubuntu/Debian với webserver Caddy: đơn giản, có SSL tự động

4.2. Cấu hình reverse proxy cho n8n

Mở file cấu hình của Caddy:

nano /etc/caddy/Caddyfile

Thêm vào cuối file (thay n8n.domain.com bằng subdomain thật của bạn):

n8n.domain.com {
    reverse_proxy 127.0.0.1:5678
}

Chỉ với vài dòng như vậy, Caddy đã hiểu: mọi request tới subdomain sẽ được chuyển tiếp vào n8n đang chạy ở port 5678.

4.3. Kiểm tra và áp dụng cấu hình

caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy

Nếu lệnh validate không báo lỗi, Caddy sẽ tự động xin chứng chỉ SSL miễn phí (Let’s Encrypt) cho subdomain trong vài phút. Sau đó bạn chỉ cần truy cập https://n8n.domain.com để tạo tài khoản admin và bắt đầu dùng n8n.

Một số lưu ý khi vận hành n8n

Bảo mật

Đặt mật khẩu database và tài khoản n8n thật mạnh. Nên bật firewall (UFW) và chỉ mở các port cần thiết 22, 80, 443.

Backup định kỳ

Backup hai thư mục /root/n8n/n8n_data và /root/n8n/postgres_data thường xuyên để không mất workflow khi VPS gặp sự cố.

Cập nhật phiên bản mới

Thỉnh thoảng chạy docker compose pull && docker compose up -d trong thư mục n8n để lên phiên bản n8n mới nhất với các tính năng và bản vá bảo mật.

Chúc bạn cài đặt thành công và xây dựng được những workflow tự động hóa thật hiệu quả!

👉 Cần VPS để thực hành? Đăng ký VPS BNIX tại đây: https://my.bnix.one/aff.php?aff=82


🏢 Chuyên thiết kế web cho doanh nghiệp và cá nhân
🤖 Giải pháp tự động hóa cho Doanh nghiệp và cá nhân
📞 0925045760 → https://zalo.me/0925045760
🌐 thietkewebdian.com → https://thietkewebdian.com

4.7/5 - (27 bình chọn)
Đăng ký
Thông báo về
guest
0 Bình Luận
Oldest
Newest Most Voted
Inline Feedbacks
Xem tất cả
0
Rất thích suy nghĩ của bạn, hãy bình luận.x
()
x