Học n8n Automation tiếng Việt — Miễn phí & Open Source

Cài đặt n8n bằng Docker trên bất kỳ VPS nào

Docker là cách tốt nhất để cài n8n

Dù bạn dùng VPS từ nhà cung cấp nào — AZDIGI, Hostinger, DigitalOcean, Vultr, Linode hay thậm chí máy local — Docker đều hoạt động giống nhau. Bài viết này hướng dẫn cách cài n8n bằng Docker trên bất kỳ server Linux nào.

So sánh hosting cho n8n
14 nhà cung cấp từ 89k/tháng

Yêu cầu hệ thống

  • OS: Ubuntu 20.04/22.04, Debian 11/12, CentOS 8/9, hoặc bất kỳ Linux distro hỗ trợ Docker
  • RAM: Tối thiểu 1GB, khuyến nghị 2GB+
  • Disk: 10GB trống
  • Network: Port 80, 443 mở

Bước 1: Cài Docker

Ubuntu/Debian

# Cách nhanh nhất - script chính thức từ Docker
curl -fsSL https://get.docker.com | sh

# Thêm user hiện tại vào group docker (không cần sudo)
usermod -aG docker $USER

# Verify
docker --version
docker compose version

CentOS/RHEL

dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker

Bước 2: Tạo thư mục project

mkdir -p /opt/n8n
cd /opt/n8n

Bước 3: File docker-compose.yml

Cấu hình cơ bản (cho testing/dev)

cat > docker-compose.yml <<'EOF'
version: "3.8"
services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
      - TZ=Asia/Ho_Chi_Minh
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  n8n_data:
EOF

Cấu hình production (với PostgreSQL + Caddy SSL)

cat > docker-compose.yml <<'EOF'
version: "3.8"

services:
  postgres:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD:-changeme}
      - N8N_HOST=${N8N_DOMAIN}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://${N8N_DOMAIN}/
      - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
      - TZ=Asia/Ho_Chi_Minh
      - N8N_LOG_LEVEL=info
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy

  caddy:
    image: caddy:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  postgres_data:
  n8n_data:
  caddy_data:
  caddy_config:
EOF

Bước 4: File .env

cat > .env <<'EOF'
N8N_DOMAIN=n8n.yourdomain.com
DB_PASSWORD=your_secure_password_here
EOF

Bước 5: Caddyfile (nếu dùng Caddy)

cat > Caddyfile <<'EOF'
{$N8N_DOMAIN:n8n.localhost} {
    reverse_proxy n8n:5678 {
        flush_interval -1
    }
}
EOF

Thay domain thực tế vào Caddyfile hoặc dùng biến từ .env.

Bước 6: Khởi động

docker compose up -d

# Theo dõi startup
docker compose logs -f

# Kiểm tra health
docker compose ps

Các lệnh Docker thường dùng

# Dừng n8n
docker compose down

# Restart
docker compose restart n8n

# Cập nhật lên phiên bản mới
docker compose pull && docker compose up -d

# Xem log
docker compose logs -f --tail=100 n8n

# Vào shell container
docker compose exec n8n sh

# Export tất cả workflow
docker compose exec n8n n8n export:workflow --all --output=/tmp/workflows.json

Bước 7: Tự động khởi động khi reboot

Docker với restart: always đã tự khởi động. Nhưng đảm bảo Docker service cũng auto-start:

systemctl enable docker

Troubleshooting

Lỗi permission

# Fix ownership cho volume
docker compose exec n8n chown -R node:node /home/node/.n8n

Lỗi out of memory

Thêm swap:

fallocate -l 2G /swapfile && chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

Webhook không hoạt động

Kiểm tra biến WEBHOOK_URL phải đúng domain public và có / ở cuối.

Kết luận

Docker mang lại trải nghiệm cài đặt thống nhất cho n8n trên mọi VPS. Với file docker-compose.yml ở trên, bạn có thể deploy n8n production-ready trong vài phút. Hãy nhớ dùng PostgreSQL cho production và backup thường xuyên!

Dùng thử n8n Cloud
Miễn phí 14 ngày

Tham khảo: n8n Documentation · GitHub n8n

n8n có miễn phí không?

Có, n8n Community Edition hoàn toàn miễn phí khi tự host. n8n Cloud có gói miễn phí giới hạn và gói trả phí từ €20/tháng.

Cần VPS cấu hình bao nhiêu để chạy n8n?

Tối thiểu 1 vCPU, 1GB RAM, 20GB SSD. Khuyến nghị 2 vCPU, 4GB RAM cho production.

Không muốn tự cài? Từ 199K

Giao VPS cho chúng tôi — nhận n8n hoàn chỉnh trong ngày. Docker, SSL, backup, hỗ trợ sau setup.

Xem dịch vụ setup →