Cách cài n8n trên VPS Ubuntu để tự động hóa công việc
Hướng dẫn cài n8n trên VPS Ubuntu bằng Docker Compose, kết nối tên miền và bật HTTPS. Tự host n8n giúp bạn chủ động dữ liệu, đồng thời dễ dàng xây dựng các quy trình tự động hóa.
- Cập nhật
- 7 phút đọc
- 11 lượt xem

n8n là công cụ tự động hóa quy trình cho phép kết nối nhiều ứng dụng và dịch vụ với nhau thông qua các workflow. Thay vì phụ thuộc hoàn toàn vào một nền tảng bên ngoài, bạn có thể tự host n8n trên VPS để chủ động hơn với dữ liệu, cấu hình và cách vận hành.
Trong bài viết này, bạn sẽ tìm hiểu cách cài n8n trên VPS Ubuntu bằng Docker Compose, đưa giao diện lên tên miền riêng với HTTPS và chuẩn bị các bước bảo trì cơ bản. Hướng dẫn phù hợp với người mới triển khai máy chủ, nhưng vẫn lưu ý những điểm quan trọng về bảo mật và sao lưu.
1. Chuẩn bị trước khi cài n8n trên VPS

Trước khi cài đặt, hãy chuẩn bị một VPS chạy Ubuntu, quyền truy cập SSH với tài khoản có thể dùng sudo và một tên miền hoặc tên miền phụ trỏ về địa chỉ IP của máy chủ. Bạn có thể chọn phiên bản Ubuntu LTS còn được hỗ trợ để thuận tiện cập nhật bảo mật.
VPS cần có tài nguyên phù hợp với số lượng workflow, lượng dữ liệu và tần suất chạy. Một quy trình đơn giản, ít lần thực thi sẽ có nhu cầu khác với hệ thống xử lý nhiều webhook hoặc dữ liệu lớn. Hãy theo dõi CPU, RAM và dung lượng đĩa sau khi triển khai để điều chỉnh cấu hình khi cần, thay vì chọn máy chủ chỉ dựa vào một con số cố định.
Các điều kiện cần kiểm tra:
- Tên miền đã trỏ bản ghi A về IP VPS. Chỉ cấu hình bản ghi AAAA nếu máy chủ thực sự sử dụng IPv6.
- Các cổng 80 và 443 có thể truy cập từ Internet để Caddy cấp chứng chỉ HTTPS.
- Bạn có thông tin đăng nhập SSH an toàn và đã cập nhật hệ điều hành.
- Bạn có kế hoạch lưu giữ khóa mã hóa và bản sao lưu dữ liệu n8n.
Kết nối vào VPS, sau đó cập nhật các gói hệ thống:
sudo apt update && sudo apt upgrade -y2. Cài Docker và Docker Compose trên Ubuntu
Docker giúp đóng gói n8n cùng các thành phần cần thiết, còn Docker Compose cho phép khai báo và khởi chạy các dịch vụ bằng một cấu hình. Cách này giúp việc cập nhật, khởi động lại và chuyển môi trường dễ quản lý hơn.
Cài các gói cần thiết và thêm kho Docker chính thức:
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginKiểm tra Docker Compose đã sẵn sàng:
sudo docker compose versionTrong hướng dẫn này, các lệnh Docker dùng sudo để hạn chế thay đổi quyền truy cập Docker socket. Người có quyền điều khiển Docker có thể tác động sâu đến máy chủ, vì vậy không nên cấp quyền này tùy tiện.
3. Tạo cấu hình n8n và Caddy

Caddy sẽ đứng trước n8n, nhận truy cập HTTPS và chuyển tiếp yêu cầu đến dịch vụ n8n trong mạng Docker. Nhờ đó, cổng giao diện n8n không cần mở trực tiếp ra Internet.
Tạo thư mục triển khai:
sudo mkdir -p /opt/n8n
sudo chown "$USER":"$USER" /opt/n8n
cd /opt/n8nTạo tệp .env để lưu tên miền và khóa mã hóa. Thay automation.example.com bằng tên miền của bạn:
cat > .env <<EOF
N8N_HOST=automation.example.com
N8N_VERSION=latest
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .envKhóa mã hóa bảo vệ thông tin đăng nhập dịch vụ mà n8n lưu trữ. Hãy giữ bản sao khóa ở nơi an toàn; nếu mất khóa, bạn có thể không giải mã được các thông tin xác thực đã lưu. Khi vận hành ổn định, nên thay latest bằng thẻ phiên bản cụ thể đã kiểm tra để chủ động kiểm soát nâng cấp.
Tạo tệp compose.yaml:
services:
n8n:
image: n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
N8N_PROTOCOL: https
WEBHOOK_URL: https://${N8N_HOST}/
N8N_EDITOR_BASE_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: 1
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
GENERIC_TIMEZONE: Asia/Ho_Chi_Minh
TZ: Asia/Ho_Chi_Minh
volumes:
- n8n_data:/home/node/.n8n
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
n8n_data:
caddy_data:
caddy_config:Tiếp theo, tạo tệp Caddyfile và dùng đúng tên miền đã khai báo trong .env:
automation.example.com {
reverse_proxy n8n:5678
}Dữ liệu n8n được lưu trong volume n8n_data, tách khỏi vòng đời container. Caddy tự xử lý HTTPS khi tên miền trỏ đúng về VPS và cổng 80, 443 được phép truy cập. Nếu đổi tên miền, hãy cập nhật cả hai tệp cấu hình.
4. Khởi chạy n8n và hoàn tất thiết lập

Trước khi mở các cổng web, hãy kiểm tra firewall. Nếu sử dụng UFW, cho phép SSH để tránh tự khóa quyền truy cập, sau đó mở HTTP và HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableNếu nhà cung cấp VPS có firewall riêng, bạn cũng cần cho phép các cổng tương ứng tại đó. Sau khi xác nhận DNS đã trỏ về đúng IP, khởi chạy dịch vụ:
cd /opt/n8n
sudo docker compose up -dKiểm tra trạng thái container và nhật ký nếu cần:
sudo docker compose ps
sudo docker compose logs -f n8nKhi Caddy cấp chứng chỉ thành công, mở https://automation.example.com trên trình duyệt. Làm theo hướng dẫn khởi tạo tài khoản quản trị, đặt mật khẩu mạnh và chỉ cấp quyền cho người thực sự cần sử dụng. Không chia sẻ tài khoản quản trị hoặc khóa mã hóa qua kênh công khai.
5. Tạo workflow đầu tiên và khắc phục lỗi thường gặp
Sau khi đăng nhập, bạn có thể tạo workflow mới, thêm một trigger để bắt đầu quy trình, rồi kết nối các node xử lý và hành động. Chẳng hạn, một workflow có thể nhận dữ liệu từ webhook, kiểm tra nội dung, sau đó chuyển thông tin đến một dịch vụ khác. Hãy bắt đầu bằng quy trình nhỏ, chạy thử với dữ liệu mẫu và kiểm tra từng bước trước khi bật hoạt động tự động.
Nếu webhook không hoạt động, hãy rà soát WEBHOOK_URL, tên miền và cấu hình HTTPS. Nếu trang không truy cập được, kiểm tra DNS, firewall và nhật ký Caddy bằng lệnh sudo docker compose logs -f caddy. Khi container không khởi động, xem thêm thông báo lỗi bằng sudo docker compose logs n8n và xác nhận tệp .env có đủ biến cấu hình.
Một số nguyên tắc hữu ích khi xây dựng workflow:
- Chỉ lưu thông tin xác thực cần thiết và giới hạn quyền truy cập.
- Kiểm tra dữ liệu đầu vào, đặc biệt với webhook có thể nhận yêu cầu từ bên ngoài.
- Ghi lại mục đích của workflow và cách xử lý khi một bước thất bại.
- Chạy thử trước khi kích hoạt quy trình có thể gửi thông báo hoặc thay đổi dữ liệu thật.
6. Sao lưu, cập nhật và bảo mật khi tự host n8n
Tự host n8n giúp bạn chủ động nơi lưu trữ, nhưng đồng thời bạn chịu trách nhiệm duy trì máy chủ. Hãy sao lưu dữ liệu n8n và lưu riêng tệp .env cùng khóa mã hóa ở nơi bảo mật. Không nên chỉ giữ bản sao trên cùng VPS, vì sự cố máy chủ có thể ảnh hưởng đến cả dữ liệu gốc lẫn bản sao lưu.
Trước khi cập nhật, tạo bản sao lưu và đọc ghi chú phiên bản để nắm thay đổi có thể ảnh hưởng đến workflow. Khi đã sẵn sàng, tải image mới và khởi chạy lại dịch vụ:
sudo docker compose pull
sudo docker compose up -dThường xuyên cài bản cập nhật bảo mật cho Ubuntu, theo dõi dung lượng ổ đĩa và kiểm tra các workflow quan trọng. Không xóa volume n8n khi dọn container; volume đó chứa dữ liệu ứng dụng. Cũng nên giới hạn quyền quản trị VPS, dùng mật khẩu mạnh và chỉ mở những cổng thực sự cần thiết.
Kết luận
Cài n8n trên VPS Ubuntu bằng Docker Compose là cách thiết thực để tự xây dựng hệ thống tự động hóa, đồng thời chủ động hơn với dữ liệu và cấu hình. Bạn có thể bắt đầu với một workflow nhỏ, sau đó mở rộng khi đã kiểm tra kỹ bảo mật, sao lưu và khả năng đáp ứng của máy chủ. Nếu cần môi trường riêng để triển khai, hãy tham khảo các gói VPS của VibeVPS và chọn cấu hình phù hợp với nhu cầu thực tế.
- #n8n
- #VPS Ubuntu
- #Docker Compose
- #tự động hóa
- #tự host n8n


