Workflow Automation
n8n
Nền tảng tự động hoá workflow tự host, kết nối hàng trăm dịch vụ thay cho Zapier và Make.
Ghi chú review
Sử dụng PostgreSQL cho production thay vì SQLite. Nên đặt queue mode với Redis nếu có nhiều workflow chạy đồng thời.
Hướng dẫn deploy
Chạy bằng Docker Compose với PostgreSQL. Có thể thêm Redis cho queue mode.
- Tạo thư mục dữ liệu và file docker-compose.
- Cấu hình PostgreSQL làm database chính.
- Chạy container n8n với volume cho workflows và credentials.
- Tạo tài khoản admin và bắt đầu tạo workflows.
- Đặt webhook URL đúng nếu sử dụng webhook triggers.
Backup:Backup database PostgreSQL và thư mục .n8n chứa credentials đã mã hoá.
Copy để chạy trên server
Dùng từng block riêng: lưu compose trước, hoặc copy script bash để tạo file và chạy container.
docker-compose.ymlyaml
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: CHANGEME_db_password # CHANGE THIS
N8N_HOST: "n8n.example.com"
WEBHOOK_URL: "https://n8n.example.com/"
volumes:
- ./data:/home/node/.n8n
ports:
- "5678:5678"
depends_on:
- postgres
restart: unless-stopped
postgres:
image: postgres:16-alpine
container_name: n8n_postgres
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: CHANGEME_db_password # CHANGE THIS
POSTGRES_DB: n8n
volumes:
- ./postgres:/var/lib/postgresql/data
restart: unless-stoppedsetup.shbash
#!/usr/bin/env bash
set -euo pipefail
sudo mkdir -p /opt/n8n
sudo chown "$USER":"$USER" /opt/n8n
cd /opt/n8n
cat > docker-compose.yml <<'COMPOSE'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: CHANGEME_db_password # CHANGE THIS
N8N_HOST: "n8n.example.com"
WEBHOOK_URL: "https://n8n.example.com/"
volumes:
- ./data:/home/node/.n8n
ports:
- "5678:5678"
depends_on:
- postgres
restart: unless-stopped
postgres:
image: postgres:16-alpine
container_name: n8n_postgres
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: CHANGEME_db_password # CHANGE THIS
POSTGRES_DB: n8n
volumes:
- ./postgres:/var/lib/postgresql/data
restart: unless-stopped
COMPOSE
docker compose up -d
echo "n8n is running on http://SERVER_IP:5678"Stack
TypeScriptNode.jsPostgreSQL