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

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ả.