Định cấu hình và quản lý phần phụ trợ Lưu trữ ứng dụng

App Hosting được thiết kế để dễ sử dụng và bảo trì thấp, với các chế độ cài đặt mặc định được tối ưu hoá cho hầu hết các trường hợp sử dụng. Đồng thời, App Hosting cung cấp các công cụ để bạn quản lý và định cấu hình phần phụ trợ theo các nhu cầu cụ thể của mình. Hướng dẫn này mô tả các công cụ và quy trình đó.

Định cấu hình phần phụ trợ

Đối với cấu hình nâng cao như biến môi trường hoặc chế độ cài đặt thời gian chạy (chẳng hạn như chế độ đồng thời, CPU và giới hạn bộ nhớ), bạn cần tạo và chỉnh sửa tệp apphosting.yaml trong thư mục gốc của ứng dụng. Tệp này cũng hỗ trợ các tệp tham chiếu đến các bí mật được quản lý bằng Trình quản lý bí mật trên đám mây, giúp bạn an toàn khi kiểm tra vào hệ thống quản lý nguồn.

Để tạo apphosting.yaml, hãy chạy lệnh sau:

firebase init apphosting

Thao tác này sẽ tạo một tệp apphosting.yaml khởi đầu cơ bản với cấu hình mẫu (đã nhận xét). Sau khi chỉnh sửa, một tệp apphosting.yaml thông thường có thể có dạng như sau, với các chế độ cài đặt cho dịch vụ Cloud Run của phần phụ trợ, một số biến môi trường và một số tệp tham chiếu đến khoá bí mật do Cloud Secret Manager quản lý:

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

Phần còn lại của hướng dẫn này cung cấp thêm thông tin và bối cảnh cho các chế độ cài đặt mẫu này.

Định cấu hình chế độ cài đặt dịch vụ Cloud Run

Với chế độ cài đặt apphosting.yaml, bạn có thể định cấu hình cách cấp phép dịch vụ Cloud Run. Các chế độ cài đặt có sẵn cho dịch vụ Cloud Run được cung cấp trong đối tượng runConfig:

  • cpu – Số CPU được sử dụng cho mỗi phiên bản phân phát (mặc định là 0).
  • memoryMiB – Dung lượng bộ nhớ được phân bổ cho mỗi thực thể phân phát tính bằng MiB (mặc định là 512)
  • maxInstances – Số lượng vùng chứa tối đa có thể chạy cùng một lúc (mặc định là 100 và được quản lý theo hạn mức)
  • minInstances – Số lượng vùng chứa luôn hoạt động (mặc định là 0).
  • concurrency – Số lượng yêu cầu tối đa mà mỗi thực thể phân phát có thể nhận được (mặc định là 80).

Lưu ý mối quan hệ quan trọng giữa cpumemoryMiB; bạn có thể đặt bộ nhớ thành bất kỳ giá trị số nguyên nào từ 128 đến 32768, nhưng việc tăng giới hạn bộ nhớ có thể yêu cầu tăng giới hạn CPU:

  • Trên 4GiB cần có ít nhất 2 CPU
  • Trên 8GiB cần có ít nhất 4 CPU
  • Trên 16 GiB cần có ít nhất 6 CPU
  • Dung lượng trên 24 GiB yêu cầu ít nhất 8 CPU

Tương tự, giá trị của cpu ảnh hưởng đến chế độ cài đặt đồng thời. Nếu thiết lập giá trị nhỏ hơn 1 CPU, thì bạn phải thiết lập mô hình đồng thời thành 1 và CPU sẽ chỉ được phân bổ trong quá trình xử lý yêu cầu.

Định cấu hình môi trường xây dựng

Đôi khi, bạn cần thêm cấu hình cho quá trình xây dựng, chẳng hạn như khoá API của bên thứ ba hoặc chế độ cài đặt có thể điều chỉnh. App Hosting cung cấp cấu hình môi trường trong apphosting.yaml để lưu trữ và truy xuất loại dữ liệu này cho dự án của bạn.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

Đối với các ứng dụng Next.js, các tệp dotenv chứa biến môi trường cũng sẽ hoạt động với App Hosting. Bạn nên sử dụng apphosting.yaml để kiểm soát chi tiết biến môi trường bằng bất kỳ khung nào.

Trong apphosting.yaml, bạn có thể chỉ định những quy trình có quyền truy cập vào biến môi trường bằng cách sử dụng thuộc tính availability. Bạn có thể hạn chế một biến môi trường chỉ dành cho môi trường xây dựng hoặc chỉ dành cho môi trường thời gian chạy. Theo mặc định, cả hai đều có thể sử dụng.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Đối với các ứng dụng Next.js, bạn cũng có thể sử dụng tiền tố NEXT_PUBLIC_ theo cách tương tự như trong tệp dotenv để truy cập biến trong trình duyệt.

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Khoá biến hợp lệ bao gồm các ký tự A-Z hoặc dấu gạch dưới. Một số khoá biến môi trường được dành riêng để sử dụng nội bộ. Đừng sử dụng bất kỳ khoá nào trong số này trong tệp cấu hình:

  • Bất kỳ biến nào bắt đầu bằng X_FIREBASE_
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

Lưu trữ và truy cập các thông số bí mật

Thông tin nhạy cảm như khoá API phải được lưu trữ dưới dạng bí mật. Bạn có thể tham chiếu các thông tin bí mật trong apphosting.yaml để tránh kiểm tra thông tin nhạy cảm vào hệ thống kiểm soát nguồn.

Các tham số thuộc loại secret đại diện cho các tham số chuỗi có giá trị được lưu trữ trong Trình quản lý bí mật trên đám mây. Thay vì trực tiếp lấy giá trị, các tham số bí mật sẽ kiểm tra xem có tồn tại trong Trình quản lý bí mật trên đám mây hay không và tải các giá trị trong quá trình triển khai.

  -   variable: API_KEY
      secret: myApiKeySecret

Khoá bí mật trong Trình quản lý khoá bí mật trên đám mây có thể có nhiều phiên bản. Theo mặc định, giá trị của một tham số bí mật có sẵn cho phần phụ trợ trực tiếp của bạn được ghim vào phiên bản mới nhất hiện có của bí mật tại thời điểm tạo phần phụ trợ. Nếu có yêu cầu về việc tạo phiên bản và quản lý vòng đời của các thông số, bạn có thể ghim vào các phiên bản cụ thể bằng Trình quản lý bí mật trên đám mây. Ví dụ: để ghim vào phiên bản 5:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

Bạn có thể tạo khoá bí mật bằng lệnh CLI firebase apphosting:secrets:set và sẽ được nhắc thêm các quyền cần thiết. Quy trình này cho phép bạn tự động thêm tệp tham chiếu bí mật vào apphosting.yaml.

Để sử dụng toàn bộ chức năng của Cloud Secret Manager, bạn có thể sử dụng bảng điều khiển Cloud Secret Manager. Nếu làm như vậy, bạn cần cấp quyền cho phần phụ trợ App Hosting bằng lệnh CLI firebase apphosting:secrets:grantaccess.

Đồng bộ hoá trạng thái Firebase Auth

Các ứng dụng sử dụng Firebase Auth nên cân nhắc sử dụng SDK Firebase Web để giúp đồng bộ hoá trạng thái xác thực giữa ứng dụng và máy chủ. Bạn có thể hỗ trợ việc này bằng cách triển khai FirebaseServerApp với một worker dịch vụ. Quy trình cơ bản của tác vụ là:

  1. Triển khai trình chạy dịch vụ để thêm các tiêu đề phù hợp cho ứng dụng của bạn trên các yêu cầu gửi đến máy chủ.
  2. Lấy tiêu đề từ yêu cầu trên máy chủ và chuyển đổi tiêu đề đó thành người dùng xác thực bằng FirebaseServerApp.

Quản lý phần phụ trợ

Các lệnh để quản lý cơ bản phần phụ trợ App Hosting được cung cấp trong Firebase CLI. Một số thao tác cũng có trong bảng điều khiển Firebase. Phần này sẽ mô tả một số tác vụ quản lý phổ biến hơn, bao gồm cả việc tạo và xoá phần phụ trợ.

Tạo phần phụ trợ

Phần phụ trợ App Hosting là tập hợp các tài nguyên được quản lý mà App Hosting tạo ra để xây dựng và chạy ứng dụng Web. Bạn có thể tạo và liệt kê các phần phụ trợ App Hosting bằng bảng điều khiển Firebase hoặc CLI Firebase.

Bảng điều khiển Firebase: Trên trình đơn Tạo, hãy chọn Lưu trữ ứng dụng rồi chọn Bắt đầu.

CLI: (Phiên bản 13.15.4 trở lên) Để tạo phần phụ trợ, hãy chạy lệnh sau từ thư mục gốc của dự án cục bộ, cung cấp projectIDregion ưu tiên làm đối số:

firebase apphosting:backends:create --project PROJECT_ID --location us-central1

Đối với cả bảng điều khiển hoặc CLI, hãy làm theo lời nhắc để gán tên cho phần phụ trợ, thiết lập kết nối GitHub và định cấu hình các chế độ cài đặt triển khai cơ bản sau:

  • Đặt thư mục gốc của ứng dụng (mặc định là /)

    Đây thường là nơi chứa tệp package.json của bạn.

  • Thiết lập nhánh trực tiếp

    Đây là nhánh của kho lưu trữ GitHub được triển khai cho URL đang hoạt động. Thường thì đây là nhánh mà các nhánh tính năng hoặc nhánh phát triển được hợp nhất.

  • Chấp nhận hoặc từ chối tính năng tự động triển khai

    Tính năng tự động triển khai được bật theo mặc định. Khi hoàn tất quá trình tạo phần phụ trợ, bạn có thể chọn triển khai ứng dụng của mình ngay lập tức trên App Hosting.

Xoá phần phụ trợ

Để xoá hoàn toàn một phần phụ trợ, trước tiên, hãy sử dụng CLI Firebase, sau đó xoá các tài sản có liên quan theo cách thủ công, đặc biệt chú ý không xoá bất kỳ tài nguyên nào có thể được các phần phụ trợ khác hoặc các khía cạnh khác của dự án Firebase sử dụng.

  1. Chạy lệnh sau để xoá phần phụ trợ App Hosting. Thao tác này sẽ tắt tất cả miền cho phần phụ trợ và xoá dịch vụ Cloud Run liên kết:

    firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
    
  2. (Không bắt buộc) Trong thẻ Google Cloud Console cho Artifact Registry, hãy xoá hình ảnh cho phần phụ trợ của bạn trong "firebaseapphosting-images".

  3. Trong Cloud Secret Manager, hãy xoá mọi khoá bí mật có "apphosting" trong tên khoá bí mật, đặc biệt chú ý đảm bảo các khoá bí mật này không được phần phụ trợ khác hoặc các khía cạnh khác của dự án Firebase sử dụng.