Máy chủ & Hệ điều hành, Docker

Hướng Dẫn Triển Khai Nhiều Instance n8n Trên Docker Với aaPanel, Khắc Phục Lỗi Quyền Và Database

Dưới đây là bài viết hướng dẫn chi tiết giúp bạn triển khai và nhân bản nhiều instance n8n trên Docker với aaPanel mà không gặp lỗi phân quyền hay lỗi database — một trong những chủ đề mà rất nhiều DevOps, quản trị viên server và lập trình viên workflow automation ở Việt Nam quan tâm!


Hướng Dẫn Triển Khai Nhiều Instance n8n Trên Docker Với aaPanel, Khắc Phục Lỗi Quyền Và Database

n8n là một nền tảng workflow automation mạnh mẽ, phổ biến nhờ khả năng mở rộng và dễ tùy biến. Tuy nhiên, khi bạn cần chạy nhiều instance n8n trên cùng một server (VD: phục vụ nhiều team, môi trường test-prod riêng biệt…), nếu cấu hình sai volume hoặc quyền thư mục sẽ phát sinh các lỗi điển hình:

  • Lỗi EACCES: permission denied (không truy cập được file)
  • Lỗi database is locked / database malformed (xung đột file SQLite khi nhiều container dùng chung)
  • Hoặc thậm chí lỗi cấu hình môi trường, trùng port, v.v.

Bài viết này sẽ hướng dẫn bạn cách triển khai đúng chuẩn trên aaPanel với Docker Compose, giúp bạn mở rộng hệ thống dễ dàng, tránh mọi lỗi về quyền và database.


1. Vì Sao Nhiều Instance n8n Bị Lỗi?

  • Nhiều container mount chung 1 volume (/home/node/.n8n): gây xung đột database SQLite.
  • Sai quyền thư mục: n8n (user node, UID 1000) không ghi được file cấu hình/workflow.
  • Chung port: không truy cập được từng instance.

2. Nguyên Tắc Khắc Phục

  • Mỗi container n8n phải dùng 1 volume riêng (1 thư mục riêng trên host).
  • Cấp quyền đúng: UID/GID 1000 cho thư mục volume.
  • Port và domain/subdomain phải khác nhau cho từng instance.

3. Các Bước Triển Khai Nhiều Instance n8n Trên aaPanel

Bước 1: Tạo Thư Mục Volume Riêng Cho Mỗi Instance

Vào SSH hoặc Terminal trên aaPanel, tạo thư mục cho từng instance:

mkdir -p /www/dk_project/dk_app/n8n/n8n_117/data
chown -R 1000:1000 /www/dk_project/dk_app/n8n/n8n_117
chmod -R 770 /www/dk_project/dk_app/n8n/n8n_117

Lặp lại với n8n_118, n8n_119… (mỗi instance một thư mục khác nhau).


Bước 2: Khai Báo Biến Môi Trường (.env) Cho Mỗi Instance

Ví dụ cho n8n_117:

VERSION=latest
CONTAINER_NAME=n8n_117
HOST_IP=127.0.0.1
WEB_HTTP_PORT=5680
CPUS=0
MEMORY_LIMIT=0MB
APP_PATH=/www/dk_project/dk_app/n8n/n8n_117

Đảm bảo mỗi instance PORT và APP_PATH khác nhau!


Bước 3: Viết File docker-compose Cho Instance n8n_117

Trong aaPanel Docker, khi tạo Compose mới, điền như sau:

version: '3.8'
services:
  n8n_117:
    image: n8nio/n8n:latest
    container_name: n8n_117
    deploy:
      resources:
        limits:
          cpus: ${CPUS}
          memory: ${MEMORY_LIMIT}
    restart: always
    ports:
      - ${HOST_IP}:${WEB_HTTP_PORT}:5678
    volumes:
      - ${APP_PATH}/data:/home/node/.n8n
    environment:
      N8N_SECURE_COOKIE: false
      N8N_HOST: n8n117.movads.vn
      WEBHOOK_URL: https://n8n117.movads.vn
    labels:
      createdBy: "bt_apps"
    networks:
      - baota_net
networks:
  baota_net:
    external: true

Bước 4: Tạo Compose Trên aaPanel

  • Vào menu Docker > Compose > Add Compose.
  • Đặt tên, dán nội dung .envcompose.yaml như trên vào các ô tương ứng.
  • Nhấn Confirm.

Bước 5: Khởi Động Và Kiểm Tra

  • Tạo xong, vào tab Container List, nhấn Start.
  • Kiểm tra log, nếu thấy dòng:
    n8n ready on 0.0.0.0, port 5678
    Editor is now accessible via: https://n8n117.movads.vn
    

    là thành công!


Bước 6: Truy Cập Giao Diện n8n

  • Nếu port là 5680: http://<server-ip>:5680
  • Nếu đã gắn domain: https://n8n117.movads.vn

7. Xử Lý Lỗi Phân Quyền

Nếu gặp lỗi kiểu:

EACCES: permission denied, open '/home/node/.n8n/config'

Cách sửa:
Vào SSH/Terminal:

chown -R 1000:1000 /www/dk_project/dk_app/n8n/n8n_117
chmod -R 770 /www/dk_project/dk_app/n8n/n8n_117

8. Muốn Tạo Thêm n8n_118, n8n_119…?

Chỉ cần lặp lại các bước trên, đổi tên:

  • Thư mục: /www/dk_project/dk_app/n8n/n8n_118
  • Container, Compose, Port: n8n_118, 5681
  • Domain: n8n118.movads.vn

Kết Luận

Với cách triển khai này, bạn có thể mở rộng và quản lý bao nhiêu instance n8n tùy thích trên một server với Docker, không sợ lỗi phân quyền hoặc xung đột database.
Thực hiện trên aaPanel lại càng trực quan, ai cũng có thể tự thao tác!


Nếu bạn gặp vướng mắc về cài đặt, cấu hình nâng cao (HTTPS, reverse proxy, PostgreSQL…), hãy để lại bình luận bên dưới để được hỗ trợ chi tiết!


Chúc bạn triển khai n8n hiệu quả và an toàn!


Nếu bạn cần bản markdown hoặc html để dán lên blog, hãy yêu cầu mình nhé!

Leave a Reply

Your email address will not be published. Required fields are marked *