Tự host n8n trong 10 phút: nền móng cho mọi workflow AI automation
Tóm tắt
n8n là nền tảng workflow automation “fair-code”, tự host được. Chạy thử: tạo volume n8n_data và docker run image n8n ở cổng 5678. Khi chạy thật: dùng Postgres, đặt sau reverse proxy có HTTPS, đặt N8N_ENCRYPTION_KEY cố định, sao lưu định kỳ.
Hầu hết các bài về AI automation trên binhAI đều dùng n8n — nền tảng workflow kéo thả có hàng trăm tích hợp sẵn, node AI Agent, và quan trọng nhất là tự host được. Bài này đi từ chạy thử trong 2 phút trên laptop đến một bản cài đặt đủ chuẩn để chạy thật: Postgres, HTTPS, khoá mã hoá, sao lưu và cập nhật.
Chạy thử trên máy (2 phút)
Cần Docker Desktop (Mac, Windows, Linux) hoặc Docker Engine trên server Linux.
docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 \
-e GENERIC_TIMEZONE="Asia/Ho_Chi_Minh" -e TZ="Asia/Ho_Chi_Minh" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
# mở http://localhost:5678
GENERIC_TIMEZONEquyết định múi giờ cho các node lịch (Schedule Trigger);TZlà múi giờ hệ thống. Quên đặt là workflow “8h sáng” chạy lúc 3h chiều.- Volume
n8n_datalưu khoá mã hoá, log và dữ liệu — xoá volume là mất credential. - Kênh phát hành:
stablecho production,betalà bản mới nhất có thể chưa ổn định.
Tài liệu chính thức nhấn mạnh: tự host đòi hỏi kỹ năng kỹ thuật; cấu hình sai có thể gây mất dữ liệu, lỗ hổng bảo mật và downtime. Nếu team chưa có ai vận hành server, n8n Cloud là lựa chọn an toàn hơn.
Cấu hình để chạy thật: Docker Compose + Postgres
n8n mặc định dùng SQLite — đủ để thử, nhưng khi có nhiều workflow chạy đồng thời và cần sao lưu tử tế, hãy chuyển sang Postgres:
# docker-compose.yml (rút gọn)
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: n8n
volumes: [pg_data:/var/lib/postgresql/data]
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
n8n:
image: n8nio/n8n:<phiên-bản-cố-định> # không dùng :latest khi chạy thật
ports: ["127.0.0.1:5678:5678"] # chỉ reverse proxy truy cập được
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_HOST: n8n.congty.vn
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.congty.vn/
GENERIC_TIMEZONE: Asia/Ho_Chi_Minh
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
volumes: [n8n_data:/home/node/.n8n]
depends_on: [postgres]
volumes: { pg_data: {}, n8n_data: {} }
Giữ volume .n8n kể cả khi đã dùng Postgres — nó chứa khoá mã hoá, log và dữ liệu source control.
Ba biến môi trường quan trọng nhất
| Biến | Vì sao quan trọng |
|---|---|
N8N_ENCRYPTION_KEY | Mã hoá mọi credential lưu trong database. Đổi khoá là toàn bộ credential đã lưu không dùng được nữa. Tạo một lần (openssl rand -hex 32), cất trong secret manager. |
WEBHOOK_URL | Địa chỉ HTTPS công khai; n8n dùng nó để tạo URL webhook đưa cho dịch vụ bên ngoài. Sai là webhook từ GitHub, Stripe… không tới được. |
N8N_HOST / N8N_PROTOCOL | Tên miền công khai và giao thức của instance. |
HTTPS và reverse proxy
- Cho n8n lắng nghe
127.0.0.1:5678, đặt Nginx, Caddy hoặc Cloudflare Tunnel phía trước để cấp HTTPS. - Với Nginx: bật header nâng cấp WebSocket, tăng
client_max_body_size(vd 50M) vàproxy_read_timeout(vd 3600 giây) để workflow chạy lâu không bị cắt. - Một VPS 5–10 USD/tháng (Ubuntu 22.04/24.04) đủ cho hàng nghìn lượt chạy mỗi ngày với workflow thông thường.
Sao lưu và cập nhật
| Thành phần | Cách sao lưu |
|---|---|
| Database Postgres | pg_dump hằng đêm, đẩy lên object storage (S3, B2…) |
Volume n8n_data | Nén hằng tuần — chứa file đính kèm, custom node |
| Workflow | Export JSON và lưu trong Git |
N8N_ENCRYPTION_KEY | Lưu riêng trong secret manager — mất khoá là mất credential |
Cập nhật: đổi tag image cố định trong commit, đọc changelog trước khi lên bản lớn, snapshot Postgres trước khi nâng, rồi docker compose pull → down → up -d. Lỗi thì quay về tag cũ. Lưu ý từ n8n 2.0, biến N8N_RUNNERS_ENABLED không còn cần thiết.
Thử nghiệm sao lưu: một bản sao lưu chưa từng được restore thử thì chưa phải là bản sao lưu.
Self-host hay n8n Cloud?
| Self-host | n8n Cloud | |
|---|---|---|
| Dữ liệu | Nằm trên hạ tầng của bạn | Trên hạ tầng n8n |
| Chi phí | VPS cố định, không giới hạn lượt chạy | Theo gói và số lượt chạy |
| Vận hành | Bạn lo vá OS, chứng chỉ, ổ đĩa, sao lưu | n8n lo |
| Mở rộng | Cài community node qua npm | Theo chính sách nền tảng |
Giấy phép: n8n dùng Sustainable Use License (fair-code) — dùng nội bộ thoải mái, nhưng nếu định bán lại n8n như một dịch vụ cho người khác thì cần đọc kỹ điều khoản.
Bảo mật tối thiểu
- Không mở cổng 5678 trực tiếp ra internet; chỉ qua reverse proxy có HTTPS.
- Bật xác thực hai lớp cho tài khoản quản trị; mỗi người một tài khoản.
.envchứa mật khẩu và khoá không bao giờ commit vào Git.- Credential trong n8n được mã hoá trong database, không nằm trong JSON workflow — export workflow chia sẻ được an toàn hơn.
Áp dụng thế nào?
- Dev: Chạy bản Docker một lệnh trên laptop để học, rồi chuyển lên VPS với Compose + Postgres khi có workflow cần chạy 24/7.
- Tech Lead / DevOps: Quản lý
docker-compose.ymltrong Git, ghim tag image, tự động sao lưu và có runbook khôi phục. - PM: Một instance n8n nội bộ là “nền móng” cho hàng loạt tự động hoá: báo cáo, phân loại ticket, bản tin. Chi phí hạ tầng rất thấp — chi phí thật là người vận hành.
Nguồn & tham khảo
- Docker installation — n8n Docs
- Running n8n locally without regrets — DEV Community