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 làm 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 trong tài liệu n8n, 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 bền hơn, triển khai n8n ở cấp sản xuất trên Cloud Run. Phiên bản 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,một nền tảng điện toán phi máy chủ đượ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 dữ liệu vào cơ sở dữ liệu Cloud SQL cho PostgreSQL sẽ hoạt động như một phiên bản bền bỉ và lâu dài cho quá trình cài đặt n8n.
  • Cung cấp hình ảnh vùng chứa n8n cho Google Cloud Run.
  • Kiểm thử quá trình 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
  • 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 bộ chọn dự án, hãy chọn hoặc tạo một dự án Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho Dự án trên đám mây. Tìm hiểu cách kiểm tra xem tính năng thanh toán đã được bật trên một dự án hay chưa .
  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 bq. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển 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 hãy kiểm tra để đảm bảo rằng bạn đã 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 dự án của bạn chưa được thiết lập, hãy dùng lệnh sau để thiết lập:
gcloud config set project <YOUR_PROJECT_ID>
  1. Bật các API bắt buộc thông qua lệnh hiển thị 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.
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 hiển thị bên dưới:

Operation "operations/..." finished successfully.

Nếu bỏ lỡ bất kỳ 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 gcloud và cách sử dụng.

Cuối cùng, chúng ta sẽ thiết lập một vài 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 Thiết bị đầu cuối Cloud Shell, 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 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 duy trì để lưu trữ phiên bản n8n và dữ liệu thực thi. Điều này là bắt buộc để quá trình thiết lập của chúng ta có tính bền bỉ.

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 Google Cloud Platform.

Chạy lệnh sau trong Cloud Shell để tạo thực thể:

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 thi lệnh thành công, 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 phiên bản Cloud SQL như TÊN, DATABASE_VERSION, VỊ TRÍ, v.v.

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

4. Thiết lập Cơ sở dữ liệu n8n và thông tin xác thực người dùng cơ sở dữ liệu

Giờ đây, khi đã chuẩn bị sẵn phiên bản Cloud SQL cho PostgreSQL, chúng ta có thể tạo cơ sở dữ liệu n8n trong đó, cùng với việc lưu trữ mật khẩu cơ sở dữ liệu và khoá mã hoá trong Google Cloud Secrets Manager.

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. Tất cả các lệnh bên dưới đều được chạy 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 xác thực sau:

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

Lưu ý: Trong trường hợp bạn muốn sử dụng một mật khẩu khác mạnh hơn (nên dùng cho môi trường 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 ta đã chọn ở đây, tức là n8n, nhưng hãy đảm bảo rằng bạn cũng 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 cung cấp bên dưới:

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, 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à dữ liệu nhạy cảm khác.

Chúng ta bắt đầu bằng lệnh sau, lệnh này lấy mật khẩu mà chúng ta đã sử 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 tập hợp 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

Chúng ta sẽ triển khai n8n trên Google Cloud Run trong bước tiếp theo. Để 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ẽ sử dụng để thực thi quy trình làm việc n8n. Để làm việc này, chúng ta muố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 ta sẽ cần các vai trò sau cho Tài khoản dịch vụ mà chúng ta tạo:

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

Hãy bắt đầu. Bạn phải thực thi tất cả các lệnh bên dưới trong Google Cloud Shell. Lệnh đầu tiên 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 lần lượ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"

Bây giờ, chúng ta đã sẵn sàng 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,N8N_ENDPOINT_HEALTH=health,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 một 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 hiển thị bên dưới:

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 kết quả đầu ra ở trên, vì bạn sẽ sử dụng URL đó trong bước tiếp theo để khởi chạy bảng điều khiển n8n.

7. Chạy quy trình làm việc n8n

Khởi chạy một trình duyệt và 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ụ từ 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 rằng n8n vẫn đang khởi động. Bạn có thể làm mới trang và trang sẽ tải.

Cuối cùng, bạn sẽ thấy một màn hình như 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 thông tin 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, bao gồm cả bước yêu cầu gửi khoá cấp phép.

Nếu mọi việc diễn ra suôn sẻ, bạn sẽ thấy trang chủ của n8n như hình bên dưới:

3e072e9189ff9464.png

Nếu đã quen thuộc với n8n, bạn sẽ có thể thực hiện theo hướng dẫn này và hoàn tất lớp học lập trình.

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

  1. Nhấp vào Thông tin xác thực, sau đó 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ị tuỳ 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ừ https://aistudio.google.com/app/api-keys.
  2. Sau khi có khoá, hãy dán khoá đó. n8n sẽ xác thực khoá và thông tin xác thực hiện đã được thiết lập.

3f31cbfc5072f113.png 5. Bây giờ, hãy chuyển đến tuỳ chọn Quy trình làm việc rồi nhấp vào Bắt đầu từ đầu hoặc tạo một quy trình làm việc mới. Thao tác này sẽ hiển thị một canvas trống, nơi bạn có thể tạo 2 nút sau: một là điều kiện kích hoạt (Trò chuyện đơn giản) và nút còn lại là Tác nhân. Tại đây, chúng ta sẽ thiết lập Thông tin xác thực mà chúng ta đã tạo để mô hình Tác nhân sẽ là Google Gemini. Cuối cùng, bạn sẽ có một quy trình làm việc như sau:

8f394e456ae7d1a.png

  1. Bạn có thể chạy quy trình làm việc 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 phản hồi cho lời nhắc của mình. Màn hình thực thi mẫu được hiển thị bên dưới:

aec85c84f65d0da1.png

Thao tác này hoàn tất quá 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. Điều quan trọng là 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 các biến môi trường sau được thiết lập chính xác, 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 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 sẽ xoá phiên bản Cloud SQL:

gcloud sql instances delete n8n-db

Hai lệnh sau sẽ xoá các khoá Trình quản lý bí mật 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 quá trình thiết lập bằng một quy trình làm việc mẫu.

Tài liệu tham khảo