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

Bạn có thể kiểm thử cục bộ ứng dụng của mình trước khi triển khai App Hosting bằng trình mô phỏng App Hosting. Trình mô phỏng này là một phần của Bộ công cụ mô phỏng trên thiết 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 rõ quy trình làm việc tổng thể của Local Emulator Suite Firebase, đồng thời cài đặt và định cấu hình Local Emulator Suite cũng như xem lại 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 lại hướng dẫn về App Hosting và các tài liệu khác để giúp bạn tìm 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 trên máy. Điều này có thể giúp đơn giản hoá quy trình phát triể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 trên máy, với các biến môi trường và thông tin bảo 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à thông tin bảo mật để sử 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, 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 chạy Local Emulator Suite như mô tả trong phần Cài đặt, định cấu hình và tích hợp Bộ trình mô phỏng cục bộ. 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 monorepos với App Hosting.
  • Liệu bạn có muốn ghi đè bất kỳ giá trị nào cho quá trình phát triển cục bộ hay không.
  • Liệu bạn có muốn cấp cho các thành viên trong nhóm quyền truy cập vào thông tin bảo 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 Lưu trữ ứng dụng bằng cách cập nhật trực tiếp firebase.json. Giản đồ cho trình mô phỏng Lưu trữ ứng dụng là:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommand được tạo và đặt tự động khi trình mô phỏng được khởi tạo. Nếu bạn không 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 dùng để hỗ trợ việc 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ý tính nă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 dùng trong bản phát hành chính thức, 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, 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 ưu tiên.

Tệp apphosting.emulator.yaml được thiết kế để bạn có thể an toàn khi cam kết và chia sẻ với đồng nghiệp. Để giúp đảm bảo bạn không vô tình gửi dữ liệu nhạy cảm vào kho lưu trữ nguồn, mọi biến môi trường là bí mật trong apphosting.yaml cũng phải là bí mật trong apphosting.emulator.yaml. Nếu một khoá bí mật không cần thay đổi giữa môi trường phát hành công khai và 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 khoá 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, thử nghiệm và phát triển cục bộ), thì bạn có thể vượt quá cấp miễn phí của Trình quản lý khoá bí mật trên đám mây và phải trả 0, 06 USD cho mỗi khoá 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 giá trị văn bản thuần tuý cho các biến môi trường là giá trị bí mật trong apphosting.yaml.

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

Thông tin 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ể sử dụng lệnh apphosting:secrets:grantaccess để cấp quyền truy cập vào một bí mật cho một người dùng hoặc một nhóm qua email.

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

Khi thích hợp, hãy cân nhắc sử dụng các khoá chỉ dành cho kiểm thử trong apphosting.emulator.yaml không có quyền truy cập vào dữ liệu phát hành công khai, không thể có tác dụng phụ toàn cục (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 Google Groups để quản lý quyền truy cập vào thông tin bảo mật thay vì cấp quyền truy cập cho từng người dùng. Việc này sẽ đơn giản hoá việc giới thiệu thành viên mới cho nhóm nhà phát triể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 thích hợp để các nhà phát triển giao tiếp 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 bí mật khi họ bị xoá khỏi nhóm email. Tuy nhiên, 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 hiệu ứng phụ trong thực tế, thì bạn vẫn nên xoay khoá và gán giá trị mới cho khoá đó 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ả trình mô phỏng được xác định trong tệp firebase.json, bao gồm cả trình mô phỏng App Hosting.