Gemini API với n8n trên VPS: tự động hóa không lộ key

Chia sẻ bài viết

Mục lục
Gemini API với n8n trên VPS: tự động hóa không lộ key

Trả lời nhanh: Cách nhanh nhất biến API key thành việc chạy được hằng ngày: cài n8n trên VPS, lưu Gemini API key dưới dạng credential của n8n (mã hóa trong máy, không nằm trong nội dung workflow), rồi kéo thả các node, trigger (lịch hoặc webhook) → lấy dữ liệu → node AI gọi Gemini → ghi kết quả về Sheet, email hoặc Zalo. Key ở lại trên máy chủ, nhân viên dùng kết quả mà không cần biết key.

Viết code gọi API thì ai cũng làm được sau một buổi tối, nhưng thứ khiến AI thật sự sinh ra giá trị lại là phần chán hơn nhiều: chạy đúng giờ mỗi ngày, thử lại khi lỗi, ghi kết quả vào chỗ cả đội cùng xem, và không để lộ key cho bất kỳ ai. n8n giải quyết gọn phần đó bằng giao diện kéo thả, với điều kiện nó phải sống trên một máy luôn bật. Bài này ráp Gemini vào n8n theo đúng cách dùng được trong công ty, không phải bản demo cho vui.

Tóm tắt nhanh
  • Key lưu bằng credential của n8n, được mã hóa, không lộ trong bản xuất workflow chia sẻ
  • Ba mẫu workflow chạy được ngay: tóm tắt email, phân loại yêu cầu, trích xuất dữ liệu ra Sheet
  • Chống 429: bật Retry On Fail, thêm Wait giữa các vòng, gộp nhiều mục vào một lần gọi
  • Bắt model trả JSON có cấu trúc để node sau xử lý được, đừng parse văn xuôi
  • VPS là điều kiện cần: cron chạy khi máy bạn tắt, webhook cần IP công cộng

Vì sao n8n phải nằm trên VPS chứ không phải máy bạn

Ba lý do rất thực tế. Thứ nhất, lịch chạy: workflow tóm tắt báo cáo lúc 6 giờ sáng chỉ có nghĩa nếu máy bật lúc 6 giờ sáng, laptop gập lại là mọi thứ dừng, và n8n không có cách nào bù lại lượt đã lỡ. Thứ hai, webhook: muốn Zalo, form, hay hệ thống khác đẩy dữ liệu vào n8n thì cần một địa chỉ công khai ổn định, tức IP công cộng và tên miền, thứ mạng nhà không có. Thứ ba, chỗ đứng của key: key nằm trên máy cá nhân là key đi theo người, mất máy là mất kiểm soát; nằm trên máy chủ công ty thì đổi người vẫn chạy.

Cài n8n gọn nhất là bằng Docker Compose, cùng khuôn với các dịch vụ khác trên blog, nếu bạn chưa dựng, các bài về Docker và reverse proxy trong cụm self-host đã có sẵn công thức. Điểm cần nhớ riêng cho n8n: đặt biến N8N_ENCRYPTION_KEY cố định và sao lưu nó cùng dữ liệu, vì mất chuỗi này là mất khả năng giải mã toàn bộ credential đã lưu.

Đặt Gemini credential đúng cách trong n8n

Trong n8n vào Credentials → New, chọn loại tương ứng Google Gemini (hoặc Google PaLM/Generative Language tùy phiên bản), dán API key lấy từ AI Studio, đặt tên rõ ràng kiểu gemini-cong-ty-tra-phi. Từ đó về sau mọi node chỉ chọn credential theo tên, không ai phải nhìn thấy chuỗi key nữa, kể cả khi bạn xuất workflow ra JSON gửi cho đồng nghiệp, phần key không đi kèm.

Ba thói quen đáng giá: tách credential theo môi trường (một key thử nghiệm hạn mức free, một key chạy thật đã bật thanh toán) để nghịch ngợm không làm thủng ngân sách; đặt tên theo nơi dùng để khi cần thu hồi thì biết chính xác cái nào; và đừng bao giờ dán key vào node Code hay HTTP Request dưới dạng chữ thô, đó là cách phổ biến nhất khiến key rò rỉ qua ảnh chụp màn hình lúc đi hỏi bài. Nếu buộc phải gọi thô bằng HTTP Request, hãy dùng credential kiểu Header Auth thay vì viết key vào URL.

Ba workflow chạy được ngay chiều nay

1. Tóm tắt hộp thư mỗi sáng. Schedule Trigger 7 giờ → node Gmail/IMAP lấy email chưa đọc trong 24 giờ → node Gemini với system instruction kiểu "tóm tắt mỗi email thành một dòng, gắn nhãn Khẩn/Thường/Bỏ qua" → node gộp thành một bản tin → gửi về email hoặc kênh chat nội bộ. Mẫu này họ hàng gần với bài n8n + Claude API đọc mail, khác mỗi bộ não.

2. Phân loại yêu cầu khách. Webhook nhận nội dung từ form hoặc chatbot → Gemini phân loại vào nhóm (hỏi giá, bảo hành, khiếu nại, khác) kèm mức độ gấp → node Switch rẽ nhánh: khiếu nại thì báo ngay cho quản lý, hỏi giá thì trả lời tự động bằng bản soạn sẵn. Đây là mảnh ghép mà bot Zalo trong bài chatbot Zalo dùng để hiểu ý khách.

3. Trích xuất dữ liệu từ file. Trigger theo dõi thư mục hoặc email có đính kèm → gửi PDF/ảnh cho Gemini kèm yêu cầu trả JSON đúng khuôn (số hóa đơn, ngày, tổng tiền, mã số thuế) → ghi thẳng vào Google Sheet. Việc mà kế toán vẫn gõ tay hằng ngày, và cũng là workflow dễ chứng minh giá trị nhất khi cần thuyết phục sếp.

Bắt model trả JSON và xử lý lỗi cho ra dáng sản phẩm

Node sau trong n8n cần dữ liệu có cấu trúc, nên đừng để model viết văn. Trong system instruction ghi rõ khuôn và cấm phần thừa, ví dụ:

Tra ve DUY NHAT mot JSON dung dang sau, khong giai thich, khong bao quanh bang dau ```:
{"nhom":"hoi_gia|bao_hanh|khieu_nai|khac","gap":true|false,"tom_tat":"toi da 20 tu"}

Kèm theo, dùng tính năng JSON có cấu trúc của Gemini nếu node hỗ trợ, và luôn cắm một node kiểm tra: parse được thì đi tiếp, không parse được thì rẽ nhánh gửi cảnh báo thay vì để cả workflow chết lặng. Về lỗi mạng và quota: bật Retry On Fail ngay trên node AI (3 lần, giãn cách vài giây) để nuốt gọn các cú 429 lẻ tẻ; với vòng lặp nhiều mục, chèn node Wait 1-2 giây mỗi vòng hoặc gộp 10-20 mục vào một prompt. Cuối cùng bật Error Workflow của n8n để mọi workflow hỏng đều nhắn về một chỗ, im lặng là kiểu hỏng nguy hiểm nhất trong tự động hóa.

Chi phí, bảo mật và giới hạn nên biết trước

Chi phí gồm hai phần tách bạch: tiền VPS cố định hằng tháng và tiền token trả cho Google theo lượng dùng. Workflow tóm tắt vài trăm email mỗi ngày bằng model Flash thường chỉ tốn vài chục nghìn đồng một tháng, rẻ hơn nhiều so với hình dung ban đầu của phần lớn người mới. Bảo mật: n8n phải nằm sau reverse proxy có HTTPS, bật xác thực, không phơi cổng quản trị ra internet; nếu chỉ mình bạn dùng thì cho truy cập qua mạng riêng như Tailscale là an toàn nhất. Giới hạn thật: n8n rất mạnh cho luồng công việc nhưng không phải nơi để chạy vòng lặp hàng chục nghìn mục, việc quy mô đó nên viết script riêng hoặc đẩy qua hàng đợi. Và nhớ nguyên tắc dữ liệu từ bài đầu series: dữ liệu nhạy cảm thì key phải ở bậc trả phí, hoặc thay bộ não bằng Ollama chạy nội bộ.

Vì sao quy trình tự động nên nằm trên máy chủ

Tiêu chíChạy trên máy cá nhânChạy trên máy chủ
Chạy theo lịch khi bạn tắt máyKhôngCó
Nhận sự kiện từ dịch vụ bên ngoàiPhải mở cổng, rủi ro caoCó địa chỉ cố định, an toàn hơn
Khóa truy cập nằm ở đâuTrên máy cá nhân, khó kiểm soátTrong kho bí mật của hệ thống
Cả đội cùng dùngKhôngCó
Khi máy hỏngMất toàn bộ quy trìnhCó sao lưu và khôi phục được

Đặt khóa đúng cách, không để lộ

# SAI: viet thang khoa vao trong nut cua quy trinh
#   Khoa se nam trong ban xuat quy trinh, va trong sao luu, va trong kho ma nguon

# DUNG: dat trong phan quan ly thong tin dang nhap cua he thong
#   Quy trinh chi tham chieu ten, khong chua gia tri

# Kiem ban xuat quy trinh KHONG chua khoa truoc khi day len kho ma nguon
grep -rn "AIza\|sk-" ./quy-trinh-da-xuat/ || echo "sach"

# Bien moi truong cua container, khong nam trong file quy trinh
docker compose exec n8n printenv | grep -i "API\|KEY" | cut -c1-30

# Dat han muc chi tieu TRUOC khi cho quy trinh chay theo lich

Điểm hay bị bỏ qua nhất: bản xuất quy trình để sao lưu hoặc chia sẻ sẽ mang theo mọi thứ viết thẳng trong nút. Dùng phần quản lý thông tin đăng nhập của hệ thống thì bản xuất chỉ chứa tên tham chiếu, không chứa giá trị.

Bắt mô hình trả về dữ liệu có cấu trúc

  • Yêu cầu trả về dạng dữ liệu có cấu trúc thay vì văn bản tự do, và khai rõ các trường mong đợi. Đây là khác biệt giữa một quy trình chạy được và một quy trình phải sửa mỗi tuần.
  • Luôn kiểm dữ liệu trả về trước khi dùng. Mô hình có lúc trả thiếu trường, hoặc trả kèm phần giải thích ngoài phần dữ liệu.
  • Có nhánh xử lý khi phân tích dữ liệu thất bại: ghi vào nhật ký và cảnh báo, thay vì để cả quy trình dừng im lặng.
  • Đặt số lần thử lại có giới hạn, và chờ giãn dần giữa các lần.

Giới hạn nên biết trước

  • Dữ liệu gửi qua dịch vụ mô hình là dữ liệu rời khỏi máy của bạn. Với dữ liệu khách hàng, kiểm điều khoản và cân nhắc lọc bớt trước khi gửi.
  • Hạn mức tần suất là thật: quy trình xử lý hàng loạt phải có bước chờ giữa các lượt, nếu không sẽ bị từ chối hàng loạt.
  • Chi phí tăng theo lượng dữ liệu đầu vào, nên đừng đưa cả tệp lớn vào mỗi lượt. Cắt lấy phần cần thiết.

Câu hỏi thường gặp

n8n bản tự host có tốn phí không?

Bản community tự host miễn phí và đủ dùng cho hầu hết nhu cầu, bạn chỉ trả tiền máy chủ. Bản trả phí thêm các tính năng thiên về doanh nghiệp như phân quyền nâng cao, môi trường tách biệt và SSO, cân nhắc khi nhiều người cùng vận hành.

VPS cấu hình bao nhiêu là đủ cho n8n gọi Gemini?

2 vCPU và 4GB RAM chạy thoải mái vì phần nặng nằm ở phía Google, n8n chỉ điều phối. Cần thêm tài nguyên khi bạn xử lý file lớn, chạy nhiều workflow song song, hoặc dựng thêm database và các dịch vụ khác trên cùng máy.

Có thể đổi từ Gemini sang model khác mà không sửa workflow không?

Được nếu bạn gọi qua một cổng trung gian như OpenRouter hoặc Ollama theo chuẩn OpenAI, khi đó đổi model chỉ là đổi credential và tên model. Còn dùng node Gemini chuyên biệt thì phải thay node, nên nhiều người chọn đường trung gian ngay từ đầu để linh hoạt.

Workflow lỡ chạy sai gửi nhầm email cho khách thì sao?

Luôn thêm bước duyệt tay cho những việc gửi ra ngoài: n8n có node chờ phê duyệt, hoặc đơn giản là ghi bản nháp vào Sheet cho người xem rồi mới gửi. Chỉ để AI tự gửi thẳng với những nội dung nội bộ hoặc đã chạy ổn định hàng tháng trời.

Hạ tầng VPS tại Việt Nam của TND
Cloud VPS linh hoạt và VPS NVMe xung cao, IP công cộng riêng, đặt tại Việt Nam
n8n chỉ phát huy khi nó không bao giờ ngủ: cron 6 giờ sáng vẫn chạy, webhook luôn có địa chỉ để gọi vào, key nằm yên trong máy chủ của công ty. Một Cloud VPS TND đặt tại Việt Nam kèm IP công cộng riêng là chỗ đứng gọn nhất cho việc đó, bàn giao trong 5 phút.
Xem Cloud VPS TND, bàn giao trong 5 phútCần I/O mạnh? Xem VPS NVMe

Bài viết liên quan