Chia sẻ bởi Little Excel
Bạn đang tìm kiếm một giải pháp tự động hóa quy trình làm việc mạnh mẽ, linh hoạt và quan trọng nhất là có thể kiểm soát hoàn toàn dữ liệu của mình? n8n chính là câu trả lời, và việc self-hosted n8n sẽ mở ra những khả năng tuyệt vời mà không tốn thêm chi phí. Trong bài viết này, chúng ta sẽ cùng nhau khám phá từ A-Z cách để bạn có thể tự cài đặt và vận hành n8n trên chính máy tính của mình, đồng thời giải quyết bài toán khó nhằn về Webhook với sự trợ giúp của Tailscale và Cloudflare.
Giới thiệu n8n và lợi ích vượt trội khi self-hosted
Trước khi đi vào chi tiết kỹ thuật, hãy cùng tìm hiểu n8n là gì và tại sao việc self-hosted n8n lại là một lựa chọn đáng cân nhắc.
n8n là gì?
n8n (phát âm là "nodemation") là một công cụ tự động hóa quy trình làm việc (workflow automation) mã nguồn mở. Với giao diện kéo thả trực quan, n8n cho phép bạn kết nối hàng trăm ứng dụng và dịch vụ khác nhau để tạo ra các luồng công việc tự động một cách dễ dàng. Ngay cả khi bạn không phải là một lập trình viên chuyên nghiệp, bạn vẫn có thể xây dựng những giải pháp tự động hóa mạnh mẽ cho riêng mình.
Trên thị trường, có những công cụ tương tự như Make.com (trước đây là Integromat) hay Zapier. Tuy nhiên, n8n nổi bật với khả năng tùy biến cao và đặc biệt là lựa chọn self-hosted.
Tại sao bạn nên cân nhắc self-hosted n8n?
Các dịch vụ cloud như Make.com hay bản cloud của n8n thường có những giới hạn nhất định:
- Make.com: Gói miễn phí thường giới hạn khoảng 1000 lượt thực thi (operations) mỗi tháng.
- n8n Cloud: Cung cấp khoảng 15 ngày dùng thử và 1000 lượt thực thi. Sau đó, bạn sẽ cần nâng cấp lên các gói trả phí.
Khi self-hosted n8n, bạn sẽ nhận được những lợi ích đáng kể:
- Hoàn toàn miễn phí: Bạn không phải trả bất kỳ chi phí bản quyền nào cho việc sử dụng phần mềm.
- Không giới hạn trải nghiệm và thực thi: Không còn nỗi lo về giới hạn số ngày dùng thử hay số lượng tác vụ có thể chạy.
- Kiểm soát dữ liệu tuyệt đối: Vì n8n chạy trên máy chủ của bạn (có thể là máy tính cá nhân, server riêng), toàn bộ dữ liệu quy trình làm việc và thông tin nhạy cảm sẽ được lưu trữ cục bộ (local). Điều này đảm bảo tính riêng tư và bảo mật, bạn không phải lo lắng về việc dữ liệu bị các bên thứ ba thu thập hay sử dụng.
- Linh hoạt với mã nguồn mở: Bạn có thể tải mã nguồn về, tùy chỉnh và cài đặt theo nhu cầu cụ thể.
Những nhược điểm cần lưu ý khi self-hosted n8n
Mặc dù có nhiều ưu điểm, việc self-hosted n8n cũng đi kèm một vài hạn chế:
- Yêu cầu máy tính chạy 24/7: Đối với các tác vụ cần chạy lặp đi lặp lại hoặc theo lịch trình, máy tính host n8n của bạn phải luôn được bật và kết nối mạng.
- Thiếu một số tính năng so với bản Cloud: Bản n8n self-hosted có thể không bao gồm một số tính năng nâng cao chỉ có trên bản Cloud, ví dụ như các công cụ AI hỗ trợ hoặc một số node (module kết nối) đặc thù.
- Có thể có tính năng độc quyền: Ngược lại, bản self-hosted cho phép bạn thực thi code trực tiếp trên máy tính của mình, một tính năng mạnh mẽ cho các tác vụ tùy chỉnh sâu.
Lựa chọn self-hosted hay sử dụng dịch vụ Cloud phụ thuộc vào nhu cầu và điều kiện cụ thể của bạn. Nếu bạn ưu tiên chi phí, sự riêng tư và không ngại bỏ chút công sức thiết lập, self-hosted n8n là một giải pháp tuyệt vời.
Hướng dẫn chi tiết cách cài đặt n8n trên máy tính của bạn
Bây giờ, chúng ta sẽ đi vào phần thực hành: cài đặt n8n trên máy tính của bạn thông qua npm (Node Package Manager).
Chuẩn bị cần thiết
n8n được viết bằng TypeScript và chạy trên nền tảng Node.js. Do đó, bạn cần cài đặt Node.js phiên bản 18 trở lên.
- Tải Node.js: Truy cập trang chủ Node.js (nodejs.org) và tải về phiên bản LTS (Long Term Support) phù hợp với hệ điều hành của bạn (Windows, macOS, Linux).
- Cài đặt Node.js: Chạy file cài đặt và làm theo các bước hướng dẫn.
- Kiểm tra cài đặt: Mở Terminal (hoặc Command Prompt/PowerShell trên Windows) và gõ lệnh:
Nếu Node.js và npm đã được cài đặt thành công, bạn sẽ thấy phiên bản của chúng hiển thị.node -v npm -v
Các bước cài đặt n8n qua npm
- Mở Terminal: Khởi động ứng dụng Terminal trên máy tính của bạn.
- Cài đặt n8n global: Sử dụng lệnh sau để cài đặt n8n trên toàn hệ thống (global):
Cờnpm install n8n -g
-g
có nghĩa là "global", cho phép bạn chạy n8n từ bất kỳ thư mục nào trong Terminal. Quá trình cài đặt có thể mất vài phút. Bạn có thể hình dung đây là quá trình tải về toàn bộ mã nguồn của n8n từ GitHub và thiết lập nó trên máy của bạn.
Khởi chạy và thiết lập tài khoản n8n ban đầu
-
Khởi chạy n8n: Sau khi cài đặt hoàn tất, gõ lệnh sau trong Terminal để khởi động n8n:
n8n
Hoặc bạn cũng có thể dùng lệnh:
n8n start
Khi n8n khởi động thành công, bạn sẽ thấy thông báo tương tự như:
Editor is now available on http://localhost:5678
. -
Truy cập n8n: Mở trình duyệt web và truy cập địa chỉ:
http://localhost:5678
. -
Thiết lập tài khoản Owner:
- Lần đầu tiên truy cập, n8n sẽ yêu cầu bạn thiết lập một tài khoản chủ sở hữu (Owner account).
- Điền địa chỉ email của bạn.
- Tạo mật khẩu. Lưu ý: Mật khẩu cần có ít nhất 8 ký tự, bao gồm cả chữ hoa, chữ thường, số và ký tự đặc biệt để đảm bảo an toàn.
- Bạn có thể chọn hoặc bỏ chọn việc nhận các bản cập nhật và thông báo từ n8n.
- Nhấn "Start".
- n8n có thể yêu cầu bạn kích hoạt một "license key" miễn phí để nhận thêm các tính năng. Bạn có thể chọn "Send me free license", sau đó kiểm tra email và làm theo hướng dẫn để kích hoạt (nếu có).
Vậy là bạn đã cài đặt thành công n8n trên máy tính của mình! Giao diện quản lý quy trình làm việc của n8n giờ đây đã sẵn sàng để bạn khám phá.
Hiểu rõ vấn đề Webhook khi self-hosted n8n và tại sao không nên mở Port
Khi bạn bắt đầu xây dựng các quy trình tự động hóa, đặc biệt là những quy trình cần nhận dữ liệu từ các dịch vụ bên ngoài (ví dụ: nhận tin nhắn mới từ Telegram, thông báo từ Google Sheets), bạn sẽ gặp một khái niệm quan trọng: Webhook.
Webhook là gì và vai trò của nó trong n8n?
Webhook là một cơ chế cho phép các ứng dụng gửi thông báo (dữ liệu) đến một URL cụ thể ngay khi có một sự kiện xảy ra. Trong n8n, khi bạn tạo một trigger (bộ kích hoạt) dựa trên sự kiện từ dịch vụ bên ngoài (ví dụ: "On Message" từ Telegram bot), n8n sẽ cung cấp một URL Webhook. Dịch vụ đó (Telegram) sẽ gửi dữ liệu đến URL này mỗi khi có tin nhắn mới.
Vấn đề của Webhook mặc định (localhost)
Khi bạn self-hosted n8n, URL Webhook mặc định mà n8n tạo ra sẽ có dạng như http://localhost:5678/webhook/...
.
localhost
là gì?localhost
là một tên miền trỏ về chính máy tính của bạn. Nó chỉ có thể được truy cập từ bên trong mạng nội bộ của bạn.- Vấn đề: Các dịch vụ trên Internet (như Telegram, Google, Facebook) không thể "nhìn thấy" hoặc gửi dữ liệu đến
localhost
trên máy tính cá nhân của bạn.- Hãy hình dung máy tính của bạn là một ngôi nhà trong một khu phố (mạng nội bộ).
localhost
là địa chỉ bên trong ngôi nhà đó. - Internet là thế giới bên ngoài. Khi Telegram cố gắng gửi dữ liệu đến
http://localhost:5678/...
, nó giống như một người đưa thư từ thành phố khác cố gắng tìm một địa chỉ chỉ có ý nghĩa trong phạm vi ngôi nhà của bạn. Mặc định, các kết nối từ bên ngoài vào mạng nội bộ của bạn sẽ bị chặn vì lý do bảo mật.
- Hãy hình dung máy tính của bạn là một ngôi nhà trong một khu phố (mạng nội bộ).
Tại sao không nên "mở port" (NAT Port Forwarding)?
Một giải pháp thường được đề cập để giải quyết vấn đề này là "mở port" trên router của bạn (còn gọi là NAT Port Forwarding). Việc này về cơ bản là tạo một quy tắc cho phép lưu lượng truy cập từ Internet đến một port cụ thể trên địa chỉ IP công cộng của bạn được chuyển hướng đến localhost:5678
trên máy tính của bạn.
Tuy nhiên, đây là một giải pháp không được khuyến khích vì rủi ro bảo mật cao:
- Mở cửa cho kẻ gian: Việc mở port giống như bạn mở toang một cánh cửa của ngôi nhà mình cho cả thế giới. Bất kỳ ai trên Internet cũng có thể cố gắng truy cập vào port đó.
- Nguy cơ bị tấn công: Tin tặc và các bot độc hại liên tục quét (scan) các địa chỉ IP và port mở để tìm lỗ hổng. Nếu port bạn mở có dịch vụ nào đó chưa được vá lỗi bảo mật, máy tính của bạn có thể bị xâm nhập, dữ liệu bị đánh cắp hoặc máy tính trở thành một phần của mạng botnet.
- Ngay cả khi bạn chọn một port "ít ai nghĩ tới", các công cụ quét port tự động vẫn có thể tìm ra.
Giải pháp an toàn hơn: Relay Server / Tunneling
Thay vì mở port trực tiếp, chúng ta sẽ sử dụng một giải pháp an toàn và hiện đại hơn: thiết lập một "đường hầm" (tunnel) hoặc sử dụng một "máy chủ trung chuyển" (relay server).
- Logic hoạt động:
- Bạn thiết lập một kết nối an toàn từ máy tính của bạn (nơi n8n đang chạy) ra một máy chủ trung gian trên Internet.
- Máy chủ trung gian này sẽ có một địa chỉ công khai mà các dịch vụ như Telegram có thể truy cập.
- Khi Telegram gửi dữ liệu đến địa chỉ công khai đó, máy chủ trung gian sẽ chuyển tiếp (relay) dữ liệu này một cách an toàn qua đường hầm về máy tính của bạn, đến n8n.
- Ưu điểm:
- Bạn không cần mở bất kỳ port nào trên router của mình.
- Địa chỉ IP thực của máy tính bạn vẫn được ẩn.
- Kết nối thường được mã hóa, tăng cường bảo mật.
Trong phần tiếp theo, chúng ta sẽ tìm hiểu cách triển khai giải pháp này bằng Tailscale Funnel và Cloudflare Tunnel.
Giải pháp 1: Sử dụng Tailscale Funnel để public Webhook n8n
Tailscale là một dịch vụ VPN (Virtual Private Network) giúp tạo ra các mạng riêng ảo an toàn giữa các thiết bị của bạn, bất kể chúng ở đâu. Tailscale Funnel là một tính năng cho phép bạn public một dịch vụ đang chạy trên một máy trong mạng Tailscale của bạn ra Internet một cách an toàn.
Cài đặt và cấu hình Tailscale
-
Đăng ký và cài đặt Tailscale:
- Truy cập tailscale.com và đăng ký một tài khoản (bạn có thể sử dụng tài khoản Google, Microsoft, GitHub).
- Tải và cài đặt ứng dụng Tailscale cho hệ điều hành của bạn (Windows, macOS, Linux).
- Đăng nhập vào ứng dụng Tailscale trên máy tính của bạn. Máy tính này sẽ được thêm vào "tailnet" (mạng Tailscale) của bạn.
-
Kích hoạt HTTPS và Funnel (nếu cần):
- Truy cập vào Admin Console của Tailscale (thường là
https://login.tailscale.com/admin/machines
). - Vào mục DNS. Đảm bảo MagicDNS đã được bật. Điều này sẽ cho phép bạn truy cập các máy trong tailnet bằng tên máy dạng
your-machine-name.your-tailnet-name.ts.net
. - Vào mục Settings -> Funnel (beta). Đảm bảo "Allow Funnel for your tailnet" hoặc các tùy chọn tương tự được bật. Bạn cũng có thể cần bật HTTPS.
- Trên macOS, bạn có thể cần vào Settings của ứng dụng Tailscale, tìm phần Tailscale Funnel (beta) và chọn "Show me how" để install một helper tool nếu được yêu cầu.
- Truy cập vào Admin Console của Tailscale (thường là
Public port của n8n bằng Tailscale Funnel
Sau khi Tailscale đã được cài đặt và cấu hình cơ bản, bạn có thể sử dụng lệnh trong Terminal để "funnel" port 5678
(port mặc định của n8n) ra Internet.
-
Chạy lệnh Funnel: Mở Terminal và chạy lệnh sau (ví dụ này giả sử bạn muốn public port 5678 qua HTTPS, Tailscale sẽ tự động quản lý chứng chỉ SSL):
tailscale serve https / http://localhost:5678
Hoặc:
tailscale funnel 443 on
Nếu lệnh trên báo lỗi "funnel is not enabled on your tailnet", nó sẽ thường cung cấp một lệnh khác để bạn copy và paste vào Terminal để enable. Sau khi enable, bạn chạy lệnh:
tailscale funnel --bg localhost:5678
Hoặc lệnh:
tailscale funnel target https=443 localhost:5678
Sau khi chạy lệnh thành công, Tailscale sẽ cung cấp cho bạn một URL công khai, thường có dạng
https://your-machine-name.your-tailnet-name.ts.net
. Đây chính là địa chỉ mà các dịch vụ bên ngoài có thể truy cập để gửi dữ liệu đến n8n của bạn. -
Kiểm tra truy cập: Sao chép URL mà Tailscale cung cấp và mở nó trên trình duyệt. Bạn sẽ thấy giao diện n8n của mình.
Cấu hình n8n để sử dụng URL Webhook mới từ Tailscale
Mặc dù n8n của bạn đã có thể truy cập từ Internet qua URL của Tailscale, các Webhook mà n8n tạo ra vẫn mặc định sử dụng localhost
. Bạn cần chỉ cho n8n biết URL công khai mới này.
-
Tắt n8n: Nếu n8n đang chạy trong Terminal, nhấn
Ctrl+C
để dừng nó. -
Thiết lập biến môi trường
WEBHOOK_URL
:
Trong Terminal, chạy lệnh sau, thay thế<your-tailscale-funnel-url>
bằng URL bạn nhận được từ Tailscale:export WEBHOOK_URL=https://your-machine-name.your-tailnet-name.ts.net
Lưu ý: Lệnh
export
này chỉ có tác dụng cho phiên Terminal hiện tại. Để thiết lập vĩnh viễn, bạn cần thêm dòng này vào file cấu hình shell của mình (ví dụ:~/.bashrc
,~/.zshrc
) hoặc tìm hiểu cách cấu hình biến môi trường cố định cho hệ điều hành của bạn, hoặc cấu hình qua file config của n8n. -
Khởi động lại n8n:
n8n
-
Kiểm tra Webhook URL: Bây giờ, khi bạn tạo một trigger mới trong n8n (ví dụ, với Telegram), URL Webhook sẽ tự động sử dụng địa chỉ công khai từ Tailscale.
Lưu ý quan trọng về Tailscale Funnel
- Giới hạn băng thông: Tailscale Funnel (đặc biệt là ở gói miễn phí hoặc bản beta) có thể có giới hạn về băng thông (bandwidth). Giới hạn này thường không được công bố rõ ràng và có thể được reset hàng ngày.
- Khả năng bị sập: Nếu lượng request đến n8n của bạn quá lớn, vượt quá giới hạn băng thông, kết nối qua Funnel có thể bị tạm ngưng (sập). Bạn sẽ phải chờ đến khi giới hạn được reset (thường là ngày hôm sau).
- Phù hợp cho: Tailscale Funnel rất tiện lợi cho việc thử nghiệm, phát triển, hoặc các ứng dụng có lượng request không quá lớn.
Nếu bạn cần một giải pháp ổn định hơn cho lượng truy cập cao, hãy xem xét Cloudflare Tunnel.
Giải pháp 2: Sử dụng Cloudflare Tunnel - Lựa chọn tối ưu hơn
Cloudflare Tunnel (trước đây là Argo Tunnel) là một dịch vụ của Cloudflare cho phép bạn kết nối an toàn các tài nguyên trên mạng riêng của mình với mạng toàn cầu của Cloudflare mà không cần mở port hay có địa chỉ IP tĩnh. Đây thường được coi là giải pháp mạnh mẽ và ổn định hơn cho việc public các dịch vụ self-hosted.
Yêu cầu cần thiết
- Tài khoản Cloudflare: Đăng ký miễn phí tại cloudflare.com.
- Tên miền riêng (Domain): Bạn cần sở hữu một tên miền (ví dụ:
yourdomain.com
). Bạn có thể mua tên miền từ các nhà cung cấp như Namecheap, Porkbun, GoDaddy, hoặc các nhà cung cấp Việt Nam như Mắt Bão, INET. Chi phí cho một tên miền thường từ khoảng 200.000 - 500.000 VNĐ/năm.
Các bước thiết lập Cloudflare Tunnel với n8n
-
Thêm tên miền vào Cloudflare:
- Đăng nhập vào tài khoản Cloudflare của bạn.
- Nhấn "Add a Site" và nhập tên miền của bạn.
- Cloudflare sẽ quét các bản ghi DNS hiện có của bạn. Chọn gói miễn phí (Free plan).
- Cloudflare sẽ cung cấp cho bạn một cặp Nameserver (máy chủ tên miền). Bạn cần cập nhật Nameserver này tại trang quản lý tên miền của nhà cung cấp mà bạn đã mua domain. Quá trình cập nhật Nameserver có thể mất từ vài phút đến vài giờ để hoàn tất trên toàn cầu.
-
Truy cập Cloudflare Zero Trust Dashboard:
- Từ trang tổng quan Cloudflare, tìm và chọn "Zero Trust" ở thanh menu bên trái.
- Lần đầu thiết lập, bạn có thể cần chọn một tên nhóm (team name) cho Zero Trust.
-
Tạo và cấu hình Tunnel:
- Trong Zero Trust Dashboard, điều hướng đến Access -> Tunnels.
- Nhấn Create a tunnel.
- Chọn Cloudflared làm connector. Đặt tên cho tunnel của bạn (ví dụ:
n8n-tunnel
) và nhấn Save tunnel. - Cloudflare sẽ hướng dẫn bạn cài đặt
cloudflared
(daemon của Cloudflare Tunnel) trên máy tính đang host n8n:- Chọn hệ điều hành của bạn (Windows, macOS, Linux).
- Sao chép và chạy lệnh cài đặt
cloudflared
trong Terminal trên máy host n8n. - Sau khi cài đặt, sao chép và chạy lệnh connector (thường là một dòng lệnh dài có chứa token của tunnel) để kết nối
cloudflared
với tunnel bạn vừa tạo trên Cloudflare.
- Sau khi connector hiển thị trạng thái "Healthy", nhấn Next.
-
Thiết lập Public Hostname:
- Đây là bước bạn sẽ định cấu hình cách truy cập n8n qua tên miền của mình.
- Subdomain: Nhập một tiền tố, ví dụ
n8n
(để tạo URL dạngn8n.yourdomain.com
). - Domain: Chọn tên miền bạn đã thêm vào Cloudflare.
- Path: Để trống.
- Service Type: Chọn
HTTP
. - URL: Nhập
localhost:5678
(địa chỉ mà n8n đang chạy trên máy của bạn). - Bạn có thể thêm các cài đặt bổ sung trong "Additional application settings" nếu cần.
- Nhấn Save tunnel (hoặc Save hostname).
-
Cấu hình
WEBHOOK_URL
cho n8n:- Tương tự như với Tailscale, bạn cần thông báo cho n8n về URL công khai mới này.
- Tắt n8n (nếu đang chạy).
- Trong Terminal, chạy lệnh (thay
n8n.yourdomain.com
bằng URL thực tế của bạn):export WEBHOOK_URL=https://n8n.yourdomain.com
- Khởi động lại n8n:
n8n
.
Bây giờ, n8n của bạn đã được public an toàn ra Internet thông qua Cloudflare Tunnel, sử dụng tên miền riêng của bạn, và các Webhook sẽ tự động sử dụng URL này.
Ưu điểm của Cloudflare Tunnel
- Ổn định và hiệu suất cao: Mạng lưới của Cloudflare rất lớn và được tối ưu hóa, giúp tunnel hoạt động ổn định và nhanh chóng. Bản miễn phí thường đã đủ mạnh mẽ cho nhiều nhu cầu.
- Bảo mật tăng cường: Cloudflare cung cấp nhiều lớp bảo vệ như chống DDoS, WAF (Web Application Firewall) cơ bản ngay cả ở gói miễn phí.
- Không giới hạn băng thông rõ ràng (ở gói miễn phí): Mặc dù Cloudflare có thể có các chính sách sử dụng hợp lý, nhưng họ không công khai giới hạn băng thông cứng nhắc cho Tunnel miễn phí như một số dịch vụ khác.
- Phân tích (Analytics): Cloudflare cung cấp các thống kê về lưu lượng truy cập qua tunnel của bạn (số request, băng thông đã sử dụng).
Cloudflare Tunnel là một lựa chọn tuyệt vời nếu bạn cần một giải pháp bền vững, an toàn và hiệu suất cao để self-hosted n8n và public ra Internet.
Tự Do tự động hóa với n8n self-hosted
Việc self-hosted n8n mang lại sự tự do, linh hoạt và kiểm soát dữ liệu tuyệt vời cho nhu cầu tự động hóa của bạn. Từ việc cài đặt n8n ban đầu đến việc giải quyết vấn đề Webhook bằng các công cụ mạnh mẽ như Tailscale Funnel và Cloudflare Tunnel, bạn hoàn toàn có thể xây dựng một hệ thống tự động hóa mạnh mẽ mà không tốn kém chi phí bản quyền.
- Tailscale Funnel là một giải pháp nhanh chóng, dễ thiết lập, rất phù hợp cho việc thử nghiệm, phát triển hoặc các ứng dụng có lượng truy cập không quá lớn.
- Cloudflare Tunnel tuy đòi hỏi bạn phải có tên miền riêng và quá trình thiết lập có thể phức tạp hơn một chút, nhưng lại mang đến sự ổn định, hiệu suất cao và các tính năng bảo mật mạnh mẽ hơn, lý tưởng cho các ứng dụng quan trọng hoặc có lượng truy cập lớn.
Hy vọng rằng bài viết chi tiết này đã cung cấp cho bạn đầy đủ thông tin và hướng dẫn cần thiết để bắt đầu hành trình self-hosted n8n của riêng mình. Hãy khám phá sức mạnh của tự động hóa và giải phóng thời gian của bạn cho những công việc quan trọng hơn!