Cài đặt, định cấu hình và tích hợp Bộ công cụ mô phỏng cục bộ

Bạn có thể cài đặt và định cấu hình Bộ công cụ mô phỏng cục bộ của Firebase cho nhiều môi trường nguyên mẫu và môi trường thử nghiệm, từ các phiên tạo mẫu một lần cho đến quy trình tích hợp liên tục trên quy mô sản xuất.

Cài đặt Bộ mô phỏng cục bộ

Trước khi cài đặt Bộ mô phỏng, bạn cần có:

  • Node.js phiên bản 16.0 trở lên.
  • JDK Java phiên bản 11 trở lên.

Cách cài đặt Bộ mô phỏng:

  1. Cài đặt Firebase CLI. Nếu bạn chưa cài đặt Firebase CLI, hãy cài đặt ngay. Bạn cần có CLI phiên bản 8.14.0 trở lên để sử dụng Bộ mô phỏng. Bạn có thể kiểm tra phiên bản mình đã cài đặt bằng lệnh sau:
    firebase --version
  2. Nếu bạn chưa thực hiện việc này, hãy khởi chạy thư mục đang hoạt động hiện tại dưới dạng dự án Firebase, bằng cách làm theo lời nhắc trên màn hình để chỉ định sản phẩm cần sử dụng:
    firebase init
  3. Thiết lập Bộ mô phỏng. Lệnh này sẽ khởi động một trình hướng dẫn cấu hình cho phép bạn chọn trình mô phỏng bạn quan tâm, tải các tệp nhị phân tương ứng của trình mô phỏng xuống và đặt cổng trình mô phỏng nếu chế độ mặc định không phù hợp.
    firebase init emulators

Sau khi cài đặt trình mô phỏng, hệ thống sẽ không kiểm tra bản cập nhật và sẽ không có thêm hoạt động tải xuống tự động nào diễn ra cho đến khi bạn cập nhật phiên bản Firebase CLI của mình.

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

Bạn có thể tuỳ ý định cấu hình cổng mạng của trình mô phỏng và đường dẫn đến định nghĩa Quy tắc bảo mật trong tệp firebase.json:

  • Thay đổi cổng trình mô phỏng bằng cách chạy firebase init emulators hoặc chỉnh sửa firebase.json theo cách thủ công.
  • Thay đổi đường dẫn đến định nghĩa về Quy tắc bảo mật bằng cách chỉnh sửa firebase.json theo cách thủ công.

Nếu bạn không định cấu hình các chế độ cài đặt này, trình mô phỏng sẽ theo dõi các cổng mặc định, đồng thời các trình mô phỏng Cloud Firestore, Cơ sở dữ liệu theo thời gian thực và Cloud Storage cho Firebase sẽ chạy với cơ chế bảo mật dữ liệu mở.

Lệnh Mô tả
trình mô phỏng init Khởi động trình hướng dẫn khởi động trình mô phỏng. Xác định trình mô phỏng cần cài đặt và tuỳ ý chỉ định chế độ cài đặt cổng trình mô phỏng. init emulators không phá huỷ; việc chấp nhận mặc định sẽ giữ nguyên cấu hình trình mô phỏng hiện tại.

Cấu hình cổng

Mỗi trình mô phỏng liên kết với một cổng khác trên máy của bạn bằng một giá trị mặc định ưu tiên.

Trình mô phỏng Cổng mặc định
Xác thực 9099
Giao diện người dùng của Bộ mô phỏng 4000
Cloud Functions 5001
Eventarc 9299
Cơ sở dữ liệu theo thời gian thực 9500
Cloud Firestore 8080
Cloud Storage cho Firebase 9199
Lưu trữ Firebase 5000
Pub/Sub 8085

Cấu hình mã dự án

Tuỳ thuộc vào cách gọi các trình mô phỏng, bạn có thể chạy nhiều phiên bản của một trình mô phỏng bằng cách sử dụng nhiều mã dự án Firebase hoặc nhiều phiên bản trình mô phỏng cho một mã dự án nhất định. Trong những trường hợp như vậy, các thực thể của trình mô phỏng sẽ chạy trong một môi trường riêng biệt.

Nhìn chung, bạn nên đặt một mã dự án cho tất cả các lệnh gọi trình mô phỏng. Nhờ đó, giao diện người dùng của Bộ mô phỏng, các trình mô phỏng sản phẩm khác nhau và tất cả các phiên bản đang chạy của một trình mô phỏng cụ thể có thể giao tiếp chính xác trong mọi trường hợp.

Bộ mô phỏng cục bộ đưa ra cảnh báo khi phát hiện nhiều mã dự án trong môi trường. Tuy nhiên, bạn có thể ghi đè hành vi này bằng cách đặt khoá singleProjectMode thành false trong firebase.json.

Bạn có thể kiểm tra(các) bản khai báo mã dự án để tìm thông tin không khớp trong:

  • Dự án mặc định trong dòng lệnh. Theo mặc định, mã dự án sẽ được lấy khi khởi động từ dự án đã chọn bằng firebase init hoặc firebase use. Để xem danh sách dự án (và xem dự án nào được chọn), hãy sử dụng firebase projects:list.
  • Kiểm thử đơn vị quy tắc. Mã dự án thường được chỉ định trong các lệnh gọi đến phương thức thư viện Kiểm thử đơn vị quy tắc initializeTestEnvironment hoặc initializeTestApp.
  • Cờ --project của dòng lệnh. Việc chuyển cờ --project CLI của Firebase sẽ ghi đè dự án mặc định. Bạn cần đảm bảo giá trị của cờ khớp với mã dự án trong các quy trình kiểm thử đơn vị và khởi chạy ứng dụng.

Ngoài ra, hãy kiểm tra cấu hình mã dự án dành riêng cho từng nền tảng mà bạn đã đặt trong khi định cấu hình cho các nền tảng Apple, dự án Androidweb.

Cấu hình Quy tắc bảo mật

Trình mô phỏng sẽ lấy cấu hình Quy tắc bảo mật từ khoá cấu hình database, firestorestorage trong firebase.json.

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules"
  },
  "storage": {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

Chỉ định các tuỳ chọn Java

Trình mô phỏng Cơ sở dữ liệu theo thời gian thực, trình mô phỏng Cloud Firestore và một phần của trình mô phỏng Cloud Storage cho Firebase dựa trên Java. Bạn có thể tuỳ chỉnh phiên bản này bằng cờ JVM thông qua biến môi trường JAVA_TOOL_OPTIONS.

Ví dụ: nếu gặp lỗi liên quan đến dung lượng vùng nhớ khối xếp Java, bạn có thể tăng kích thước vùng nhớ khối xếp Java tối đa lên 4GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Bạn có thể chỉ định nhiều cờ trong dấu ngoặc kép và phân tách bằng dấu cách, chẳng hạn như JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". Cờ chỉ ảnh hưởng đến các thành phần dựa trên Java của trình mô phỏng và không ảnh hưởng đến các phần khác của CLI Firebase, chẳng hạn như giao diện người dùng của Bộ mô phỏng.

Khởi động trình mô phỏng

Bạn có thể khởi động trình mô phỏng để chạy cho đến khi bị chấm dứt theo cách thủ công, hoặc chạy trong thời hạn của tập lệnh kiểm thử được chỉ định rồi tự động tắt.

Lệnh Mô tả
emulators:start Khởi động trình mô phỏng cho các sản phẩm Firebase được định cấu hình trong firebase.json. Các quy trình của trình mô phỏng sẽ tiếp tục chạy cho đến khi kết thúc một cách rõ ràng. Việc gọi emulators:start sẽ tải các trình mô phỏng xuống ~/.cache/firebase/emulators/ nếu bạn chưa cài đặt các trình mô phỏng đó.
Cờ Mô tả
--only Không bắt buộc. Giới hạn các trình mô phỏng khởi động. Cung cấp danh sách tên trình mô phỏng được phân tách bằng dấu phẩy, trong đó chỉ định một hoặc nhiều "auth", "database", "datastore", "functions", "hosting" hoặc "pubsub".
--inspect-functions debug_port Không bắt buộc. Sử dụng với trình mô phỏng Cloud Functions để bật tính năng gỡ lỗi điểm ngắt của các hàm tại cổng được chỉ định (hoặc cổng mặc định 9229 nếu đối số bị bỏ qua). Xin lưu ý rằng khi cờ này được cung cấp, trình mô phỏng Hàm đám mây sẽ chuyển sang chế độ thực thi tuần tự đặc biệt, trong đó các hàm được thực thi trong một quy trình duy nhất theo thứ tự tuần tự (FIFO); điều này giúp đơn giản hoá việc gỡ lỗi hàm, mặc dù hành vi này khác với nhiều quá trình, thực thi song song các hàm trên đám mây.
--export-on-exit= Không bắt buộc. Sử dụng với Trình xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc trình mô phỏng Cloud Storage cho Firebase. Hướng dẫn(các) trình mô phỏng xuất dữ liệu sang một thư mục khi quá trình tắt diễn ra, như mô tả cho lệnh emulators:export. Bạn có thể chỉ định thư mục xuất bằng cờ này: firebase emulators:start --export-on-exit=./saved-data. Nếu bạn sử dụng --import, đường dẫn xuất sẽ mặc định giống như vậy; ví dụ: firebase emulators:start --import=./data-path --export-on-exit. Cuối cùng, nếu muốn, hãy truyền các đường dẫn thư mục khác nhau đến cờ --import--export-on-exit.
--import=import_directory Không bắt buộc. Sử dụng với Trình xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc trình mô phỏng Cloud Storage cho Firebase. Nhập dữ liệu được lưu bằng tuỳ chọn khởi động --export-on-exit hoặc lệnh emulators:export vào một phiên bản xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc Cloud Storage cho Firebase đang chạy. Mọi dữ liệu hiện có trong bộ nhớ của trình mô phỏng sẽ bị ghi đè.
emulators:exec scriptpath Chạy tập lệnh tại scriptpath sau khi khởi động trình mô phỏng cho các sản phẩm Firebase được định cấu hình trong firebase.json. Các quy trình của trình mô phỏng sẽ tự động dừng khi tập lệnh chạy xong.
Cờ Mô tả
--only Không bắt buộc. Giới hạn các trình mô phỏng khởi động. Cung cấp một danh sách tên trình mô phỏng được phân tách bằng dấu phẩy, trong đó chỉ định một hoặc nhiều "firestore", "database", "functions", "hosting" hoặc "pubsub".
--inspect-functions debug_port Không bắt buộc. Sử dụng với trình mô phỏng Cloud Functions để bật tính năng gỡ lỗi điểm ngắt của các hàm tại cổng được chỉ định (hoặc cổng mặc định 9229 nếu đối số bị bỏ qua). Lưu ý rằng khi cờ này được cung cấp, trình mô phỏng Hàm đám mây sẽ chuyển sang chế độ thực thi tuần tự đặc biệt, trong đó các hàm được thực thi trong một quy trình duy nhất theo thứ tự tuần tự (FIFO); điều này giúp đơn giản hoá việc gỡ lỗi hàm, mặc dù hành vi này khác với nhiều quá trình, thực thi song song các hàm trên đám mây.
--export-on-exit= Không bắt buộc. Sử dụng với Trình xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc trình mô phỏng Cloud Storage cho Firebase. Hướng dẫn(các) trình mô phỏng xuất dữ liệu sang một thư mục khi quá trình tắt diễn ra, như mô tả cho lệnh emulators:export. Bạn có thể chỉ định thư mục xuất bằng cờ này: firebase emulators:start --export-on-exit=./saved-data. Nếu bạn sử dụng --import, đường dẫn xuất sẽ mặc định giống như vậy; ví dụ: firebase emulators:start --import=./data-path --export-on-exit. Cuối cùng, nếu muốn, hãy truyền các đường dẫn thư mục khác nhau đến cờ --import--export-on-exit.
--import=import_directory Không bắt buộc. Sử dụng với Trình xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc trình mô phỏng Cloud Storage cho Firebase. Nhập dữ liệu được lưu bằng tuỳ chọn khởi động --export-on-exit hoặc lệnh emulators:export vào một phiên bản xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc Cloud Storage cho Firebase đang chạy. Mọi dữ liệu hiện có trong bộ nhớ của trình mô phỏng sẽ bị ghi đè.
--ui Không bắt buộc. Chạy giao diện người dùng của Trình mô phỏng trong quá trình thực thi.

Phương thức firebase emulators:exec thường phù hợp hơn cho quy trình tích hợp liên tục.

Xuất và nhập dữ liệu của trình mô phỏng

Bạn có thể xuất dữ liệu từ trình mô phỏng Xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực và Cloud Storage cho Firebase để dùng làm một tập dữ liệu cơ sở phổ biến và có thể chia sẻ. Bạn có thể nhập các tập dữ liệu này bằng cách sử dụng cờ --import như mô tả ở trên.

emulators:export export_directory

Xác thực, Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc Trình mô phỏng Cloud Storage cho Firebase. Xuất dữ liệu từ phiên bản trình mô phỏng Cloud Firestore, Cơ sở dữ liệu theo thời gian thực hoặc Cloud Storage cho Firebase đang chạy. export_directory được chỉ định sẽ được tạo nếu chưa tồn tại. Nếu thư mục được chỉ định tồn tại, bạn sẽ được nhắc xác nhận rằng dữ liệu xuất trước đó sẽ bị ghi đè. Bạn có thể bỏ qua lời nhắc này bằng cách sử dụng cờ --force. Thư mục xuất chứa một tệp kê khai dữ liệu, firebase-export-metadata.json.

Bạn có thể hướng dẫn trình mô phỏng tự động xuất dữ liệu khi các trình mô phỏng này tắt bằng cách sử dụng cờ --export-on-exit như mô tả ở trên.

Tích hợp với hệ thống CI

Chạy hình ảnh Bộ mô phỏng trong vùng chứa

Việc cài đặt và định cấu hình Bộ mô phỏng với các vùng chứa theo cách thiết lập CI thông thường rất đơn giản.

Có một vài vấn đề cần lưu ý:

  • Các tệp JAR được cài đặt và lưu vào bộ nhớ đệm tại ~/.cache/firebase/emulators/.

    • Bạn nên thêm đường dẫn này vào cấu hình bộ nhớ đệm CI để tránh tải xuống nhiều lần.
  • Nếu không có tệp firebase.json trong kho lưu trữ, bạn phải thêm một đối số dòng lệnh vào lệnh emulators:start hoặc emulators:exec để chỉ định trình mô phỏng nào cần khởi động. Ví dụ:
    --only functions,firestore.

Tạo mã thông báo xác thực (Chỉ dành cho trình mô phỏng lưu trữ)

Nếu quy trình tích hợp liên tục của bạn phụ thuộc vào tính năng Lưu trữ Firebase , thì bạn sẽ phải đăng nhập bằng mã thông báo để chạy firebase emulators:exec. Các trình mô phỏng khác không yêu cầu đăng nhập.

Để tạo mã thông báo, hãy chạy firebase login:ci trên môi trường cục bộ của bạn. Bạn không nên thực hiện việc này từ hệ thống CI. Hãy làm theo hướng dẫn để xác thực. Bạn chỉ cần thực hiện bước này một lần cho mỗi dự án, vì mã thông báo sẽ có hiệu lực trên các bản dựng. Mã thông báo phải được coi như một mật khẩu; hãy đảm bảo rằng mã được giữ bí mật.

Nếu môi trường CI cho phép bạn chỉ định các biến môi trường có thể dùng được trong tập lệnh bản dựng, thì bạn chỉ cần tạo một biến môi trường có tên là FIREBASE_TOKEN, với giá trị là chuỗi mã truy cập. CLI của Firebase sẽ tự động chọn biến môi trường FIREBASE_TOKEN và trình mô phỏng sẽ khởi động đúng cách.

Khi không còn cách nào khác, bạn chỉ cần đưa mã thông báo này vào tập lệnh bản dựng nhưng hãy đảm bảo rằng các bên không đáng tin cậy sẽ không có quyền truy cập. Đối với phương pháp mã hoá cứng này, bạn có thể thêm --token "YOUR_TOKEN_STRING_HERE" vào lệnh firebase emulators:exec.

Sử dụng API REST của Trung tâm trình mô phỏng

Liệt kê các trình mô phỏng đang chạy

Để liệt kê các trình mô phỏng đang chạy, hãy gửi yêu cầu GET đến điểm cuối /emulators của Trung tâm trình mô phỏng.

curl localhost:4400/emulators

Kết quả sẽ là một đối tượng JSON liệt kê tất cả các trình mô phỏng đang chạy và cấu hình máy chủ/cổng của các trình mô phỏng đó, ví dụ:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

Bật / tắt trình kích hoạt chức năng trong nền

Trong một số trường hợp, bạn cần tạm thời tắt trình kích hoạt tiện ích và hàm cục bộ. Ví dụ: có thể bạn muốn xoá tất cả dữ liệu trong trình mô phỏng Cloud Firestore mà không kích hoạt bất kỳ hàm onDelete nào đang chạy trong trình mô phỏng Tiện ích hoặc Hàm đám mây.

Để tạm thời tắt các điều kiện kích hoạt hàm cục bộ, hãy gửi yêu cầu PUT đến điểm cuối /functions/disableBackgroundTriggers của Trung tâm trình mô phỏng.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Kết quả sẽ là một đối tượng JSON chứa thông tin chi tiết về trạng thái hiện tại.

{
  "enabled": false
}

Để bật các điều kiện kích hoạt hàm cục bộ sau khi tắt, hãy gửi yêu cầu PUT đến điểm cuối /functions/enableBackgroundTriggers của Trung tâm trình mô phỏng.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Kết quả sẽ là một đối tượng JSON chứa thông tin chi tiết về trạng thái hiện tại.

{
  "enabled": true
}

Tích hợp SDK trình mô phỏng

Các bảng trong phần này cho biết những trình mô phỏng được SDK ứng dụng và SDK quản trị hỗ trợ. Future (tương lai) có nghĩa là tính năng hỗ trợ trình mô phỏng đã được lên kế hoạch nhưng chưa có sẵn.

Phạm vi cung cấp SDK ứng dụng

Android Nền tảng của Apple Web Giao diện người dùng Firebase
Android
Giao diện người dùng Firebase
iOS
Giao diện người dùng Firebase
Web
Cơ sở dữ liệu theo thời gian thực 19.4.0 7.2.0 8.0.0 6.4.0 Thì tương lai Không áp dụng
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Thì tương lai Không áp dụng
Xác thực 20.0.0 7.0.0 8.0.0 7.0.0 Thì tương lai 4.7.2
Cloud Storage cho Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Không áp dụng
Cloud Functions 19.1.0 7.2.0 8.0.0 Không áp dụng Không có Không áp dụng
Lưu trữ Không áp dụng Không có Không có Không có Không có Không áp dụng
Phần mở rộng Không áp dụng Không có Không có Không có Không có Không áp dụng

Phạm vi cung cấp SDK dành cho quản trị viên

Nút Java Python Bắt đầu
Cơ sở dữ liệu theo thời gian thực 8.6.0 6.10.0 2.18.0 Thì tương lai
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Xác thực 9.3.0 7.2.0 5.0.0 4.2.0
Cloud Storage cho Firebase 9.8.0 Thì tương lai Thì tương lai Thì tương lai
Cloud Functions Không áp dụng Không có Không có Không áp dụng
Lưu trữ Không áp dụng Không có Không có Không áp dụng
Phần mở rộng Không áp dụng Không có Không có Không áp dụng