AI Automation

Chạy n8n liên tục trên VPS mà không cần biết Docker

Bạn có một VPS, muốn chạy n8n liên tục để tự động hoá công việc, nhưng mỗi lần nhắc đến Docker là thấy ngại. Tin tốt: bạn không cần biết Docker để chạy n8n trên VPS. Bài này hướng dẫn bạn dùng image cài sẵn, cấu hình để n8n tự khởi động lại khi VPS reboot, tự động cập nhật, và kiểm tra log qua luôn web mà không cần gõ lệnh.

Yêu cầu trước khi bắt đầu

  • Một VPS chạy Ubuntu 24.04 LTS (khuyến nghị dùng VPS n8n đã cài sẵn nếu bạn muốn tiết kiệm thời gian).
  • Quyền sudo hoặc root.
  • Tên miền trỏ về IP VPS (nếu muốn dùng domain thay IP).
  • Tối thiểu 2 GB RAM (gói thuê VPS Linux cơ bản là đủ cho workflow cơ bản).

Vì sao không cần Docker vẫn chạy được n8n

n8n là ứng dụng Node.js, bạn có thể cài trực tiếp lên hệ thống như một service bình thường. Các image cài sẵn (n8n.io cung cấp script cài đặt) chính là một bộ cài tự động: nó kéo Node.js, cài n8n, rồi gắn vào systemd, kết quả là bạn có một service chạy background liên tục, không khác gì một server web.

Không cần biết Docker compose, expose port, volume. Toàn bộ cấu hình cần là: chạy script, mở port, cấu hình start tự động. Hết.

Bước 1 - Cài đặt n8n bằng script cài sẵn

Đăng nhập VPS qua SSH, chạy các lệnh sau:

sudo apt update
sudo apt install -y curl
curl -fsSL https://raw.githubusercontent.com/n8n-io/n8n/master/docker/images/n8n/install.sh | sudo bash

Script này sẽ: cài Node.js (bản LTS mới nhất), tải n8n, cài đặt nó như một global package. Quá trình mất 2-3 phút. Sau khi hoàn tất, kiểm tra:

n8n --version

Bạn sẽ thấy số version (vd 1.85.x). Nếu có lỗi "command not found", hãy chạy lại với quyền sudo hoặc đảm bảo /usr/local/bin nằm trong PATH.

Bước 2 - Cấu hình n8n chạy dưới dạng service (systemd)

Để n8n tự khởi động lại mỗi khi VPS reboot, bạn cần tạo một systemd unit. Tạo file:

sudo nano /etc/systemd/system/n8n.service

Dán vào nội dung:

[Unit]
Description=n8n workflow automation
After=network.target

[Service]
Type=simple
User=n8n
Group=n8n
ExecStart=/usr/bin/n8n start --tunnel
Restart=on-failure
RestartSec=10
Environment=N8N_PORT=5678
Environment=N8N_PROTOCOL=http

[Install]
WantedBy=multi-user.target

Tạo user để chạy n8n an toàn:

sudo useradd -r -s /bin/false n8n
sudo chown -R n8n:n8n /home/n8n
sudo chown -R n8n:n8n /usr/local/lib/node_modules/n8n

Kích hoạt service và khởi động:

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n

Kiểm tra:

sudo systemctl status n8n

Output hiển thị active (running). Nếu có lỗi "permission denied", kiểm tra lại quyền thư mục /home/n8n/usr/local/lib/node_modules/n8n.

Bước 3 - Mở port trên firewall

n8n chạy port mặc định 5678. Mở trên UFW:

sudo ufw allow 5678/tcp
sudo ufw reload
sudo ufw status

Nếu bạn dùng VPS Linux phổ thông khác (AlmaLinux), dùng firewalld:

sudo firewall-cmd --add-port=5678/tcp --permanent
sudo firewall-cmd --reload

Lưu ý: nếu n8n không nhận kết nối, kiểm tra firewall đã mở chưa. Bạn cũng có thể dùng ss -tlnp | grep 5678 để xác nhận port đang listen.

Bước 4 - Truy cập và cấu hình cơ bản

Mở trình duyệt, gõ http://VPS_IP:5678 (thay VPS_IP bằng IP thật). Lần đầu truy cập, n8n yêu cầu tạo tài khoản Admin. Nhập email và mật khẩu. Sau đó bạn vào được dashboard, giao diện kéo thả workflow.

Nếu muốn dùng domain (vd n8n.yourdomain.com), bạn cần cấu hình reverse proxy (Nginx/Caddy). Bài viết cài đặt và tối ưu Nginx làm reverse proxy trên Ubuntu 24.04 hướng dẫn chi tiết. Tuy nhiên, nếu chỉ chạy thử, IP + port đủ dùng.

Để đảm bảo n8n chạy liên tục, không bị timeout khi bạn tắt SSH, systemd service đã lo việc này. Kiểm tra lại với lệnh:

sudo systemctl is-enabled n8n
sudo systemctl status n8n | grep "Active:"

Bước 5 - Xem log qua web (giao diện)

n8n có sẵn trang log ở dashboard. Vào Settings > Usage and Plan. Tại đây bạn thấy số workflow chạy thành công/thất bại. Để xem chi tiết log của từng workflow execution, vào Executions trong sidebar.

Bạn không cần gõ lệnh journalctl hay tail -f, toàn bộ log execution đều hiển thị trên web, bao gồm input/output của từng node, lỗi nếu có. Với người không phải dev, đây là cách dễ nhất để debug workflow.

Nếu muốn xem log hệ thống của n8n service (khi service crash), vẫn dùng journalctl:

sudo journalctl -u n8n -n 50 --no-pager

Bước 6 - Cập nhật n8n tự động

Để cập nhật lên bản mới nhất, bạn chỉ cần chạy script của n8n:

curl -fsSL https://raw.githubusercontent.com/n8n-io/n8n/master/docker/images/n8n/install.sh | sudo bash
sudo systemctl restart n8n

Script tự động cập nhật Node.js và n8n lên bản mới. Sau đó restart service. Kiểm tra version:

n8n --version

Lưu ý: nếu workflow của bạn dùng credential đã cũ (vd OAuth token hết hạn), sau update cần kiểm tra lại. Bạn có thể lên lịch chạy script này hàng tháng qua cron, nhưng đơn giản nhất là cứ vài tuần chạy thủ công một lần.

Xử lý lỗi thường gặp

  • Lỗi "EACCES: permission denied" khi service start: user n8n không có quyền ghi vào thư mục /home/n8n. Chạy sudo chown -R n8n:n8n /home/n8n rồi restart.
  • Port 5678 không mở được: kiểm tra firewall (lệnh sudo ufw status hoặc sudo firewall-cmd --list-all). Cũng có thể port bị chiếm bởi tiến trình khác, dùng sudo ss -tlnp | grep 5678.
  • n8n không khởi động sau reboot: chạy sudo systemctl is-enabled n8n. Nếu output là "disabled", làm lại bước sudo systemctl enable n8n.

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

Chạy n8n liên tục có tốn nhiều RAM không?

n8n idle (không chạy workflow) dùng khoảng 200-300 MB RAM. Khi chạy workflow, RAM tăng tuỳ độ phức tạp, thường 500 MB-1 GB. VPS 2 GB RAM đủ cho 3-5 workflow chạy đồng thời. Bạn có thể xem bảng giá VPS để chọn gói phù hợp.

Có cần biết Docker để cập nhật n8n không?

Không. Script cài đặt tự cập nhật Node.js và n8n. Bạn chỉ cần chạy lệnh curl và restart service. Không biết Docker gì cả.

Làm sao để xem log workflow mà không cần SSH?

Vào menu Executions trong dashboard web. Mỗi execution hiển thị input, output, lỗi chi tiết. Bạn không cần gõ lệnh nào.

N8n có chạy được trên VPS Windows không?

Có. Bạn có thể cài Node.js trên Windows Server rồi chạy n8n trực tiếp. Dùng thuê VPS Windows và cài n8n qua npm. Service cũng tự động start qua Task Scheduler.

Tôi mất quyền truy cập web, vào lại thế nào?

Nếu quên mật khẩu admin, vào SSH chạy n8n reset-password (file cấu hình cần set N8N_AUTH_RESET_PASSWORD=1 trong ExecStart). Hoặc xoá file database n8n và tạo lại tài khoản.

Bảo mật thế nào nếu dùng IP + port?

Chỉ mở port 5678 trên firewall (không mở với 0.0.0.0). Dùng UFW allow từ IP bạn. hàng đầu nên setup reverse proxy với HTTPS. N8n không tự có SSL, nên dùng Caddy hoặc Nginx + Certbot là bước kế tiếp.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.