Cài đặt N8n Self-host lên docker
Giới thiệu
Hướng dẫn chi tiết này sẽ giúp bạn tự host n8n trên Docker một cách hoàn chỉnh. Bạn sẽ học cách sử dụng Docker để containerization, Nginx làm reverse proxy, và Certbot để cài đặt SSL miễn phí, cho phép bạn chạy nền tảng tự động hóa mạnh mẽ của riêng mình với tên miền tùy chỉnh.
Mục lục
- Bước 1: Cài đặt và khởi động Docker
- Bước 2: Chạy n8n trong Docker
- Bước 3: Cài đặt Nginx
- Bước 4: Cấu hình Nginx
- Bước 5: Thiết lập SSL với Certbot
- Cập nhật n8n và Docker
Bước 1: Cài đặt và khởi động Docker
Cập nhật danh sách gói:
sudo apt update
Cài đặt Docker:
sudo apt install docker.io
Khởi động Docker:
sudo systemctl start docker
Bật Docker tự động khởi động khi boot:
sudo systemctl enable docker
Bước 2: Chạy n8n trong Docker
Chạy lệnh sau để khởi động n8n trong Docker. Thay thế your-domain.com bằng tên miền thực tế của bạn:
sudo docker run -d --restart unless-stopped -it \
--name n8n \
-p 5678:5678 \
-e N8N_HOST="your-domain.com" \
-e WEBHOOK_TUNNEL_URL="https://your-domain.com/" \
-e WEBHOOK_URL="https://your-domain.com/" \
-v ~/.n8n:/root/.n8n \
n8nio/n8n
Hoặc nếu bạn sử dụng subdomain, lệnh sẽ như sau:
sudo docker run -d --restart unless-stopped -it \
--name n8n \
-p 5678:5678 \
-e N8N_HOST="subdomain.your-domain.com" \
-e WEBHOOK_TUNNEL_URL="https://subdomain.your-domain.com/" \
-e WEBHOOK_URL="https://subdomain.your-domain.com/" \
-v ~/.n8n:/root/.n8n \
n8nio/n8n
Lệnh này thực hiện các việc sau:
- Tải xuống và chạy Docker image của n8n
- Mở cổng 5678 cho n8n
- Thiết lập biến môi trường cho n8n host và webhook tunnel URL
- Mount thư mục dữ liệu n8n để lưu trữ lâu dài
Sau khi thực thi lệnh, n8n sẽ có thể truy cập tại your-domain.com:5678.
Bước 3: Cài đặt Nginx
Nginx được sử dụng làm reverse proxy để chuyển tiếp các request đến n8n và xử lý SSL termination.
Cài đặt Nginx:
sudo apt install nginx
Bước 4: Cấu hình Nginx
Cấu hình Nginx để reverse proxy giao diện web của n8n:
Tạo file cấu hình Nginx mới:
sudo nano /etc/nginx/sites-available/n8n.conf
Dán cấu hình sau:
server {
listen 80;
server_name your-domain.com; // subdomain.your-domain.com nếu bạn có subdomain
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 https;
proxy_read_timeout 86400;
}
}
Thay thế your-domain.com bằng tên miền thực tế của bạn.
Kích hoạt cấu hình:
sudo ln -s /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/
Kiểm tra cấu hình Nginx và khởi động lại:
sudo nginx -t
sudo systemctl restart nginx
Bước 5: Thiết lập SSL với Certbot
Certbot sẽ lấy và cài đặt chứng chỉ SSL từ Let's Encrypt.
Cài đặt Certbot và Nginx Plugin:
sudo apt install certbot python3-certbot-nginx
Lấy chứng chỉ SSL:
sudo certbot --nginx -d your-domain.com
// Nếu bạn có subdomain thì sẽ là subdomain.your-domain.com
Làm theo hướng dẫn trên màn hình để hoàn tất cài đặt SSL. Sau khi hoàn tất, n8n sẽ có thể truy cập an toàn qua HTTPS tại your-domain.com.
Bằng cách sử dụng Nginx và Certbot, bạn đảm bảo rằng instance n8n của mình có thể truy cập an toàn qua internet với HTTPS.
Cập nhật n8n và Docker
Để đảm bảo bạn cập nhật n8n và Docker một cách chính xác mà không mất dữ liệu, điều quan trọng là phải tuân theo các bước cụ thể, đặc biệt vì dữ liệu n8n của bạn được lưu trữ liên tục qua Docker volume (~/.n8n).
Cập nhật n8n (ứng dụng)
Quá trình này bao gồm việc pull Docker image n8n mới nhất và tạo lại container n8n của bạn, đồng thời đảm bảo volume dữ liệu được tái sử dụng.
1. Dừng container n8n đang chạy:
docker stop n8n
Lệnh này dừng ứng dụng n8n một cách an toàn.
2. Xóa container n8n cũ:
docker rm n8n
Lệnh này xóa instance container cũ. Dữ liệu của bạn (workflows, credentials, v.v.) vẫn an toàn vì nó được lưu trong volume ~/.n8n trên ổ đĩa của VM, không phải bên trong container.
3. Pull Docker image n8n mới nhất:
docker pull n8nio/n8n:latest
Lệnh này tải xuống phiên bản mới nhất của n8n từ Docker Hub.
4. Chạy lại n8n sử dụng image mới nhất và volume dữ liệu hiện có:
Bạn cần sử dụng chính xác lệnh docker run mà bạn đã dùng ban đầu cho n8n, bao gồm tất cả các biến môi trường và volume mount quan trọng -v ~/.n8n:/root/.n8n.
sudo docker run -d --restart unless-stopped -it \
--name n8n \
-p 5678:5678 \
-e N8N_HOST="your-domain.com" \
-e WEBHOOK_TUNNEL_URL="https://your-domain.com/" \
-e WEBHOOK_URL="https://your-domain.com/" \
-v ~/.n8n:/root/.n8n \
n8nio/n8n
Lệnh này sẽ tạo container mới từ image mới nhất, gắn kết dữ liệu ~/.n8n hiện có của bạn, và khởi động n8n.
5. Xác minh n8n đang chạy:
docker ps
Bạn sẽ thấy n8n được liệt kê với trạng thái "Up".
Cập nhật Docker (nền tảng container)
Cập nhật Docker là việc riêng biệt với việc cập nhật ứng dụng n8n. Điều này liên quan đến việc cập nhật Docker engine được cài đặt trên VM của bạn.
1. Dừng tất cả các Docker container đang chạy (bao gồm n8n):
docker stop $(docker ps -aq)
2. Cập nhật danh sách gói và nâng cấp Docker:
sudo apt update
sudo apt upgrade docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Hoặc, nếu bạn cài đặt qua gói 'docker.io':
# sudo apt upgrade docker.io -y
3. Khởi động lại VM (Khuyến nghị):
sudo reboot
4. Kết nối lại và xác minh Docker đã được cập nhật:
docker --version
sudo systemctl status docker
5. Khởi động container n8n của bạn:
Nó sẽ tự động khởi động lại. Nếu không, khởi động thủ công:
docker start n8n
Kết luận
Bạn đã hoàn thành việc cài đặt n8n self-host trên Docker với đầy đủ tính năng bảo mật SSL và reverse proxy. Giờ đây bạn có thể sử dụng n8n để tự động hóa các workflow của mình một cách an toàn và hiệu quả.