Cài n8n trên VPS bằng Docker: chỉ 10 phút có ngay HTTPS với Traefik

Nếu bạn muốn tự host n8n để chạy các quy trình tự động hóa 24/7, cách gọn nhẹ và ổn định nhất hiện nay là cài n8n trên VPS bằng Docker. Bài viết này hướng dẫn chi tiết từng bước: từ cài Docker, dựng file docker-compose.yml kết hợp Traefik làm reverse proxy, cho đến cấp chứng chỉ SSL tự động — chỉ mất khoảng 5–10 phút là bạn có n8n chạy ngon lành trên tên miền riêng của mình.

Tại sao nên cài n8n bằng Docker?

So với cài bằng Node.js thủ công, cài n8n bằng Docker có 3 lợi ích rõ rệt:

  • Cô lập môi trường: n8n và các phụ thuộc của nó nằm trong container riêng, không xung đột với các phần mềm khác trên VPS.
  • Triển khai nhanh: một file docker-compose.yml duy nhất định nghĩa toàn bộ hệ thống, deploy hay di chuyển sang VPS khác đều đơn giản.
  • Cập nhật dễ dàng: chỉ cần pull image mới và restart container, dữ liệu workflow được giữ nguyên trong Docker volume.

Chuẩn bị trước khi cài đặt n8n

Hướng dẫn này thực hiện trên VPS mới hoàn toàn. Bạn cần:

  • Hệ điều hành: Debian 12, Ubuntu 22.04 hoặc Ubuntu 24.04.
  • Cấu hình tối thiểu: 1GB RAM (khuyến nghị 2GB trở lên), 1 core CPU (khuyến nghị 2 core), dung lượng ổ cứng vừa phải.
  • Một tên miền (hoặc subdomain): ví dụ n8n.domain.com — cần trỏ bản ghi DNS A về IP của VPS trước khi khởi chạy, vì Traefik sẽ cấp SSL ngay trong quá trình start.

Bước 1: Cài đặt Docker và Docker Compose

Đăng nhập SSH vào VPS, chạy lần lượt các lệnh sau. Đầu tiên gỡ bỏ các bản Docker cũ (nếu có) rồi thêm kho cài đặt chính thức của Docker:

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Sau khi cài xong, kiểm tra bằng lệnh docker --version và docker compose version để chắc chắn Docker cùng Docker Compose plugin đã sẵn sàng.

Bước 2: Tạo file docker-compose.yml

Tạo thư mục riêng cho n8n và file cấu hình:

mkdir /home/n8n
cd /home/n8n
nano docker-compose.yml

Dán toàn bộ nội dung dưới đây vào file. File này định nghĩa 2 service: Traefik (reverse proxy, tự cấp SSL miễn phí qua Let’s Encrypt) và n8n (chạy trên cổng nội bộ 5678, nhận lưu lượng qua Traefik):

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--api=true"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)"
      - "traefik.http.routers.n8n.entrypoints=websecure"
      - "traefik.http.routers.n8n.tls=true"
      - "traefik.http.routers.n8n.tls.certresolver=mytlschallenge"
      - "traefik.http.services.n8n.loadbalancer.server.port=5678"
      - "traefik.http.middlewares.n8n-headers.headers.SSLRedirect=true"
      - "traefik.http.middlewares.n8n-headers.headers.STSSeconds=31536000"
      - "traefik.http.middlewares.n8n-headers.headers.browserXSSFilter=true"
      - "traefik.http.middlewares.n8n-headers.headers.contentTypeNosniff=true"
      - "traefik.http.middlewares.n8n-headers.headers.forceSTSHeader=true"
      - "traefik.http.middlewares.n8n-headers.headers.STSIncludeSubdomains=true"
      - "traefik.http.middlewares.n8n-headers.headers.STSPreload=true"
      - "traefik.http.routers.n8n.middlewares=n8n-headers@docker"
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  traefik_data:
    external: true
  n8n_data:
    external: true

Trước khi chạy: tạo 2 Docker volume

Vì file cấu hình khai báo volume dạng external: true, bạn phải tạo chúng thủ công trước:

docker volume create traefik_data
docker volume create n8n_data

Volume n8n_data là nơi lưu toàn bộ workflow, credentials và dữ liệu n8n — nhờ đó nâng cấp hay rebuild container đều không mất dữ liệu.

Bước 3: Tạo file .env cấu hình tên miền

Trong thư mục /home/n8n, tạo file .env để khai báo các biến môi trường mà docker-compose dùng tới:

nano .env

Nội dung file (thay email và tên miền của bạn):

SSL_EMAIL=email@gmail.com
SUBDOMAIN=n8n
DOMAIN_NAME=domain.com
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh

Giải thích nhanh: SSL_EMAIL là email đăng ký Let’s Encrypt; SUBDOMAIN + DOMAIN_NAME ghép thành địa chỉ truy cập n8n (ví dụ n8n.domain.com); GENERIC_TIMEZONE giúp lịch chạy workflow đúng giờ Việt Nam.

Bước 4: Khởi chạy n8n

Mọi cấu hình đã xong. Chạy một lệnh duy nhất để khởi động toàn bộ hệ thống:

sudo docker compose up -d

Lưu ý quan trọng: bạn phải trỏ tên miền (subdomain) về IP của VPS trước khi chạy lệnh này. Vì ngay khi khởi động, Traefik sẽ liên hệ Let’s Encrypt để cấp chứng chỉ SSL — nếu DNS chưa trỏ về, việc cấp SSL sẽ thất bại.

Sau khi chạy thành công, truy cập trực tiếp vào tên miền của bạn (ví dụ https://n8n.domain.com), tạo tài khoản quản trị và bắt đầu xây dựng workflow đầu tiên.

Bước 5: Cập nhật n8n khi có bản mới

Mỗi khi n8n ra phiên bản mới, bạn chỉ cần vào thư mục dự án và chạy:

cd /home/n8n
sudo docker compose pull
sudo docker compose down
sudo docker compose up -d

Lệnh pull kéo image mới nhất về, down/up -d restart container với image mới. Toàn bộ workflow và credentials vẫn nguyên vẹn trong volume n8n_data.

👉 Cần VPS để thực hành? Đăng ký VPS BNIX tại đây

  • 🏢 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
  • 🌐 thietkewebdian.com
4.9/5 - (50 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