Triển khai và chạy n8n trên Google Cloud Run

1. Giới thiệu

Trong lớp học lập trình này, bạn sẽ thiết lập n8n trên Google Cloud Run. n8n là một công cụ tự động hoá quy trình công việc mã nguồn mở, cho phép người dùng kết nối các ứng dụng và dịch vụ khác nhau để tự động hoá các tác vụ lặp đi lặp lại.

Lớp học lập trình này dựa trên hướng dẫn về tài liệu n8n, trong đó giải thích cách lưu trữ n8n trên Google Cloud Run. Chúng ta sẽ cài đặt và định cấu hình một phiên bản n8n có khả năng triển khai n8n bền bỉ hơn, ở cấp độ sản xuất trên Cloud Run. Nền tảng này bao gồm các tài nguyên như cơ sở dữ liệu để duy trì và trình quản lý bí mật cho dữ liệu nhạy cảm.

Bạn sẽ thực hiện

  • Triển khai n8n trên Google Cloud Run,đây là một nền tảng điện toán không máy chủ và được quản lý hoàn toàn, chạy các vùng chứa không trạng thái trên cơ sở hạ tầng của Google.

Kiến thức bạn sẽ học được

  • Cung cấp và điền sẵn một cơ sở dữ liệu Cloud SQL cho PostgreSQL sẽ đóng vai trò là phiên bản cố định và bền vững cho bản cài đặt n8n của chúng ta.
  • Cung cấp hình ảnh vùng chứa n8n cho Google Cloud Run.
  • Thử cài đặt n8n trên Google Cloud Run.

Bạn cần có

  • Trình duyệt web Chrome
  • Tài khoản Gmail
  • Một Dự án trên đám mây đã bật tính năng thanh toán

2. Trước khi bắt đầu

Tạo dự án

  1. Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không .
  3. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud và được tải sẵn bằng bq. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud.

Hình ảnh nút Kích hoạt Cloud Shell

  1. Sau khi kết nối với Cloud Shell, bạn có thể kiểm tra để đảm bảo rằng bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn.
gcloud config list project
  1. Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
gcloud config set project <YOUR_PROJECT_ID>
  1. Bật các API bắt buộc thông qua lệnh bên dưới. Quá trình này có thể mất vài phút, vì vậy, vui lòng kiên nhẫn chờ đợi.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

Khi thực thi lệnh thành công, bạn sẽ thấy một thông báo tương tự như thông báo dưới đây:

Operation "operations/..." finished successfully.

Nếu bỏ lỡ API nào, bạn luôn có thể bật API đó trong quá trình triển khai. Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.

Cuối cùng, chúng ta sẽ thiết lập một số biến môi trường mà chúng ta sẽ sử dụng trong các tập lệnh mà chúng ta sẽ chạy trong vài bước tiếp theo. Trong Cloud Shell Terminal, hãy thực thi 2 lệnh sau (Nhớ thay thế GCP_PROJECT_IDGCP_REGION bằng các giá trị tương ứng cho mã dự án và khu vực (ví dụ: us-central1) mà bạn muốn thực hiện việc triển khai này. Chúng ta sẽ sử dụng us-central1 để triển khai.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Tạo một phiên bản Cloud SQL

Chúng ta sẽ sử dụng một phiên bản Google Cloud SQL cho PostgreSQL. Đây sẽ là lớp liên tục để lưu trữ phiên bản n8n và dữ liệu thực thi của chúng ta. Điều này là bắt buộc để đảm bảo chế độ thiết lập của chúng tôi có độ bền cao.

Cloud SQL cho PostgreSQL là một dịch vụ cơ sở dữ liệu được quản lý hoàn toàn, giúp bạn thiết lập, duy trì, quản lý và quản trị cơ sở dữ liệu quan hệ PostgreSQL trên Nền tảng đám mây của Google.

Chạy lệnh sau trong Cloud Shell để tạo phiên bản:

gcloud sql instances create n8n-db \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres

Lệnh này mất khoảng 5 phút để thực thi. Sau khi thực hiện thành công lệnh này, bạn sẽ thấy một kết quả cho biết lệnh đã hoàn tất, cùng với thông tin về phiên bản Cloud SQL của bạn, chẳng hạn như TÊN, DATABASE_VERSION, VỊ TRÍ, v.v.

Xin lưu ý rằng chúng ta đã sử dụng giá trị root-password làm postgres. Nếu bạn thay đổi thành một giá trị khác, vui lòng lưu giữ giá trị đó.

4. Thiết lập Cơ sở dữ liệu n8n và thông tin đăng nhập của người dùng cơ sở dữ liệu

Bây giờ, khi đã chuẩn bị xong phiên bản Cloud SQL cho PostgreSQL, chúng ta có thể tạo cơ sở dữ liệu n8n trong phiên bản đó, cùng với việc lưu trữ mật khẩu cơ sở dữ liệu và khoá mã hoá trong Trình quản lý bí mật của Google Cloud.

Trước tiên, hãy tạo một cơ sở dữ liệu có tên là n8n trong phiên bản Cloud SQL (n8n-db) mà chúng ta đã tạo. Bạn phải chạy tất cả các lệnh bên dưới trong thiết bị đầu cuối Google Cloud Shell.

gcloud sql databases create n8n --instance=n8n-db

Khi tạo thành công, bạn sẽ thấy một thông báo như sau:

Creating Cloud SQL database...done.                                                                                                                                                                                                           
Created database [n8n].
instance: n8n-db
name: n8n
project: YOUR_GCP_PROJECT_ID

Bây giờ, khi cơ sở dữ liệu đã được tạo, hãy tạo một tài khoản người dùng cho cơ sở dữ liệu đó. Chúng ta sẽ sử dụng thông tin đăng nhập sau:

  • mã nhận dạng người dùng : n8n-user
  • mật khẩu : n8n

Lưu ý: Trong trường hợp muốn sử dụng một mật khẩu khác mạnh hơn (nên dùng cho bản phát hành công khai), bạn nên sử dụng mật khẩu đó thay vì mật khẩu mà chúng tôi đã chọn ở đây, tức là n8n. Tuy nhiên, hãy đảm bảo rằng bạn sử dụng mật khẩu đó một cách nhất quán trong vài lệnh tiếp theo.

Lệnh tạo người dùng cơ sở dữ liệu được đưa ra dưới đây:

gcloud sql users create n8n-user \
    --instance=n8n-db \
    --password="n8n"

Tại thời điểm này, bạn nên lưu trữ thông tin xác thực cho mật khẩu cơ sở dữ liệu người dùng và khoá mã hoá vào Google Cloud Secret Manager. Đây là một hệ thống lưu trữ an toàn và tiện lợi cho các khoá API, mật khẩu, chứng chỉ và những dữ liệu nhạy cảm khác.

Chúng ta bắt đầu bằng lệnh sau đây để lấy mật khẩu mà chúng ta đã dùng (n8n) và chuyển mật khẩu đó vào lệnh gcloud secrets create. Khoá bí mật của chúng ta sẽ là n8n-db-password.

printf "n8n" | gcloud secrets create n8n-db-password --replication-policy="automatic" --data-file=-        

Tương tự, chúng ta sẽ sử dụng nhóm lệnh tiếp theo để tạo khoá mã hoá, sau đó tạo một biến bí mật n8n-encryption-key sẽ giữ giá trị.

openssl rand -base64 -out my-encryption-key 42

gcloud secrets create n8n-encryption-key \
    --data-file=my-encryption-key \
    --replication-policy="automatic"        

5. Tạo tài khoản dịch vụ cho Google Cloud Run

Trong bước tiếp theo, chúng ta sẽ triển khai n8n trên Google Cloud Run. Để chuẩn bị cho việc đó, chúng ta sẽ tạo một Tài khoản dịch vụ mà Cloud Run sẽ dùng để thực thi quy trình n8n. Để làm được việc này, chúng ta cần đảm bảo rằng Tài khoản dịch vụ mà chúng ta tạo chỉ có các vai trò/quyền tối thiểu cần thiết trên Google Cloud.

Theo các yêu cầu hiện tại, chúng tôi sẽ cần những vai trò sau cho Tài khoản dịch vụ mà chúng tôi tạo:

  • roles/cloudsql.client : Tài khoản dịch vụ cần có quyền này để truy cập vào cơ sở dữ liệu Cloud SQL của chúng tôi
  • roles/secretAccessor : Chúng tôi cần cung cấp vai trò này để truy cập vào các khoá của Trình quản lý bí mật cho cả n8n-db-passwordn8n-encryption-key.

Bắt đầu nào. Bạn phải thực thi tất cả các lệnh bên dưới trong Google Cloud Shell. Thao tác đầu tiên là tạo Tài khoản dịch vụ, sau đó chúng ta cung cấp các vai trò bắt buộc như đã thảo luận. Chạy từng lệnh theo thứ tự. Nếu bạn được yêu cầu chỉ định một điều kiện cho bất kỳ lệnh nào bên dưới, hãy chọn "None".

gcloud iam service-accounts create n8n-service-account \
    --display-name="n8n Service Account"

export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com

gcloud secrets add-iam-policy-binding n8n-db-password \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud secrets add-iam-policy-binding n8n-encryption-key \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/cloudsql.client"

Giờ đây, chúng ta sẽ triển khai hình ảnh vùng chứa n8n lên Google Cloud Run.

6. Triển khai n8n lên Google Cloud Run

Chạy lệnh sau trong Google Cloud Shell:

gcloud run deploy n8n \
    --image=n8nio/n8n:latest \
    --command="/bin/sh" \
    --args="-c,sleep 5;n8n start" \
    --region=$REGION \
    --allow-unauthenticated \
    --port=5678 \
    --memory=2Gi \
    --no-cpu-throttling \
    --set-env-vars="N8N_PORT=5678,N8N_PROTOCOL=https,DB_TYPE=postgresdb,DB_POSTGRESDB_DATABASE=n8n,DB_POSTGRESDB_USER=n8n-user,DB_POSTGRESDB_HOST=/cloudsql/$PROJECT_ID:$REGION:n8n-db,DB_POSTGRESDB_PORT=5432,DB_POSTGRESDB_SCHEMA=public,GENERIC_TIMEZONE=UTC,QUEUE_HEALTH_CHECK_ACTIVE=true" \
    --set-secrets="DB_POSTGRESDB_PASSWORD=n8n-db-password:latest,N8N_ENCRYPTION_KEY=n8n-encryption-key:latest" \
    --add-cloudsql-instances=$PROJECT_ID:$REGION:n8n-db \
    --service-account=$SA_NAME

Quá trình triển khai có thể mất khoảng 1 phút. Khi triển khai thành công, bạn sẽ thấy một thông báo tương tự như thông báo dưới đây:

Deploying container to Cloud Run service [n8n] in project [YOUR_PROJECT_ID] region [us-central1]
Deploying new service...                                                                                                                                                                                                                      
  Setting IAM Policy...done                                                                                                                                                                                                                   
  Creating Revision...done                                                                                                                                                                                                                    
  Routing traffic...done                                                                                                                                                                                                                      
Done.                                                                                                                                                                                                                                         
Service [n8n] revision [n8n-00001-8nh] has been deployed and is serving 100 percent of traffic.
Service URL: https://n8n-<SOME_ID>.us-central1.run.app

Ghi lại URL dịch vụ trong đầu ra ở trên, vì bạn sẽ sử dụng URL đó trong bước tiếp theo để chạy bảng điều khiển n8n.

7. Chạy quy trình công việc n8n

Khởi chạy một trình duyệt rồi truy cập vào URL dịch vụ mà bạn nhận được ở bước trước đó. Bạn cũng có thể lấy URL dịch vụ trên trang chủ Cloud Run, nơi bạn sẽ thấy n8n được liệt kê là một trong các dịch vụ.

Lưu ý: Nếu bạn gặp lỗi cho biết màn hình Cannot GET / hoặc n8n is starting up, thì điều này thường cho biết n8n vẫn đang khởi động. Bạn có thể làm mới trang và trang sẽ tải sau một lúc.

Cuối cùng, bạn sẽ thấy một màn hình như màn hình bên dưới, nơi bạn có thể thiết lập Tài khoản chủ sở hữu:

5a3b1d60d02b13ec.png

Điền các thông tin chi tiết bắt buộc, ghi lại mật khẩu và hoàn tất quá trình thiết lập. Bạn có thể bỏ qua một số bước, kể cả bước yêu cầu gửi khoá cấp phép.

Nếu mọi thứ diễn ra suôn sẻ, bạn sẽ thấy trang chủ của n8n như minh hoạ dưới đây:

3e072e9189ff9464.png

Nếu đã quen thuộc với n8n, bạn sẽ có thể thực hiện và hoàn thành bài thực hành này.

Nếu muốn dùng thử n8n, bạn có thể thử quy trình sau:

  1. Nhấp vào Thông tin xác thực, rồi nhấp vào Thêm thông tin xác thực đầu tiên.

14a1f3d2098a266c.png

  1. Chúng ta sẽ thiết lập thông tin xác thực Khoá Gemini API. Nhập gemini để hiển thị lựa chọn Google Gemini (PaLM) Api, sau đó nhấp vào Tiếp tục.

7f48bfe35e5d9e98.png

  1. Bạn có thể lấy Khoá Gemini API tại https://aistudio.google.com/app/api-keys.
  2. Sau khi bạn có khoá, hãy dán khoá đó. n8n sẽ xác thực khoá và thông tin đăng nhập hiện đã được thiết lập.

3f31cbfc5072f113.png 5. Bây giờ, hãy chuyển đến mục Workflows (Quy trình công việc) rồi nhấp vào Start from scratch (Bắt đầu từ đầu) hoặc Create a new workflow (Tạo quy trình công việc mới). Thao tác này sẽ mở ra một canvas trống, nơi bạn có thể tạo 2 nút sau đây: một nút là nút kích hoạt (Simple Chat) và nút còn lại là nút Agent. Tại đây, chúng ta sẽ thiết lập Credential mà chúng ta đã tạo để mô hình Agent sẽ là Google Gemini. Cuối cùng, bạn sẽ có một quy trình có dạng như sau:

8f394e456ae7d1a.png

  1. Bạn có thể chạy quy trình này thông qua ngăn trò chuyện và nếu mọi việc diễn ra suôn sẻ, bạn sẽ nhận được câu trả lời cho câu lệnh của mình. Dưới đây là các màn hình thực thi mẫu:

aec85c84f65d0da1.png

Như vậy là chúng ta đã hoàn tất quy trình xác thực việc triển khai n8n trên Google Cloud Run.

8. Dọn dẹp

Nếu bạn chọn sử dụng lớp học lập trình này để tìm hiểu cách cài đặt và chạy n8n trên Google Cloud Run chứ không phải cho yêu cầu sản xuất / vĩnh viễn, thì bạn có thể tránh các khoản phí liên tục cho tài khoản Google Cloud của mình. Điều quan trọng là bạn phải xoá các tài nguyên mà chúng ta đã tạo trong hội thảo này.

Chúng ta sẽ xoá phiên bản Cloud SQL và xoá dịch vụ Cloud Run mà chúng ta đã triển khai.

Đảm bảo rằng bạn đã thiết lập chính xác các biến môi trường sau, theo dự án và khu vực của bạn:

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"

Hai lệnh sau đây sẽ xoá các dịch vụ Cloud Run mà chúng ta đã triển khai:

gcloud run services delete n8n --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

Lệnh sau đây sẽ xoá phiên bản Cloud SQL:

gcloud sql instances delete n8n-db

Hai lệnh sau đây sẽ xoá các khoá Secret Manager mà chúng ta đã tạo:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. Xin chúc mừng

Xin chúc mừng! Bạn đã triển khai thành công n8n trên Google Cloud Run và xác thực chế độ thiết lập bằng một quy trình mẫu.

Tài liệu tham khảo