Kiểm thử cục bộ quá trình triển khai ứng dụng

Bạn có thể thực hiện các kiểm thử cục bộ cho ứng dụng của mình trước khi triển khai App Hosting bằng trình mô phỏng App Hosting (một phần của Bộ công cụ mô phỏng cục bộ của Firebase).

Trước khi sử dụng trình mô phỏng App Hosting, hãy đảm bảo rằng bạn hiểu quy trình làm việc tổng thể của Firebase Local Emulator Suite, đồng thời cài đặt và định cấu hình Local Emulator Suite cũng như xem xét các lệnh CLI của trình mô phỏng này.

Chủ đề này giả định rằng bạn đã quen thuộc với App Hosting. Nếu cần, hãy xem App Hostinggiới thiệu và các tài liệu khác để giúp bạn hiểu cách hoạt động của App Hosting.

Tôi có thể làm gì với trình mô phỏng App Hosting?

Trình mô phỏng App Hosting cho phép bạn kiểm thử và tinh chỉnh các ứng dụng web của mình trên thiết bị. Điều này có thể đơn giản hoá quy trình phát triển của bạn và nâng cao chất lượng của các ứng dụng web được tạo bằng Firebase và triển khai trên App Hosting.

Trình mô phỏng App Hosting:

  1. Cho phép bạn chạy ứng dụng web cục bộ, với các biến môi trường và bí mật được xác định trong tệp cấu hình apphosting.yaml.
  2. Có thể ghi đè các biến môi trường và khoá bí mật để dùng trong trình mô phỏng bằng tệp apphosting.emulator.yaml.
  3. Có thể dùng cùng với các trình mô phỏng Firebase khác. Nếu bạn đang sử dụng Firestore, Auth hoặc bất kỳ trình mô phỏng nào khác, thì Local Emulator Suite sẽ đảm bảo rằng các trình mô phỏng này được khởi động trước trình mô phỏng App Hosting.

Định cấu hình trình mô phỏng

Để bắt đầu, hãy cài đặt và khởi động Local Emulator Suite như mô tả trong phần Cài đặt, định cấu hình và tích hợp Local Emulator Suite. Ngoài mọi trình mô phỏng Firebase khác mà bạn muốn thiết lập, hãy nhớ chọn App Hosting Emulator. CLI sẽ nhắc bạn nhập một số giá trị trình mô phỏng App Hosting, bao gồm:

  • Thư mục gốc của ứng dụng so với dự án; điều này rất quan trọng nếu bạn đang sử dụng monorepo với App Hosting.
  • Bạn có muốn ghi đè mọi giá trị để phát triển cục bộ hay không.
  • Bạn có muốn cấp cho đồng đội quyền truy cập vào các khoá bí mật để phát triển cục bộ hay không.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (./)

? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)

? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
 ◯ API_KEY

? What new value would you like for plaintext MEMCACHE_ADDR?

? What would you like to name the secret reference for API_KEY? (test-api-key)

? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]

? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:

✔  Successfully set IAM bindings on secret test-api-key.

Mọi giá trị bạn cung cấp trong quy trình thiết lập này đều được dùng để cập nhật cấu hình trình mô phỏng App Hosting trong firebase.json. Bạn cũng có thể định cấu hình trình mô phỏng Dịch vụ lưu trữ ứng dụng bằng cách cập nhật trực tiếp firebase.json. Sơ đồ cho trình mô phỏng Lưu trữ ứng dụng là:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommand được tự động tạo và đặt khi trình mô phỏng được khởi tạo. Nếu không được cung cấp, trình mô phỏng sẽ phát hiện và chạy lệnh dev của trình quản lý gói.
  • rootDirectory được dùng để hỗ trợ chế độ thiết lập dự án monorepo. Nếu ứng dụng web của bạn nằm trong một thư mục con, bạn cần cung cấp đường dẫn của thư mục đó so với thư mục gốc (vị trí của firebase.json).

Quản lý hoạt động mô phỏng

Quá trình khởi chạy trình mô phỏng sẽ tạo một tệp apphosting.emulator.yaml trong thư mục gốc của ứng dụng. Tệp cấu hình này có cùng giản đồ với tệp apphosting.yaml được dùng trong quá trình sản xuất, nhưng chỉ dành riêng cho hoạt động phát triển cục bộ. Theo mặc định, trình mô phỏng sẽ đọc cấu hình từ tệp apphosting.yaml của bạn, nhưng nếu có tệp apphosting.emulator.yaml, thì các cấu hình trong tệp đó sẽ được ưu tiên và có quyền ưu tiên.

Tệp apphosting.emulator.yaml được thiết kế để bạn có thể cam kết và chia sẻ một cách an toàn với đồng nghiệp. Để đảm bảo bạn không vô tình cam kết dữ liệu nhạy cảm cho kho lưu trữ nguồn, mọi biến môi trường là một bí mật trong apphosting.yaml cũng phải là một bí mật trong apphosting.emulator.yaml. Nếu một khoá bí mật không cần thay đổi giữa bản phát hành công khai và quá trình phát triển cục bộ (ví dụ: khoá API Gemini), thì bạn không cần thêm khoá đó vào apphosting.emulator.yaml; thay vào đó, hãy cấp cho nhóm của bạn quyền truy cập vào khoá bí mật.

Nếu ứng dụng của bạn sử dụng nhiều bí mật (ví dụ: khoá API cho 3 dịch vụ khác nhau, với các giá trị khác nhau cho từng dịch vụ phát hành công khai, dàn dựng và phát triển cục bộ), bạn có thể vượt quá bậc miễn phí của Cloud Secret Manager và trả 0, 06 USD cho mỗi bí mật bổ sung mỗi tháng. Nếu muốn quản lý cấu hình cục bộ bên ngoài chế độ kiểm soát nguồn để tránh khoản phí này, bạn có thể sử dụng tệp apphosting.local.yaml cũ. Không giống như apphosting.emulator.yaml, tệp này được phép cung cấp các giá trị văn bản thuần tuý cho các biến môi trường là các giá trị bí mật trong apphosting.yaml.

Cấp quyền truy cập vào các bí mật cho người dùng hoặc nhóm

Các khoá bí mật được lưu trữ trong apphosting.emulator.yaml sẽ được đọc khi trình mô phỏng khởi động. Điều này có nghĩa là nhóm phát triển của bạn cần có quyền truy cập vào khoá bí mật. Bạn có thể dùng lệnh apphosting:secrets:grantaccess để cấp quyền truy cập vào một bí mật cho người dùng hoặc nhóm bằng email.

firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com

Nếu có thể, hãy cân nhắc sử dụng các khoá chỉ dùng cho mục đích kiểm thử trong apphosting.emulator.yaml. Các khoá này không có quyền truy cập vào dữ liệu sản xuất, không thể có tác dụng phụ trên toàn cầu (gửi email, tính phí thẻ tín dụng) và/hoặc có hạn mức thấp hơn. Điều này giúp đảm bảo rằng mã chưa được xem xét sẽ ít gây ra hậu quả thực tế hơn.

Hãy cân nhắc sử dụng Nhóm Google để quản lý quyền truy cập vào các khoá bí mật thay vì cấp quyền truy cập cho từng người dùng. Việc này sẽ giúp đơn giản hoá quy trình tham gia của các thành viên mới vào nhóm nhà phát triển của bạn vì việc thêm họ vào nhóm sẽ cấp cho họ quyền truy cập vào tất cả các khoá bí mật mà họ cần. Có thể bạn đã có một nhóm phù hợp để các nhà phát triển trao đổi với nhau. Việc kiểm soát quyền truy cập bằng Google Groups cũng giúp đảm bảo rằng những nhà phát triển rời khỏi nhóm của bạn sẽ mất quyền truy cập vào tất cả các khoá bí mật khi họ bị xoá khỏi nhóm email. Nếu khoá bí mật có quyền truy cập vào dữ liệu sản xuất hoặc các tác dụng phụ trong thế giới thực, thì bạn vẫn có thể xoay khoá và cung cấp cho khoá đó một giá trị mới bằng firebase apphosting:secrets:set.

Chạy trình mô phỏng

firebase emulators:start

Thao tác này sẽ khởi động tất cả các trình mô phỏng được xác định trong tệp firebase.json của bạn, bao gồm cả trình mô phỏng App Hosting.