Hướng dẫn cài n8n trên VPS an toàn: Docker, HTTPS, sao lưu
Từ n8n 3.0 (dự kiến tháng 10/2026), tự cài n8n chỉ còn cách dùng Docker. Bài viết đi lần lượt từ chuẩn bị máy chủ đến HTTPS, sao lưu và cập nhật, chỉ dùng lệnh có trong tài liệu chính thức của n8n, Docker và lệnh hệ thống chuẩn của Ubuntu.
Trước khi cài: bạn sắp dựng những gì
Cài n8n trên VPS là chạy bản Community Edition của n8n bằng Docker trên máy chủ của bạn, mở ra Internet qua tên miền HTTPS, với khoá mã hoá giữ trong tệp .env và bản sao lưu đặt ngoài máy chủ.
Tài liệu n8n khuyên tự cài dành cho người có kinh nghiệm quản trị máy chủ: sai sót có thể gây mất dữ liệu, lỗ hổng bảo mật và gián đoạn; nếu chưa quen, n8n khuyên dùng bản Cloud. Nếu bạn chưa chắc nên tự cài hay không, đọc n8n Cloud hay tự cài trước.
Bài này dùng bộ cài một dòng chính thức (one-line setup), cách n8n khuyên cho máy mới. Bộ cài tạo thư mục n8n chứa compose.yml và .env với các khoá bí mật sinh ngẫu nhiên, chạy n8n bằng Docker Compose, dùng cơ sở dữ liệu SQLite mặc định, kèm hộp cát cho n8n Assistant (Assistant tắt cho tới khi bạn nhập khoá model). Từ n8n 3.0, cài bằng npm hay npx không còn được hỗ trợ.
Nguồn: One-line setup · Install with Docker – cảnh báo kỹ năng · v3.0 breaking changes
Chuẩn bị
| Thứ cần có | Ghi chú |
|---|---|
| VPS Ubuntu, tối thiểu 4 GB RAM, 2 vCPU | Mức n8n yêu cầu cho bộ Docker Compose có hộp cát của Assistant |
Tên miền (hoặc tên miền con như n8n.congty.vn) | Tạo bản ghi DNS loại A trỏ về IP của VPS |
| Termius hoặc Terminal | Kết nối SSH vào VPS |
| Trình quản lý mật khẩu | Nơi lưu khoá mã hoá và mật khẩu tài khoản chủ, ngoài VPS |
Phần chuẩn bị VPS chung (đăng nhập bằng khoá SSH, tạo tài khoản quản trị riêng thay cho root, cập nhật hệ thống, bật tự vá bảo mật) giống hệt bài Hướng dẫn cài đặt OpenClaw trên VPS. Làm xong phần đó rồi quay lại đây. Mọi lệnh dưới đây chạy bằng tài khoản quản trị, có sudo khi cần.
.env trên máy chủ (quyền 600) hoặc mục Credentials của n8n. Không gửi qua Telegram, Zalo, email hay bất kỳ khung chat AI nào; không dán vào node Code hay ghi chú workflow; không chụp màn hình có khoá. Chữ màu cam <như thế này> là phần bạn tự thay.Nguồn: Docker Compose – yêu cầu · Bảo mật – việc người dùng tự làm
Bước 1. Cài Docker và mở tường lửa
Cài Docker Engine kèm plugin Docker Compose v2 theo hướng dẫn chính thức của Docker cho Ubuntu (bộ cài n8n cần đúng lệnh docker compose bản 2, không phải docker-compose cũ). Kiểm tra rồi mở tường lửa cho SSH và web:
docker --version # phải in ra phiên bản Docker
docker compose version # phải in ra Docker Compose v2.x
sudo ufw allow OpenSSH # giữ kết nối SSH
sudo ufw allow 80/tcp # cho reverse proxy xin chứng chỉ HTTPS
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
sudo ufw statusNguồn: Docker – Install on Ubuntu · Docker – Packet filtering and firewalls
Bước 2. Tải, đọc rồi mới chạy bộ cài
n8n cho phép tải script về đọc trước thay vì chạy thẳng từ Internet. Thêm cờ --no-start để script chỉ tạo tệp cấu hình mà chưa khởi động n8n, nhờ đó bạn đặt khoá mã hoá và tên miền trước lần chạy đầu tiên:
cd ~
curl -fsSL https://get.n8n.io -o get-n8n.sh # tải script cài đặt chính thức
less get-n8n.sh # đọc qua, bấm q để thoát
sudo sh get-n8n.sh --no-start # tạo ~/n8n với compose.yml và .env, chưa chạy n8nScript kiểm tra Docker, tạo thư mục ~/n8n, ghi compose.yml và .env (các khoá bí mật cho hộp cát được sinh ngẫu nhiên). Chạy lại nhiều lần cũng an toàn: nếu thư mục đã có, script chỉ báo và không thay đổi gì.
Nguồn: One-line setup – flags, đọc script trước
Bước 3. Tự sinh khoá mã hoá ngay trên máy chủ
N8N_ENCRYPTION_KEY là khoá n8n dùng để mã hoá mọi credential trong cơ sở dữ liệu. Nếu không đặt, n8n tự sinh khoá ở lần chạy đầu và cất trong thư mục dữ liệu. Đặt khoá tường minh trong .env giúp bạn biết chắc khoá nằm ở đâu để sao lưu. Lệnh dưới sinh khoá ngẫu nhiên và ghi thẳng vào tệp, khoá không hiện ra màn hình:
cd ~/n8n
echo "N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)" | sudo tee -a .env > /dev/null # sinh khoá và ghi vào .env
sudo chmod 600 .env # chỉ chủ tệp được đọc, ghi
sudo ls -l .env # phải thấy -rw-------
sudo grep -c N8N_ENCRYPTION_KEY .env # phải in ra 1 (chỉ đếm, không in khoá)Sao lưu khoá ra ngoài VPS: mất khoá này là mất khả năng giải mã toàn bộ credential khi khôi phục. Cách gọn nhất là tải bản sao lưu đầy đủ ở Bước 7 (gồm tệp .env) về nơi lưu trữ an toàn của bạn, đồng thời ghi khoá vào trình quản lý mật khẩu. Tuyệt đối không gửi khoá qua chat hay email.
Nguồn: Deployment variables – N8N_ENCRYPTION_KEY · Backup – khoá mã hoá
Bước 4. Khai báo tên miền, giờ Việt Nam và khoá cổng 5678
Mở tệp cấu hình bằng sudo nano ~/n8n/.env, thêm các dòng sau vào cuối tệp, lưu bằng Ctrl+O, Enter, thoát bằng Ctrl+X:
# Thêm vào CUỐI tệp ~/n8n/.env – giữ nguyên các dòng script đã tạo
# Tên miền bạn đã trỏ về IP của VPS
N8N_HOST=<tên miền, vd n8n.congty.vn>
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://<tên miền>/
N8N_WEBHOOK_URL=https://<tên miền>/
# n8n chạy sau 1 reverse proxy
N8N_PROXY_HOPS=1
# Giờ Việt Nam cho Schedule Trigger
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
TZ=Asia/Ho_Chi_Minh
# Không cho node Code, expression đọc biến môi trường
N8N_BLOCK_ENV_ACCESS_IN_NODE=true
# N8N_ENCRYPTION_KEY=... đã được lệnh ở Bước 3 tự thêm – không sửa, không gõ tay| Biến | Tác dụng |
|---|---|
N8N_HOST, N8N_PROTOCOL | Tên miền và giao thức của n8n (mặc định là localhost và http) |
N8N_EDITOR_BASE_URL | Địa chỉ công khai của trình soạn thảo, dùng trong email và chuyển hướng đăng nhập |
N8N_WEBHOOK_URL | Địa chỉ gốc cho webhook khi chạy sau reverse proxy. Biến cũ WEBHOOK_URL đã bị đánh dấu ngừng dùng từ bản 2.35.0 |
N8N_PROXY_HOPS=1 | Báo cho n8n biết phía trước có một reverse proxy |
GENERIC_TIMEZONE | Múi giờ cho Schedule Trigger; mặc định là giờ New York nên phải đổi |
N8N_BLOCK_ENV_ACCESS_IN_NODE | Chặn node Code, expression đọc biến môi trường. Tài liệu ghi mặc định khác nhau giữa các trang, nên đặt tường minh true |
Giữ nguyên N8N_SECURE_COOKIE ở mặc định (true, cookie chỉ gửi qua HTTPS); đừng tắt nó để "vào tạm" bằng http. Tiếp theo, nếu reverse proxy chạy trực tiếp trên VPS này, sửa dòng cổng trong compose.yml (sudo nano ~/n8n/compose.yml) để cổng 5678 chỉ nhận kết nối từ chính máy chủ:
# Trong ~/n8n/compose.yml, mục services → n8n → ports:
# thay dòng - '5678:5678' bằng dòng dưới (giữ nguyên số dấu cách đầu dòng)
- '127.0.0.1:5678:5678'Nếu reverse proxy của bạn chạy trong Docker cùng mạng với n8n, cách nối sẽ khác; hãy làm theo tài liệu của proxy đó. Mục tiêu chung: Internet chỉ thấy cổng 443 của proxy, không thấy cổng 5678.
Nguồn: Deployment variables · Endpoints – N8N_WEBHOOK_URL · Security variables · Schedule Trigger – timezone
Bước 5. HTTPS qua reverse proxy
n8n đưa ra hai cách bật HTTPS: dùng reverse proxy (cách được khuyên, ví dụ Traefik) để proxy lo luôn việc cấp và gia hạn chứng chỉ, hoặc đưa chứng chỉ trực tiếp vào n8n qua N8N_SSL_CERT, N8N_SSL_KEY và tự gia hạn. Tài liệu n8n không cung cấp tệp cấu hình proxy mẫu, nên Aduca không tự viết thay; hãy dùng proxy mà đội bạn quen và kiểm tra đủ các yêu cầu sau:
- Tên miền trỏ đúng IP của VPS; proxy tự xin và gia hạn chứng chỉ HTTPS.
- Proxy chuyển yêu cầu tới
127.0.0.1:5678(hoặc tới n8n trong mạng Docker). - Proxy cuối cùng truyền các header
X-Forwarded-For,X-Forwarded-Host,X-Forwarded-Proto. - Proxy bật hỗ trợ websocket; thiếu nó, trình soạn thảo dễ bị "treo" khi chạy thử.
- Nếu sau này bật máy chủ MCP của n8n qua cùng proxy, proxy phải chuyển tiếp cả các header MCP theo tài liệu.
Cấu hình proxy sai thường lộ ra khi nối Telegram: Telegram bắt buộc webhook HTTPS, và n8n báo lỗi "An HTTPS URL must be provided for webhook" nếu địa chỉ webhook vẫn là http.
Nguồn: Set up SSL · Webhook URLs with reverse proxy · Telegram Trigger – common issues
Bước 6. Khởi động, tạo tài khoản chủ và kiểm tra
cd ~/n8n
sudo docker compose up -d # khởi động n8n và các dịch vụ đi kèm
sudo docker compose ps # các dịch vụ phải ở trạng thái running / healthy
curl -sf http://localhost:5678/healthz # n8n trả lời nghĩa là đã chạy
sudo docker compose logs --tail=50 n8n # xem log nếu có lỗiLần đầu n8n cần vài phút để tải và khởi động. Khi đã chạy, làm ngay các việc sau:
- Mở
https://<tên miền>và tạo tài khoản chủ (owner) ngay. Người đầu tiên hoàn tất màn hình này sẽ thành chủ, nên đừng để trang ở trạng thái chờ. - Vào Settings → Personal, bật xác thực hai lớp bằng ứng dụng authenticator và cất mã khôi phục vào trình quản lý mật khẩu.
- Tạo thêm một tài khoản thường (Member) để dùng hằng ngày, như tài liệu n8n khuyên. Nếu không cấu hình gửi email (SMTP), bạn sẽ không đặt lại mật khẩu qua email được, nên giữ mật khẩu cẩn thận.
- Từ một máy khác, thử mở
http://<IP VPS>:5678: trang không được mở ra. - Chạy kiểm tra bảo mật có sẵn của n8n:
sudo docker compose exec n8n n8n audit. Báo cáo chia theo nhóm credentials, cơ sở dữ liệu, tệp, node và cấu hình chung.
Nguồn: Docker Compose – verify · User management · 2FA · Security audit
Bước 7. Sao lưu ra ngoài VPS
Theo n8n, một bản sao lưu đầy đủ gồm thư mục dữ liệu .n8n (với SQLite, thư mục này chứa luôn cơ sở dữ liệu) cộng cấu hình triển khai, ở đây là .env có khoá mã hoá. Với SQLite, nên dừng n8n trước khi sao chép để dữ liệu nhất quán. Làm ít nhất mỗi tuần và luôn làm trước khi cập nhật:
cd ~/n8n
sudo docker volume ls | grep n8n-data # tìm tên volume dữ liệu, thường là n8n_n8n-data
sudo docker compose stop # dừng n8n để sao chép nhất quán
sudo docker run --rm -v <tên volume>:/data -v "$PWD":/backup ubuntu tar czf /backup/n8n-data.tar.gz -C /data .
sudo docker compose start # chạy lại n8n
sudo tar czf ~/n8n-backup-$(date +%F).tar.gz .env compose.yml n8n-data.tar.gz # gói cùng .env có khoá
sudo rm n8n-data.tar.gz
sudo chown $USER: ~/n8n-backup-*.tar.gz && chmod 600 ~/n8n-backup-*.tar.gzTải tệp n8n-backup-…tar.gz về bằng SFTP của Termius hoặc lệnh dưới (chạy trên máy tính của bạn), cất ở ổ lưu trữ có mã hoá, rồi xoá bản trên VPS:
scp <tên quản trị>@<IP VPS>:~/n8n-backup-<ngày>.tar.gz . # tải bản sao lưu về máy tínhNgoài ra, n8n có lệnh xuất từng workflow và credential ra tệp JSON, tiện khi chuyển workflow sang máy khác. Thư mục backups nên nằm trong /home/node/.n8n để không mất khi tạo lại container:
cd ~/n8n
sudo docker compose exec n8n n8n export:workflow --backup --output=/home/node/.n8n/backups/workflows/
sudo docker compose exec n8n n8n export:credentials --backup --output=/home/node/.n8n/backups/credentials/Bản xuất này không gồm người dùng, vai trò, lịch sử chạy, biến và khoá mã hoá; credential vẫn ở dạng mã hoá. Cờ --decrypted xuất credential dạng chữ thường: chỉ dùng khi thật cần khôi phục, bảo quản như mật khẩu và xoá ngay sau đó.
Nguồn: Back up and restore · Docker – Volumes, back up data
Bước 8. Cập nhật đều đặn
n8n khuyên cập nhật thường xuyên, ít nhất mỗi tháng, đọc ghi chú phát hành để tìm thay đổi lớn, và thử trước trên bản riêng nếu có. Ngày 30/09/2026 kho mã n8n có thêm nhiều cảnh báo bảo mật mới, gồm mức cao, nên đừng để bản cài cũ quá lâu. Quy trình cho bộ cài một dòng:
cd ~
curl -fsSL https://get.n8n.io -o get-n8n.sh # tải bản script mới nhất
less get-n8n.sh # đọc lại trước khi chạy
sudo sh get-n8n.sh --upgrade # nâng n8n và hộp cát lên bản mới, giữ dữ liệu
sudo docker compose -f ./n8n/compose.yml ps # kiểm tra lại các dịch vụLệnh nâng cấp chỉ sửa hai dòng phiên bản trong .env (N8N_VERSION, N8N_SANDBOX_VERSION); dữ liệu, khoá bí mật và các chỉnh sửa khác của bạn được giữ nguyên. Riêng lần lên n8n 3.0, hãy đọc kỹ trang thay đổi lớn: AI Agent node phiên bản 1 bị gỡ, "Import from URL" bị bỏ, cài node cộng đồng chưa xác minh từ npm mặc định bị tắt.
Nguồn: Update n8n · One-line setup – upgrade · Security advisories · v3.0 breaking changes
Trước khi chạy thật: ba điều nên quyết định
- Cơ sở dữ liệu: SQLite đủ để thử; khi nhiều người dùng hoặc workflow chạy liên tục, n8n khuyên PostgreSQL. Chuyển sang PostgreSQL không tự mang dữ liệu SQLite cũ, nên quyết định sớm và làm theo mục PostgreSQL trong trang Docker Compose của n8n.
- Node cộng đồng: có toàn quyền trên máy chạy n8n và đọc được dữ liệu workflow. Chỉ chủ hoặc quản trị viên được cài; chỉ cài khi thật cần và đã kiểm tra nguồn. Không cài node Zalo dùng tài khoản cá nhân.
- Lưu lịch sử chạy: mặc định n8n tự dọn dữ liệu execution cũ hơn 14 ngày. Giữ ngắn giúp nhẹ máy và ít dữ liệu khách tồn đọng, phù hợp Luật Bảo vệ dữ liệu cá nhân 91/2025/QH15.
Khi máy chủ đã chạy ổn, dựng workflow đầu tiên theo n8n cho người mới. Nếu chưa chắc nên tự cài hay dùng bản Cloud, xem lại n8n Cloud hay tự cài.
Nguồn: Docker Compose – PostgreSQL · Community nodes – Risks · Execution data pruning
Đọc tiếp: Workflow đầu tiên →
Câu hỏi thường gặp
Có cài n8n bằng npm được không?
Tài liệu n8n ghi rõ cách cài bằng npm bị ngừng hỗ trợ từ n8n 3.0 (dự kiến tháng 10/2026); từ bản này, tự cài chỉ còn qua Docker. Bản cài bằng npm cũng không có n8n Assistant. Với máy chủ mới, hãy dùng bộ cài một dòng hoặc Docker Compose như bài này.
VPS cần cấu hình bao nhiêu?
Trang hướng dẫn Docker Compose của n8n yêu cầu tối thiểu 4 GB RAM và 2 vCPU, vì bộ cài kèm hộp cát chạy mã cho n8n Assistant. Tài liệu chưa nêu cấu hình tối thiểu riêng cho n8n không kèm Assistant, nên Aduca không đưa con số khác.
Mất N8N_ENCRYPTION_KEY thì sao?
n8n dùng khoá này để mã hoá mọi credential (thông tin đăng nhập các phần mềm). Mất khoá thì bản sao lưu cơ sở dữ liệu hay tệp credential xuất ra không giải mã được, bạn phải nhập lại toàn bộ thông tin đăng nhập. Vì vậy hãy lưu khoá ở nơi an toàn ngoài VPS, như trình quản lý mật khẩu.
Lỡ dán khoá mã hoá hoặc token vào nhóm chat thì làm gì?
Coi như đã lộ. Với token của phần mềm khác (bot Telegram, Google…), thu hồi và tạo mới rồi cập nhật trong mục Credentials. Với khoá mã hoá, đổi khoá là thao tác kỹ thuật cần làm theo tài liệu chính thức của n8n và có sao lưu trước; nếu không chắc, hãy nhờ người có kinh nghiệm.
Có nên dùng SQLite mặc định không?
SQLite phù hợp để thử và khi có ít workflow. Tài liệu n8n khuyên dùng PostgreSQL cho bản chạy thật có nhiều người dùng hoặc workflow chạy liên tục. Chuyển sang PostgreSQL không tự mang dữ liệu SQLite cũ theo, nên hãy quyết định trước khi dựng nhiều workflow.
Tài liệu liên quan
- n8n · AI Agentn8n là gì? Tự động hoá quy trình kết hợp AI cho doanh nghiệpn8n là gì: công cụ tự động hoá quy trình nối Facebook, Google Sheets, Telegram, CRM thành workflow, chèn được bước AI. Cloud hay tự cài, giấy phép, giới hạn.
- n8n · AI Agentn8n Cloud hay tự cài: chi phí, gói và giấy phép cần biếtn8n Cloud hay tự cài: bảng gói Cloud bằng EUR theo lượt chạy, bản Community miễn phí và chi phí thật khi tự cài, giấy phép fair-code, chọn theo 5 tình huống.
- n8n · AI Agentn8n cho người mới: khái niệm cốt lõi và workflow đầu tiênn8n cho người mới: workflow, node, trigger, credential, execution, expression, item; dựng workflow đầu tiên Form → Google Sheets → Telegram từng bước.
- AI AgentAI Agent trong n8n: nối Claude, ChatGPT, trí nhớ, công cụ và MCPAI Agent trong n8n: chọn model Claude hoặc GPT, thêm trí nhớ, công cụ, MCP; bắt người duyệt trước việc nhạy cảm; chi phí lượt chạy và token; giới hạn cần biết.
Xem tất cả tài liệu hướng dẫn →
Đăng ký tư vấn 1:1
Chuyên gia Aduca cùng bạn xem quy trình hiện tại, chọn việc nên giao cho AI Agent trước và cách kiểm soát rủi ro.
Nguồn tham khảo
- n8n Docs – Install options
- n8n Docs – One-line setup
- n8n Docs – Install using Docker Compose
- n8n Docs – Biến môi trường triển khai (N8N_ENCRYPTION_KEY, N8N_HOST…)
- n8n Docs – Webhook URL sau reverse proxy
- n8n Docs – Set up SSL
- n8n Docs – Back up and restore
- n8n Docs – Update n8n
- n8n Docs – Thay đổi lớn ở n8n 3.0
- Docker Docs – Docker và tường lửa ufw
Lịch sử cập nhật
- 04/10/2026 — Bản đầu.
Miễn trừ trách nhiệm
Bài viết thuộc chuỗi kiến thức của Công ty Cổ phần Giáo dục Aduca, chia sẻ miễn phí cho mục đích học tập. Thông tin kỹ thuật đối chiếu với tài liệu chính thức của các dự án và nền tảng tại ngày cập nhật (có ghi nguồn); phần nhận định là quan điểm của Aduca. OpenClaw, Hermes Agent, Claude (thương hiệu của Anthropic), ChatGPT (thương hiệu của OpenAI), n8n (thương hiệu của n8n GmbH) và các phần mềm, dịch vụ nêu trong bài thuộc về chủ sở hữu tương ứng, không thuộc Aduca; Aduca không phải đối tác chính thức của các công ty này. Tính năng, gói và giá có thể thay đổi bất cứ lúc nào – hãy kiểm tra trang chính thức trước khi mua. Kết quả áp dụng phụ thuộc quy trình, dữ liệu và con người của từng doanh nghiệp; bài viết không cam kết doanh thu hay hiệu quả cụ thể. © 2026 Aduca — được trích dẫn khi ghi rõ nguồn aduca.vn.