Hướng dẫn Step-by-step: Cài đặt N8n Self-host trên Ubuntu 24.04.2 với Docker Compose
Hướng dẫn này cung cấp các bước chi tiết để bạn cài đặt N8n trên máy chủ Ubuntu 24.04.2, cấu hình truy cập nội bộ với địa chỉ IP 192.168.12.225 và chuẩn bị cho việc triển khai ra Internet với tên miền n8n.icttech.vn và SSL.
1. Chuẩn bị hệ thống Ubuntu
Đảm bảo máy chủ Ubuntu 24.04.2 của bạn đã được cập nhật và có quyền truy cập sudo.
1.1. Cập nhật hệ thống
Mở Terminal và chạy các lệnh sau để cập nhật các gói phần mềm:
sudo apt update
sudo apt upgrade -y
1.2. Cài đặt các gói cần thiết
Cài đặt các gói phụ thuộc để Docker có thể hoạt động:
sudo apt install -y ca-certificates curl gnupg lsb-release
2. Cài đặt Docker Engine
Docker là nền tảng chính để chạy N8n.
2.1. Thêm Docker GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
2.2. Thêm Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
2.3. Cài đặt Docker Engine và Docker Compose Plugin
Cập nhật lại danh sách gói và cài đặt Docker Engine cùng với Docker Compose Plugin:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2.4. Thêm người dùng vào nhóm Docker (Quan trọng)
Để chạy các lệnh Docker mà không cần sudo, hãy thêm người dùng hiện tại (là n8n trong trường hợp của bạn) vào nhóm docker. Sau đó, kích hoạt thay đổi.
sudo usermod -aG docker $USER
sudo usermod -aG docker n8n # Đảm bảo người dùng n8n được thêm
newgrp docker # Kích hoạt thay đổi ngay lập tức cho phiên hiện tại
Nếu bạn vẫn gặp lỗi quyền sau bước này, hãy đăng xuất và đăng nhập lại SSH, hoặc khởi động lại Terminal.
2.5. Kiểm tra cài đặt Docker
docker run hello-world
Nếu bạn thấy thông báo “Hello from Docker!”, Docker đã được cài đặt thành công.
3. Cấu hình và chạy N8n với Docker Compose (Truy cập Local)
Chúng ta sẽ tạo một file docker-compose.yml để định nghĩa dịch vụ N8n và PostgreSQL.
3.1. Tạo thư mục cho N8n
Đảm bảo bạn đang ở thư mục chính của người dùng (~) hoặc thư mục bạn muốn chứa cấu hình N8n. Sau đó, tạo thư mục .n8n và di chuyển vào đó:
mkdir ~/.n8n
cd ~/.n8n
3.2. Tạo file docker-compose.yml
Sử dụng trình soạn thảo văn bản (ví dụ: nano) để tạo file docker-compose.yml:
nano docker-compose.yml
Dán nội dung sau vào file. Hãy đảm bảo bạn thay thế n8N1!NBn và n8N1!NBnD8 bằng các mật khẩu mạnh và an toàn của riêng bạn.
version: '3.8'
services:
n8n:
image: n8nio/n8n # Sử dụng image chính thức từ Docker Hub
restart: always
ports:
- "192.168.12.225:5678:5678" # Truy cập N8n qua IP nội bộ và cổng 5678
environment:
- N8N_HOST=192.168.12.225 # Đặt host cho N8n
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://192.168.12.225:5678/ # URL webhook cho truy cập nội bộ
- GENERIC_TIMEZONE=Asia/Ho_Chi_Minh # Múi giờ Việt Nam
- N8N_BASIC_AUTH_ACTIVE=true # Bật xác thực cơ bản
- N8N_BASIC_AUTH_USER=admin # Tên người dùng cho Basic Auth
- N8N_BASIC_AUTH_PASSWORD=n8N1!NBn # Mật khẩu cho Basic Auth (THAY ĐỔI BẰNG MẬT KHẨU MẠNH)
- N8N_SECURE_COOKIE=false # Tắt secure cookie cho truy cập HTTP nội bộ
# Cấu hình cơ sở dữ liệu PostgreSQL (Khuyến nghị cho production)
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8nuser
- DB_POSTGRESDB_PASSWORD=n8N1!NBnD8 # Mật khẩu DB (THAY ĐỔI BẰNG MẬT KHẨU MẠNH)
volumes:
- ./n8n_data:/home/node/.n8n # Lưu trữ dữ liệu N8n
depends_on:
postgres:
condition: service_healthy # Đảm bảo PostgreSQL khởi động và khỏe mạnh trước N8n
networks:
- n8n_network
postgres:
image: postgres:13
restart: always
environment:
- POSTGRES_DB=n8n
- POSTGRES_USER=n8nuser
- POSTGRES_PASSWORD=n8N1!NBnD8 # Mật khẩu DB (PHẢI GIỐNG Ở TRÊN)
volumes:
- ./pg_data:/var/lib/postgresql/data # Lưu trữ dữ liệu PostgreSQL
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8nuser -d n8n"]
interval: 5s
timeout: 5s
retries: 5
start_period: 10s
networks:
- n8n_network
networks:
n8n_network:
driver: bridge
Lưu file (Ctrl+O, Enter, Ctrl+X nếu dùng nano).
3.3. Tạo thư mục dữ liệu và cấp quyền (Quan trọng)
Các thư mục n8n_data và pg_data cần được tạo và cấp quyền đúng trước khi Docker Compose khởi động.
mkdir n8n_data
mkdir pg_data
sudo chown -R n8n:n8n n8n_data pg_data # Cấp quyền sở hữu cho người dùng n8n
sudo chmod -R 755 n8n_data pg_data # Đặt quyền truy cập cho thư mục
3.4. Chạy N8n
Trong thư mục ~/.n8n chứa file docker-compose.yml, chạy lệnh sau để khởi động N8n và PostgreSQL:
docker compose up -d
Nếu bạn vẫn gặp lỗi permission denied khi chạy lệnh này, hãy thử khởi động lại toàn bộ máy chủ VPS của bạn (sudo reboot), sau đó đăng nhập lại và chạy lại lệnh docker compose up -d.
3.5. Kiểm tra trạng thái các container
Chờ khoảng 30-60 giây để các container khởi động hoàn chỉnh, sau đó kiểm tra trạng thái của chúng:
docker compose ps
Bạn nên thấy cả n8n và postgres đều đang ở trạng thái Up và running (healthy).
3.6. Kiểm tra biến môi trường N8N_SECURE_COOKIE (Xác nhận cấu hình)
docker inspect n8n-n8n-1 | grep N8N_SECURE_COOKIE
Bạn sẽ thấy output là "N8N_SECURE_COOKIE=false", xác nhận cấu hình đã được áp dụng.
4. Truy cập N8n và Cấu hình Firewall (Local)
4.1. Truy cập N8n
Mở trình duyệt web của bạn và truy cập địa chỉ:
http://192.168.12.225:5678/
- Xác thực Basic HTTP (nếu bật): Trình duyệt có thể hiển thị một pop-up yêu cầu tên người dùng và mật khẩu. Đây là tài khoản bạn đã thiết lập trong
N8N_BASIC_AUTH_USER(mặc định làadmin) vàN8N_BASIC_AUTH_PASSWORD(n8N1!NBntheo ví dụ trên). - Thiết lập Owner Account: Sau khi vượt qua Basic Auth (nếu có), bạn sẽ thấy màn hình “Set up owner account” của N8n.
- Email, First Name, Last Name, Password: Đây là tài khoản người dùng nội bộ đầu tiên của N8n, sẽ được lưu trữ trong cơ sở dữ liệu. Bạn hãy điền thông tin và mật khẩu mới cho tài khoản này (ví dụ:
your_email@example.com,YourName,YourLastName,YourNewN8nAppPassword). Mật khẩu này có thể khác với mật khẩu Basic Auth.
- Email, First Name, Last Name, Password: Đây là tài khoản người dùng nội bộ đầu tiên của N8n, sẽ được lưu trữ trong cơ sở dữ liệu. Bạn hãy điền thông tin và mật khẩu mới cho tài khoản này (ví dụ:
4.2. Cấu hình Firewall (UFW) cho truy cập SSH và N8n
Bạn cần cho phép truy cập vào cổng SSH (22) và cổng N8n (5678) trên tường lửa UFW:
sudo ufw allow ssh
sudo ufw allow 5678/tcp
sudo ufw reload
sudo ufw enable # Chỉ chạy nếu UFW chưa được bật. Hãy đảm bảo bạn đã allow ssh trước khi enable UFW.
5. Chuẩn bị cho việc Public ra Internet với tên miền n8n.icttech.vn
Để public N8n ra Internet với tên miền và SSL/TLS (Let’s Encrypt), chúng ta sẽ sử dụng Nginx làm Reverse Proxy.
5.1. Cấu hình DNS
Đảm bảo tên miền con n8n.icttech.vn của bạn đã được cấu hình bản ghi A hoặc CNAME trỏ đến địa chỉ IP Public của máy chủ Ubuntu này.
5.2. Cài đặt và Cấu hình Nginx Reverse Proxy
- Cài đặt Nginx:
sudo apt install -y nginx - Tạo file cấu hình Nginx cho N8n:
sudo nano /etc/nginx/sites-available/n8n.icttech.vnDán nội dung sau vào file (thay thến8n.icttech.vnbằng tên miền của bạn):server { listen 80; server_name n8n.icttech.vn; # Chuyển hướng HTTP sang HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name n8n.icttech.vn; # Placeholder cho chứng chỉ SSL. Sẽ được Certbot điền sau. # ssl_certificate /etc/letsencrypt/live/n8n.icttech.vn/fullchain.pem; # ssl_key /etc/letsencrypt/live/n8n.icttech.vn/privkey.pem; # Cấu hình SSL/TLS cơ bản ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:ECDHE+AES256:DHE+AES256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-MD5:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA:!DHE-DSS-AES128-SHA:!DHE-DSS-AES256-SHA:!CAMELLIA:!SEED"; ssl_prefer_server_ciphers on; # Cấu hình Proxy cho N8n location / { # Proxy tới N8n container qua IP nội bộ và cổng 5678 proxy_pass http://192.168.12.225:5678/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 900s; # Tăng thời gian timeout cho các workflow dài } } - Kích hoạt cấu hình và kiểm tra Nginx:
sudo ln -s /etc/nginx/sites-available/n8n.icttech.vn /etc/nginx/sites-enabled/ sudo nginx -t # Kiểm tra cú pháp Nginx sudo systemctl restart nginx - Cài đặt Certbot để lấy chứng chỉ SSL (Let’s Encrypt):
sudo snap install core sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx -d n8n.icttech.vnLàm theo hướng dẫn trên màn hình để hoàn tất quá trình lấy chứng chỉ. Certbot sẽ tự động cấu hình Nginx để sử dụng chứng chỉ và thiết lập tự động gia hạn.
5.3. Cập nhật cấu hình N8n Docker Compose cho Public Access
Sau khi Reverse Proxy và SSL đã hoạt động, bạn cần cập nhật file docker-compose.yml của N8n để nó biết URL public của nó và phản hồi đúng các webhook.
- Dừng N8n:
cd ~/.n8n docker compose down - Chỉnh sửa
docker-compose.yml:nano docker-compose.ymlThay đổi các biến môi trường sau trong phầnenvironmentcủa dịch vụn8n:environment: # ... các biến khác - N8N_HOST=n8n.icttech.vn # Thay đổi thành tên miền public - N8N_PORT=443 # Cổng HTTPS mặc định từ phía Nginx - N8N_PROTOCOL=https # Giao thức HTTPS - WEBHOOK_URL=https://n8n.icttech.vn/ # Thay đổi thành URL public - N8N_SECURE_COOKIE=true # Nên bật lại secure cookie khi dùng HTTPS # ... các biến khácVà thay đổi phầnportscủa dịch vụn8nđể N8n chỉ lắng nghe trên giao diện localhost, vì Nginx sẽ xử lý việc truy cập từ bên ngoài:ports: - "127.0.0.1:5678:5678" # Nginx sẽ proxy tới cổng này trên localhostLưu file (Ctrl+O, Enter, Ctrl+X nếu dùng nano). - Khởi động lại N8n:
docker compose up -d
6. Cấu hình Firewall (UFW) cho Public Access
Đảm bảo các cổng 80 (HTTP) và 443 (HTTPS) được mở trên UFW để cho phép truy cập từ Internet:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
7. Hoàn tất và Lưu ý
Bây giờ bạn có thể truy cập N8n thông qua tên miền https://n8n.icttech.vn/.
Lưu ý quan trọng về bảo mật và quản lý:
- Luôn sử dụng mật khẩu mạnh và duy nhất cho tất cả các tài khoản (N8n Basic Auth, N8n Owner Account, PostgreSQL).
- Thường xuyên cập nhật Docker images của N8n và PostgreSQL để đảm bảo bạn có các bản vá bảo mật mới nhất.
- Cân nhắc cấu hình thêm các lớp bảo mật như Fail2Ban để chống lại các cuộc tấn công brute-force.
- Nếu bạn có các workflow nhạy cảm, hãy xem xét các tùy chọn bảo mật nâng cao của N8n.
- Theo dõi tài nguyên VPS của bạn, đặc biệt nếu bạn có kế hoạch cài đặt thêm WordPress và dịch vụ email trên cùng một server.
Chúc bạn thành công với việc vận hành N8n!