DevOps

Hướng dẫn cài đặt N8N với Docker

N8N

Giới thiệu

n8n là nền tảng tự động hóa mã nguồn mở mạnh mẽ, giúp người dùng kết nối và tự động hóa công việc của các quy trình một cách dễ dàng mà không cần kiến ​​thức sâu về cài đặt. Với giao diện kéo trực tiếp, n8n cho phép bạn tích hợp hàng trăm ứng dụng như Google Sheets, Slack, hay Trello, tạo các tùy chọn điều chỉnh luồng công việc (quy trình làm việc) để tối ưu hóa hiệu suất. Điểm nổi bật của n8n là tính linh hoạt, khả năng tự động lưu trữ trên máy chủ riêng và cộng đồng hỗ trợ sôi nổi, nó trở thành lựa chọn lý tưởng cho cá nhân hỗn doanh nghiệp muốn tiết kiệm thời gian và tăng hiệu quả công việc

Cài đặt từ Docker

Docker  cung cấp những lợi thế sau:

  • Cài đặt n8n trong môi trường sạch.
  • Thiết lập dễ dàng hơn cho cơ sở dữ liệu bạn ưa thích.
  • Có thể tránh các vấn đề do các hệ điều hành khác nhau gây ra vì Docker cung cấp một hệ thống thống nhất.
  • Có thể tránh các vấn đề về khả năng tương thích do sự khác biệt giữa hệ điều hành và công cụ.
  • Giúp việc di chuyển sang máy chủ hoặc môi trường mới trở nên đơn giản hơn.

Bạn cũng có thể sử dụng n8n trong Docker với  Docker Compose . Bạn có thể tìm thấy cấu hình Docker Compose cho nhiều kiến ​​trúc khác nhau trong  kho lưu trữ n8n-hosting .

Điều kiện tiên quyết

Trước khi tiếp tục, hãy cài đặt  Docker

Bắt đầu n8n

Từ thiết bị đầu cuối của bạn, hãy chạy:

docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Lệnh này tạo một ổ đĩa để lưu trữ dữ liệu liên tục, tải xuống hình ảnh n8n cần thiết và khởi động container của bạn, được hiển thị trên cổng  5678. Để lưu công việc của bạn giữa các lần khởi động lại container, nó cũng gắn một ổ đĩa docker,  n8n_data, để lưu trữ dữ liệu của bạn cục bộ.

Sau khi chạy, bạn có thể truy cập n8n bằng cách mở:  http://localhost:5678

Sử dụng với PostgreSQL

Theo mặc định, n8n sử dụng SQLite để lưu  thông tin xác thực , các lần thực thi trước và quy trình công việc. n8n cũng hỗ trợ PostgreSQL, có thể cấu hình bằng các biến môi trường như được nêu chi tiết bên dưới.

Khi sử dụng PostgreSQL, điều quan trọng là phải lưu trữ dữ liệu được lưu trữ trong  /home/node/.n8n thư mục. Điều này bao gồm dữ liệu người dùng n8n và quan trọng hơn nữa là khóa mã hóa cho thông tin xác thực. Đây cũng là tên của webhook khi sử dụng  đường hầm n8n .

Nếu n8n không tìm thấy  /home/node/.n8n thư mục khi khởi động, nó sẽ tự động tạo một thư mục. Trong trường hợp này, tất cả thông tin xác thực hiện có mà n8n đã lưu bằng khóa mã hóa khác sẽ không còn hoạt động nữa.

Lưu ý:

Việc lưu trữ dữ liệu tại /home/node/.n8n với PostgreSQL được xem là best practice và được khuyến khích sử dụng với cách này. Bên cạnh đó, bạn có thể sử dụng biến N8N_ENCRYPTION_KEY trong lúc start docker để bật tính năng mã hoá dữ liệu.

Để sử dụng n8n với PostgreSQL, hãy thực hiện các lệnh sau, thay thế các chỗ giữ chỗ (được mô tả trong dấu ngoặc nhọn, ví dụ  <POSTGRES_USER>) bằng các giá trị thực của bạn:

docker volume create n8n_data

docker run -it --rm \
 --name n8n \
 -p 5678:5678 \
 -e DB_TYPE=postgresdb \
 -e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
 -e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
 -e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
 -e DB_POSTGRESDB_USER=<POSTGRES_USER> \
 -e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
 -e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
 -v n8n_data:/home/node/.n8n \
 docker.n8n.io/n8nio/n8n

Bạn có thể tìm thấy  docker-compose tệp đầy đủ cho PostgreSQL trong  kho lưu trữ n8n .

Cài đặt N8N với Docker-compose

Một cách khác để cài đặt N8N là sử dụng Docker-compose, công cụ này giúp hỗ trợ việc quản lý cấu hình docker tốt hơn. Bạn chuẩn bị các nội dung cho từng file như bên dưới và thực hiện theo các bước sau:

docker-compose.yml

version: '3.8'

volumes:
  db_storage:
  n8n_storage:

services:
  postgres:
    image: postgres:16
    restart: always
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD
      - POSTGRES_DB
      - POSTGRES_NON_ROOT_USER
      - POSTGRES_NON_ROOT_PASSWORD
    volumes:
      - db_storage:/var/lib/postgresql/data
      - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
    ports:
      - 5678:5678
    links:
      - postgres
    volumes:
      - n8n_storage:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy

.env

POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n

POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword

init-data.sh

#!/bin/bash
set -e;


if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
	psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
		CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
		GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
		GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER};
	EOSQL
else
	echo "SETUP INFO: No Environment variables given!"
fi

Start dịch vụ

Để start dịch vụ n8s với PostgreSQL, chúng ta truy cập vào folder đang lưu trữ file docker-compose.yaml và sử dụng lệnh docker-compose :
Quan trọng: Trước khi bắt đầu, bạn cần thay đổi thông tin user/password mặc địch trong file .env !

docker-compose up -d

Để stop dịch vụ ta dùng lệnh:

docker-compose stop

Cấu hình

Các thông tin trong .env liên quan tới database mặc định được lưu trữ trong .env, bên nên thay đổi cho phù hợp với môi trường của mình.

Setting timezone

Để xác định múi giờ mà n8n nên sử dụng, bạn có thể đặt  biến môi trường GENERIC_TIMEZONE . Các Node hướng lịch trình, như  Node Schedule Trigger  sử dụng biến này để xác định múi giờ chính xác.

Bạn có thể thiết lập múi giờ hệ thống, điều khiển giá trị  date trả về của một số tập lệnh và lệnh, bằng cách sử dụng  TZ biến môi trường.

Ví dụ này đặt cùng một múi giờ cho cả hai biến:

docker volume create n8n_data

docker run -it --rm \
 --name n8n \
 -p 5678:5678 \
 -e GENERIC_TIMEZONE="Europe/Berlin" \
 -e TZ="Europe/Berlin" \
 -v n8n_data:/home/node/.n8n \
 docker.n8n.io/n8nio/n8n

Hướng dẫn cập nhật

Cập nhật với Docker

Để cập nhật n8n, trong Docker, ta chỉ cần pull images n8n mới nhất về.

Bạn cũng có thể sử dụng dòng lệnh để lấy phiên bản mới nhất hoặc phiên bản cụ thể:

# Pull latest (stable) version
docker pull docker.n8n.io/n8nio/n8n

# Pull specific version
docker pull docker.n8n.io/n8nio/n8n:1.81.0

# Pull next (unstable) version
docker pull docker.n8n.io/n8nio/n8n:next

Sau khi pull image đã cập nhật, hãy stop container n8n của bạn và khởi động lại. Bạn cũng có thể sử dụng dòng lệnh. Thay thế  <container_id> trong các lệnh bên dưới bằng ID container bạn tìm thấy trong lệnh đầu tiên:

# Find your container ID
docker ps -a

# Stop the container with the `<container_id>`
docker stop <container_id>

# Remove the container with the `<container_id>`
docker rm <container_id>

# Start the container
docker run --name=<container_name> [options] -d docker.n8n.io/n8nio/n8n

Cập nhật với Docker Compose

Ta điều chỉnh image trong file docker compose và chạy lệnh sau:

# Pull latest version
docker compose pull

# Stop and remove older version
docker compose down

# Start the container
docker compose up -d

n8n chỉ có thể truy cập được bằng cách sử dụng  https và không sử dụng  http.

Nâng cao khả năng mở rộng và hiệu suất

Khi chạy n8n ở quy mô lớn, với số lượng người dùng, quy trình làm việc hoặc thực thi lớn, bạn cần thay đổi cấu hình n8n để đảm bảo hiệu suất tốt.

n8n có thể chạy ở  nhiều chế độ khác nhau  tùy theo nhu cầu của bạn.  queue Chế độ này cung cấp khả năng mở rộng tốt nhất. Tham khảo  chế độ Hàng đợi  để biết chi tiết về cấu hình.

Bạn có thể cấu hình lưu dữ liệu và cắt tỉa để cải thiện hiệu suất cơ sở dữ liệu. Tham khảo  Dữ liệu thực thi  để biết chi tiết.

Dữ liệu thực hiện

Tùy thuộc vào cài đặt thực thi và khối lượng, cơ sở dữ liệu n8n của bạn có thể tăng kích thước và hết dung lượng lưu trữ.

Để tránh điều này, n8n khuyên bạn không nên lưu dữ liệu không cần thiết và bật tính năng cắt bỏ dữ liệu thực thi cũ.

Để thực hiện việc này, hãy cấu hình  các biến môi trường tương ứng .

Giảm dữ liệu đã lưu

Bạn có thể chọn dữ liệu thực thi nào n8n lưu. Ví dụ, bạn chỉ có thể lưu các thực thi dẫn đến Lỗi.

# Docker Compose
n8n:
    environment:
      - EXECUTIONS_DATA_SAVE_ON_ERROR=all
      - EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
      - EXECUTIONS_DATA_SAVE_ON_PROGRESS=true
      - EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false

Bật tính năng pruning dữ liệu

Bạn có thể bật chức năng cắt tỉa dữ liệu để tự động xóa các lần thực thi đã hoàn tất sau một khoảng thời gian nhất định. Nếu bạn không đặt EXECUTIONS_DATA_MAX_AGE, 336 giờ (14 ngày) là giá trị mặc định.

Bạn có thể chọn cắt tỉa dữ liệu thực thi đã hoàn tất trước thời gian được đặt trong EXECUTIONS_DATA_MAX_AGE, bằng cách sử dụng EXECUTIONS_DATA_PRUNE_MAX_COUNT. Điều này đặt số lượng thực thi tối đa để lưu trữ trong cơ sở dữ liệu. Khi bạn đạt đến giới hạn, n8n bắt đầu xóa các bản ghi thực thi cũ nhất. Điều này có thể giúp giải quyết các vấn đề về hiệu suất cơ sở dữ liệu, đặc biệt là nếu bạn sử dụng SQLite. Kích thước cơ sở dữ liệu vẫn có thể vượt quá giới hạn bạn đặt: các thực thi cũ chưa hoàn tất sẽ không bị xóa, ngay cả khi chúng có thể bị xóa.

# Docker Compose
n8n:
    environment:
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
      - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000

Lưu ý:

Nếu bạn chạy n8n bằng cơ sở dữ liệu SQLite mặc định, dung lượng đĩa của bất kỳ dữ liệu nào đã cắt tỉa sẽ không tự động được giải phóng mà được sử dụng lại cho dữ liệu thực thi trong tương lai. Để giải phóng dung lượng này, hãy cấu hình biến môi trường DB_SQLITE_VACUUM_ON_STARTUP hoặc chạy thủ công thao tác VACUUM .

Kết bài

Trên đây là hướng dẫn chi tiết cách cài đặt N8N – một công cụ mạnh mẽ giúp bạn tự động hóa quy trình làm việc một cách dễ dàng. Dù bạn chọn cài đặt qua Docker, trực tiếp trên server hay sử dụng nền tảng cloud, N8N đều mang lại sự linh hoạt và hiệu suất cao. Sau khi hoàn tất cài đặt, bạn có thể bắt đầu xây dựng các workflow để kết nối ứng dụng, xử lý dữ liệu tự động và tối ưu hóa công việc. Chúc bạn thành công trong hành trình khám phá và ứng dụng N8N! 🚀

Hướng dẫn cài đặt Percona XtraDB Cluster trên Ubuntu – Debian

Add Comment

Click here to post a comment