Hướng Dẫn Self-Hosted n8n Bằng Docker Và ngrok Cho Người Mới Bắt Đầu
Hướng dẫn chi tiết cách tự host n8n bằng Docker Desktop kết hợp ngrok để tạo workflow automation miễn phí, dễ triển khai và có thể truy cập từ internet.
Ở bài viết trước, mình đã giới thiệu tổng quan về n8n – công cụ workflow automation mã nguồn mở đang được cộng đồng tech và các nhà làm tự động hóa cực kỳ ưa chuộng hiện nay. Nếu bạn chưa đọc bài đó, hãy xem lại để hiểu rõ n8n là gì và vì sao nó lại sở hữu sức mạnh tối ưu đến vậy.
Trong bài viết này, chúng ta sẽ đi sâu vào phần thực hành: tự host n8n trên máy tính cá nhân bằng Docker Desktop và sử dụng ngrok để public server ra internet.
Đây là phương pháp tiếp cận hoàn hảo dành cho người mới bắt đầu vì:
- Hoàn toàn miễn phí – Không phát sinh chi phí mua hạ tầng ban đầu.
- Dễ cài đặt – Cấu hình nhanh chóng thông qua Docker Compose.
- Tiết kiệm tài nguyên – Không cần thuê VPS hay mua tên miền riêng.
- Kiểm thử tức thì – Test Webhook ngay lập tức với môi trường bên ngoài.
- Đa nền tảng – Chạy mượt mà trên Windows, macOS và Linux.
Sau khi hoàn thành hướng dẫn này, bạn sẽ có một hệ thống n8n hoạt động hoàn chỉnh, có khả năng truy cập từ bất kỳ đâu thông qua đường link công khai do ngrok cung cấp.
Khi bạn khởi chạy một ứng dụng ở local, địa chỉ của nó có dạng:
http://localhost:5678Địa chỉ localhost này chỉ có thể truy cập nội bộ từ chính máy tính của bạn. Các dịch vụ bên ngoài như Telegram Bot, Discord Webhook, Facebook Lead hay các API bên thứ ba không thể tìm thấy hoặc gửi dữ liệu (Webhook) về máy bạn được.
ngrok chính là giải pháp cho vấn đề này. Nó là một công cụ tạo đường hầm bảo mật (Secure Tunnel), giúp ánh xạ địa chỉ localhost của bạn thành một URL public trên internet. Sau khi kích hoạt, bạn sẽ nhận được một URL có dạng:
https://abc12345.ngrok-free.appKhi đường hầm ngrok được thiết lập:
- Webhook của n8n có thể tiếp nhận dữ liệu thời gian thực từ internet.
- Các Bot (Telegram, Discord, Slack…) có thể kết nối trực tiếp đến n8n nội bộ.
- Bạn có thể xây dựng và kiểm thử các kịch bản automation y hệt như trên một server thật.
Trước khi bắt tay vào cấu hình, hãy đảm bảo máy tính của bạn đáp ứng các điều kiện sau:
| Yêu cầu | Chi tiết |
|---|---|
| Thiết bị | Máy tính chạy Windows, macOS hoặc Linux |
| Mạng | Kết nối Internet ổn định |
| Tài khoản | Tài khoản ngrok miễn phí (đăng ký tại đây) |
| Lưu trữ | Khoảng 2GB dung lượng đĩa trống |
Docker giúp đóng gói và vận hành n8n một cách cô lập, nhanh chóng mà không cần cài đặt thủ công các thành phần môi trường phức tạp (Node.js, database…).
Truy cập trang chủ Docker: https://www.docker.com/products/docker-desktop/ và chọn phiên bản phù hợp với hệ điều hành của bạn.
- Mở file cài đặt vừa tải xuống.
- Tích chọn “Use WSL 2 instead of Hyper-V” để đạt hiệu năng tối ưu.
- Nhấn Install, chờ hoàn tất và khởi động lại máy nếu được yêu cầu.
Mở Terminal (macOS/Linux) hoặc PowerShell (Windows) và chạy:
docker --versionNếu màn hình trả về thông tin phiên bản (ví dụ: Docker version 28.x.x), bạn đã cài đặt thành công.
Tạo một thư mục tên n8n ở vị trí tùy ý:
- Windows:
D:\n8n - macOS/Linux:
~/n8n
Bên trong thư mục đó, tạo hai file trống với tên chính xác:
n8n/├── .env└── docker-compose.yamlMở file .env bằng trình soạn thảo văn bản (Notepad, VS Code…) và dán nội dung sau:
N8N_HOST=localhostN8N_PORT=5678N8N_PROTOCOL=http
GENERIC_TIMEZONE=Asia/Ho_Chi_MinhTZ=Asia/Ho_Chi_Minh
N8N_SECURE_COOKIE=false
WEBHOOK_URL=💡 Giải thích các biến quan trọng:
GENERIC_TIMEZONE&TZ: Thiết lập múi giờAsia/Ho_Chi_Minh, đảm bảo các Node trigger theo lịch (Cronjob) kích hoạt đúng giờ Việt Nam.N8N_SECURE_COOKIE=false: Bắt buộc khi chạy n8n ở local hoặc qua ngrok. Thiếu cấu hình này bạn sẽ gặp lỗi không thể đăng nhập.WEBHOOK_URL: Địa chỉ để nhận dữ liệu Webhook. Tạm để trống, sẽ cập nhật sau ở Bước 9.
Mở file docker-compose.yaml và dán nội dung sau:
services: n8n: image: n8nio/n8n:latest container_name: n8n restart: unless-stopped ports: - '5678:5678' env_file: - .env volumes: - ./n8n_data:/home/node/.n8n💡 Giải thích cấu trúc:
image: n8nio/n8n:latest: Kéo bản phát hành chính thức mới nhất từ Docker Hub.ports (5678:5678): Ánh xạ cổng để truy cập container qua cổng 5678.env_file: Nạp cấu hình từ file.envvào container.volumes (./n8n_data): Persist Data – Gắn dữ liệu nội bộ ra thư mục thật trên máy. Thiếu dòng này, mọi workflow và credentials sẽ bị xóa mỗi khi container khởi động lại.
Mở Terminal/CMD, di chuyển vào thư mục dự án rồi chạy:
cd D:\n8n # Thay bằng đường dẫn thực tế của bạndocker compose up -dDocker sẽ tự động: Tải Image → Tạo Container → Khởi chạy Server ngầm. Lần đầu tiên có thể mất 1–3 phút tùy tốc độ mạng.
Kiểm tra kết quả: Mở trình duyệt và truy cập http://localhost:5678.
Nếu giao diện chào mừng của n8n xuất hiện, bạn đã hoàn thành bước đầu. n8n sẽ yêu cầu tạo tài khoản Admin — hãy điền Email và Password để thiết lập bảo mật cho hệ thống.
- Truy cập: https://dashboard.ngrok.com/signup
- Đăng ký tài khoản miễn phí (hỗ trợ đăng nhập nhanh qua Google hoặc GitHub).
- Sau khi vào Dashboard, tìm mục Your Authtoken để lấy mã token xác thực.
- Tải ngrok tại: https://ngrok.com/download
- Giải nén — bạn sẽ nhận được file
ngrok.exe(Windows) hoặcngrok(macOS/Linux). - Mở Terminal tại thư mục chứa file ngrok và xác thực tài khoản:
ngrok config add-authtoken YOUR_AUTHTOKEN_CỦA_BẠNThay
YOUR_AUTHTOKEN_CỦA_BẠNbằng token thực tế lấy từ Dashboard ngrok.
Chạy lệnh sau để tạo tunnel trỏ vào cổng 5678:
ngrok http 5678Terminal sẽ hiển thị trạng thái kết nối. Tìm dòng Forwarding:
Forwarding https://xxxx-xxxx-xxxx.ngrok-free.app -> http://localhost:5678Sao chép toàn bộ đường link HTTPS công khai này.
⚠️ Không được tắt cửa sổ Terminal đang chạy ngrok – nếu tắt, đường hầm sẽ bị đóng ngay lập tức.
Mở lại file .env và cập nhật biến WEBHOOK_URL bằng link ngrok vừa copy:
WEBHOOK_URL=https://abc12345.ngrok-free.app⚠️ Đảm bảo không có dấu
/ở cuối URL.
Mỗi khi thay đổi file .env, bạn cần restart container để n8n áp dụng cấu hình mới:
docker compose downdocker compose up -d🎯 Kiểm tra thành quả: Mở trình duyệt và truy cập link ngrok của bạn (ví dụ: https://abc12345.ngrok-free.app). Nếu giao diện đăng nhập n8n hiện ra — chúc mừng, hệ thống đã chính thức kết nối internet thành công!
n8n/├── .env├── docker-compose.yaml└── n8n_data/ ← Tự sinh ra, lưu database và workflowURL ngrok thay đổi mỗi lần khởi động lại
Với tài khoản Free, mỗi lần tắt rồi chạy lại ngrok http 5678, ngrok sẽ sinh ra URL ngẫu nhiên mới. Bạn phải cập nhật lại WEBHOOK_URL trong .env và restart Docker:
docker compose down && docker compose up -dKhông tắt Docker Desktop n8n chạy hoàn toàn trên máy local. Nếu máy tính tắt, sleep hoặc Docker dừng chạy, mọi workflow automation sẽ ngừng hoạt động ngay.
Sao lưu dữ liệu thường xuyên
Toàn bộ workflow và credentials nằm trong thư mục n8n_data. Hãy tạo thói quen backup thư mục này để tránh mất dữ liệu khi gặp sự cố.
Khi n8n đã public ra ngoài internet, bạn có thể bắt tay xây dựng ngay:
- Telegram/Discord Bot – Tự động phản hồi tin nhắn hoặc đẩy thông báo từ hệ thống.
- Facebook Lead Automation – Lấy thông tin khách hàng từ quảng cáo đổ về Google Sheets/CRM theo thời gian thực.
- AI Content Pipeline – Thu thập tin tức qua Webhook → Tóm tắt bằng OpenAI/Gemini/Claude → Tự động đăng lên website hoặc mạng xã hội.
- Quản lý công việc – Đồng bộ dữ liệu giữa Notion, Trello, Google Calendar và Email.
Mô hình Docker Local + ngrok rất lý tưởng để học tập, thử nghiệm và tối ưu workflow cá nhân. Tuy nhiên, hãy cân nhắc chuyển sang VPS riêng khi:
- Cần hệ thống vận hành liên tục 24/7 không phụ thuộc vào máy tính cá nhân.
- Xử lý lượng Webhook lớn, liên tục với độ trễ thấp.
- Triển khai cho dự án thương mại hoặc production đòi hỏi bảo mật và uptime cao.
Khi đó, bạn sẽ cần: thuê VPS, mua tên miền và cấu hình Reverse Proxy (Nginx, Caddy) tích hợp SSL chuẩn.
Chỉ với vài bước cấu hình cơ bản cùng bộ ba công cụ miễn phí Docker Desktop, n8n và ngrok, bạn đã tự xây dựng được một trung tâm tự động hóa cực kỳ linh hoạt mà không cần kiến thức DevOps chuyên sâu.
Chúc các bạn thiết lập thành công và hẹn gặp lại ở bài viết tới! 🚀