Hướng dẫn tự triển khai N8N trên CentOS bằng Docker Compose và NGINX
Giới thiệu
N8N là công cụ mã nguồn mở cho phép bạn tự động hóa quy trình làm việc (workflow automation) và tích hợp nhiều dịch vụ khác nhau mà không cần phải lập trình. Nó cung cấp giao diện kéo-thả trực quan giúp bạn kết nối API, dịch vụ và ứng dụng thành quy trình tự động.
Tính năng nổi bật của N8N:
- No-code/Low-code: Kéo-thả, cấu hình workflow không cần code.
- Hỗ trợ 200+ tích hợp: Kết nối dễ dàng với Google Sheets, Slack, GitHub, Salesforce, v.v.
- Tự host: Bạn có thể triển khai N8N trên server riêng, toàn quyền quản lý dữ liệu.
- Linh hoạt: Cho phép chèn custom logic bằng JavaScript khi cần.
N8N thường được sử dụng để tự động hóa quy trình kinh doanh, đồng bộ dữ liệu giữa các nền tảng hoặc tích hợp API mà không cần code tay.
Làm thế nào để tự host N8N trên VPS để tiết kiệm chi phí?
Chuẩn bị
- VPS chạy Linux CentOS
- Một domain hoặc sub-domain
- Thêm A Record trỏ domain/sub-domain về IP của VPS
- Kiểm tra domain đã trỏ đúng bằng lệnh:
ping <your-domain>
Cài đặt Docker
Cập nhật hệ thống:
sudo yum update -y
Cài các gói cần thiết:
sudo yum install -y yum-utils
Thêm repository Docker:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Cài đặt Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
Khởi động và cho Docker chạy cùng hệ thống:
sudo systemctl start docker
sudo systemctl enable docker
Kiểm tra phiên bản Docker:
docker --version
Cài đặt Docker Compose
Tải và cài Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f 4)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Cấp quyền thực thi:
sudo chmod +x /usr/local/bin/docker-compose
Kiểm tra cài đặt:
docker-compose --version
Cấu hình N8N bằng Docker Compose
Tạo thư mục dự án:
mkdir n8n && cd n8n
Tạo file docker-compose.yml
:
nano docker-compose.yml
Tạo thư mục lưu dữ liệu:
mkdir -p n8n_data sudo chown -R 1000:1000 n8n_data
Nội dung file docker-compose.yml
:
version: "3"
services:
n8n:
image: n8nio/n8n:latest
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=<your_user_name>
- N8N_BASIC_AUTH_PASSWORD=<your_pasword>
volumes:
- ./n8n_data:/home/node/.n8n
restart: always
nginx:
image: nginx:latest
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- /etc/letsencrypt/live/:/etc/letsencrypt/live/:ro
- /etc/letsencrypt/archive/:/etc/letsencrypt/archive/:ro
- /etc/letsencrypt/keys/:/etc/letsencrypt/keys/:ro
depends_on:
- n8n
restart: always
Thay <your_user_name>
và <your_password>
bằng thông tin bạn muốn.
Khởi động N8N
Chạy N8N:
docker-compose up -d
Kiểm tra container:
docker ps
Truy cập N8N:
http://<your-server-ip>:5678
Đăng nhập bằng tài khoản bạn đã cấu hình.
Xử lý SELinux (nếu có)
CentOS mặc định bật SELinux, có thể gây lỗi cho Docker container.
Tạm thời tắt SELinux:
sudo setenforce 0
Nếu sau khi tắt chạy được, bạn cần cấp quyền thư mục:
sudo chcon -Rt svirt_sandbox_file_t n8n_data
Cài SSL miễn phí với Certbot và Let’s Encrypt
1. Cài Certbot
Kích hoạt EPEL:
sudo yum install -y epel-release
Cài Certbot:
sudo yum install -y certbot
Cài plugin Nginx (nếu muốn tự động cấu hình SSL):
sudo yum install -y python3-certbot-nginx
2. Lấy SSL Certificate
Dừng Nginx trước:
sudo systemctl stop nginx
Chạy lệnh lấy SSL:
sudo certbot certonly --standalone -d your-domain.com -d www.your-domain.com
3. Cấu hình Nginx sử dụng SSL
Khởi động lại Nginx:
sudo systemctl start nginx
Chỉnh sửa file cấu hình Nginx:
sudo nano /etc/nginx/nginx.conf
Ví dụ cấu hình:
events {
worker_connections 1024; # Number of maximum simultaneous connections
}
http {
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Other SSL options (recommended)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://n8n:5678; # Adjust this for your setup
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;
}
}
# Redirect HTTP to HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
}
Kiểm tra cấu hình:
sudo nginx -t
Khởi động lại Nginx:
sudo systemctl restart nginx
4. Tự động gia hạn SSL
Mở crontab:
sudo crontab -e
Thêm dòng sau:
0 0 * * * certbot renew --quiet && systemctl reload nginx
Việc này sẽ tự động kiểm tra và gia hạn SSL mỗi ngày lúc 12 giờ đêm, Nginx sẽ tự reload nếu SSL được renew.
Tác giả: Bạch Ngọc Toàn
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.