Hướng dẫn tự triển khai N8N trên CentOS bằng Docker Compose và NGINX

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:

  1. No-code/Low-code: Kéo-thả, cấu hình workflow không cần code.
  2. Hỗ trợ 200+ tích hợp: Kết nối dễ dàng với Google Sheets, Slack, GitHub, Salesforce, v.v.
  3. 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.
  4. 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ị

  1. VPS chạy Linux CentOS
  2. Một domain hoặc sub-domain
  3. Thêm A Record trỏ domain/sub-domain về IP của VPS
  4. 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><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.

Lên trên