Yêu cầu kiến thức trước khi tự cài đặt n8n trên Ubuntu (Self-hosting)
Tự cài đặt n8n trên Ubuntu yêu cầu kiến thức kỹ thuật, bao gồm:
- Thiết lập và cấu hình máy chủ cũng như container
- Quản lý tài nguyên ứng dụng và mở rộng quy mô
- Bảo mật máy chủ và ứng dụng
- Cấu hình n8n
- Quản lý VPS
- Cấu hình tên miền & DNS

Việc đăng ký VPS và tên miền có thể thực hiện tại nhiều nhà cung cấp khác nhau. Tuy nhiên, để đảm bảo hiệu suất và tính ổn định, Bitsness khuyến nghị bạn có thể tham khảo dịch vụ của Vietnix, một trong những nhà cung cấp uy tín với chất lượng tốt và hỗ trợ nhanh chóng. Đăng ký dịch vụ của Vietnix tại đây.
Yêu cầu kỹ thuật cho VPS
Khi lựa chọn VPS để chạy n8n, bạn không cần quá chú trọng vào CPU, nhưng RAM là yếu tố quan trọng. Cấu hình khuyến nghị:
- RAM tối thiểu: 4GB (để đảm bảo n8n hoạt động ổn định).
- Hệ điều hành: Ubuntu 22.04 (phiên bản được khuyến nghị để triển khai n8n).
Sau khi đã có VPS và tên miền, bạn có thể tiến hành cài đặt n8n theo hướng dẫn chi tiết dưới đây.
1. Cài đặt Docker
Quá trình cài đặt có thể khác nhau tùy vào bản phân phối Linux bạn đang sử dụng. Bạn có thể tìm hướng dẫn chi tiết trong tài liệu chính thức của Docker.
Dưới đây là hướng dẫn cài đặt Docker trên Ubuntu:
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
2. Cài đặt Docker-Compose
Quá trình cài đặt có thể khác nhau tùy vào bản phân phối Linux bạn đang sử dụng. Bạn có thể tìm hướng dẫn chi tiết trong tài liệu chính thức của Docker.
Dưới đây là ví dụ cài đặt Docker-Compose trên Ubuntu:
sudo apt-get install docker-compose-plugin
3. Cấu hình DNS
Thêm bản ghi A record để định tuyến tên miền phụ (subdomain) đến địa chỉ IP tương ứng.
Type: A
Name: n8n (or the desired subdomain)
IP address: <IP_SERVER_CỦA_BẠN>
4. Tạo tệp Docker Compose
Tạo một tệp docker-compose.yml
, sau đó dán nội dung sau vào tệp:
version: "3.7"
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
ports:
- "127.0.0.1:5678:5678"
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.entrypoints=web,websecure
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge
- traefik.http.middlewares.n8n.headers.SSLRedirect=true
- traefik.http.middlewares.n8n.headers.STSSeconds=315360000
- traefik.http.middlewares.n8n.headers.browserXSSFilter=true
- traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
- traefik.http.middlewares.n8n.headers.forceSTSHeader=true
- traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
- traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.n8n.headers.STSPreload=true
- traefik.http.routers.n8n.middlewares=n8n@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
- /local-files:/files
volumes:
traefik_data:
external: true
n8n_data:
external: true
5. Tạo tệp .env
Tạo một tệp .env
và chỉnh sửa nội dung theo yêu cầu của bạn.
# Tên miền cấp cao nhất để phục vụ dịch vụ
DOMAIN_NAME=bitsness.vn
# Tên miền phụ để phục vụ dịch vụ
SUBDOMAIN=n8n
# DOMAIN_NAME và SUBDOMAIN kết hợp lại sẽ xác định địa chỉ truy cập của n8n
# Ví dụ trên sẽ dẫn đến: https://n8n.bitsness.vn
# Cấu hình múi giờ chung
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
# Cấu hình chế độ lưu trữ dữ liệu nhị phân mặc định của n8n
N8N_DEFAULT_BINARY_DATA_MODE=filesystem
# Bật chế độ kiểm soát quyền truy cập tệp cấu hình
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
# Kích hoạt tính năng dọn dẹp dữ liệu thực thi
EXECUTIONS_DATA_PRUNE=true
# Giới hạn thời gian lưu trữ dữ liệu thực thi (tính theo giờ)
EXECUTIONS_DATA_MAX_AGE=168
# Giới hạn số lượng bản ghi dữ liệu thực thi được lưu trữ
EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000
# Địa chỉ email sử dụng để tạo chứng chỉ SSL
SSL_EMAIL=bitsness.ad@gmail.com
6. Tạo thư mục dữ liệu
Tạo Docker volume được định nghĩa là n8n_data
. n8n sẽ lưu trữ tệp cơ sở dữ liệu SQLite và khóa mã hóa trong volume này.
sudo docker volume create n8n_data
Tạo một Docker volume cho dữ liệu của Traefik, được định nghĩa là traefik_data
.
sudo docker volume create traefik_data
7. Khởi động Docker Compose
Bây giờ bạn có thể khởi động n8n bằng lệnh sau:
sudo docker compose up -d
Để dừng container, chạy lệnh sau:
sudo docker compose stop
Để cập nhật container, dùng lệnh sau:
sudo docker compose pull
8. Hoàn tất
Bây giờ, n8n có thể được truy cập bằng tên miền phụ (subdomain) và tên miền chính (domain) đã cấu hình.
Ví dụ trên sẽ dẫn đến địa chỉ: https://n8n.bitsness.vn
Lưu ý: n8n chỉ có thể được truy cập qua https
, không hỗ trợ http
.