DevOps / Tự động hóa

Triển khai n8n bằng Docker Compose với AI agent

AI agent có thể hỗ trợ đọc template, soạn cấu hình và kiểm tra triển khai n8n. Trước khi khởi chạy, cần chốt máy đích, kiến trúc, tên miền và cách phục hồi dữ liệu. Bài này tập trung vào single mode trên một máy Linux mới, có HTTPS qua Caddy.

Trong bài này

1. Chọn kiến trúc và kiểm tra máy đích

Single mode dùng một tiến trình n8n, thường bắt đầu với SQLite. Queue mode bổ sung PostgreSQL, Redis và worker cho nhu cầu xử lý khác. Chọn theo tải dự kiến và khả năng vận hành; chuyển chế độ sau này cần kế hoạch dữ liệu, không chỉ thêm một biến môi trường.

Chuẩn bị quyền quản trị máy Linux, Docker Engine và Compose v2, tên miền do bạn kiểm soát, DNS đúng, email TLS và timezone. Kiểm tra cổng 80/443 ở cả firewall máy và nhà cung cấp cloud. Giữ cổng quản trị cần thiết trước khi sửa firewall. Không tự xóa dịch vụ đang dùng các cổng đó.

Cài và đọc n8n-self-hosting. Skill hướng dẫn triển khai hạ tầng; nó không phải một bộ workflow n8n đã hoàn chỉnh. Các tính năng Assistant hoặc sandbox của phiên bản mới có yêu cầu riêng, ngoài cấu hình single cơ bản ở đây.

Chuẩn bị kế hoạch triển khai n8n single mode trên máy Linux đã chỉ định.
Đọc skill và template; kiểm tra OS, Docker, DNS, cổng và dung lượng.
Cho tôi xem cấu hình, phiên bản image và kế hoạch backup trước khi khởi chạy.
Không đổi dịch vụ hiện có, tạo tài nguyên cloud hoặc bật module ngoài phạm vi.
Không đưa secret vào chat, Git hoặc log cấu hình.

2. Đặt đúng tệp và đường dẫn

Trong thư mục skill đã cài, đọc SINGLE_MODE.md, SECURITY.md và DAY2.md. Chuyển các template trong assets/ vào thư mục triển khai đã thống nhất trên máy đích:

  • docker-compose.single.yml → docker-compose.yml
  • Caddyfile → caddy_config/Caddyfile
  • .env.single.example → .env
  • Tạo thư mục local_files/ cho các tệp workflow được phép dùng.

Trong bản Caddyfile vừa sao chép, xóa dòng header_up X-Forwarded-For {http.request.header.X-Forwarded-For} có trong snapshot. Dòng này chuyển tiếp giá trị client gửi; khi Caddy trực tiếp nhận kết nối từ Internet, hãy để reverse_proxy tự thiết lập các header forwarded theo mặc định. Với một proxy Caddy trước n8n, dùng N8N_PROXY_HOPS=1. Nếu có CDN hoặc proxy khác phía trước, cấu hình trusted_proxies theo đúng dải IP tin cậy và số hop thực tế trước khi mở dịch vụ.

DATA_FOLDER trong .env phải trùng đường dẫn tuyệt đối thật. Đặt DOMAIN_NAME, SUBDOMAIN, SSL_EMAIL và GENERIC_TIMEZONE theo môi trường. Đây là hướng dẫn cho máy mới; nếu đã có n8n, kiểm kê volume và backup trước khi thay cấu hình.

3. Kiểm tra secrets và phiên bản trước khi chạy

Tạo encryption key mới trên máy đích theo SECURITY.md, lưu vào .env với quyền phù hợp và sao lưu qua kênh bảo mật. N8N_ENCRYPTION_KEY cần được giữ ổn định để giải mã credentials đã lưu. Không lấy key từ bài mẫu hoặc một hệ thống khác.

Đặt N8N_IMAGE_TAG thành phiên bản cụ thể đã xem release notes; template mặc định stable có thể thay đổi giữa các lần pull. Kiểm tra cả phiên bản Caddy và tên biến cấu hình theo release n8n đã chọn. Chẳng hạn, tài liệu hiện nêu N8N_WEBHOOK_URL từ n8n 2.30.0, trong khi snapshot template dùng WEBHOOK_URL; đối chiếu hướng dẫn của phiên bản trước khi áp dụng.

Template giữ n8n trong mạng Docker riêng; chỉ proxy công khai 80/443. Không thêm mapping 5678 ra Internet để né lỗi proxy. Các volume trong snapshot có tên cố định: nếu máy đã có volume trùng tên, dừng lại và xác định quyền sở hữu trước.

4. Khởi chạy và kiểm tra từng tầng

Chạy từ thư mục triển khai trên máy đích sau khi cấu hình và phạm vi đã được chốt. Dùng config --quiet để kiểm tra cú pháp mà không in cấu hình đã nội suy secrets.

docker compose version
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps
docker compose exec -T n8n wget -qO- http://localhost:5678/healthz
docker compose exec -T n8n wget -qO- http://localhost:5678/healthz/readiness

Kiểm tra tiếp HTTPS từ bên ngoài bằng tên miền thật, đăng nhập và tạo một workflow thử không gọi hệ thống sản xuất. Health check chỉ xác nhận một phần trạng thái; cần kiểm tra owner account, lưu workflow và chạy một thao tác thử. Hoàn tất thiết lập owner trước khi chia sẻ URL.

Nếu nội bộ khỏe nhưng HTTPS lỗi, xem DNS, chứng chỉ, Caddy và firewall. Nếu readiness lỗi, xem kết nối dữ liệu và migration của phiên bản đang chạy. Chỉ đọc log cần thiết và loại dữ liệu riêng trước khi chia sẻ.

5. Bàn giao khả năng phục hồi

Ghi vị trí compose, image đã pin, tên volume, lịch backup và nơi giữ encryption key. Theo tài liệu backup n8n, cần bảo vệ thư mục người dùng .n8n và database ngoài nếu dùng PostgreSQL. Sao chép tùy tiện database SQLite đang ghi không thay thế một quy trình backup nhất quán.

Thử restore vào môi trường tách biệt và kiểm tra credentials vẫn giải mã được. Trước nâng cấp, đọc hướng dẫn migration và tạo backup có thể phục hồi; đổi image cũ không tự đảo ngược migration database. Không dùng thao tác xóa volume như một bước cập nhật thông thường.

Nguồn đối chiếu