Local Emulator Suite'i yükleyin, yapılandırın ve entegre edin

Firebase Local Emulator Suite, tek seferlik prototipleme oturumlarından üretim ölçeğinde sürekli entegrasyon iş akışlarına kadar farklı prototip ve test ortamları için yüklenebilir ve yapılandırılabilir.

Local Emulator Suite'i yükleme

Emulator Suite'i yüklemeden önce şunları yapmanız gerekir:

  • Node.js 16.0 veya sonraki bir sürüm.
  • Java JDK 11 veya sonraki bir sürüm.

Emulator Suite'i yüklemek için:

  1. Firebase CLI'yi yükleyin. Firebase CLI yüklü değilse hemen yükleyin. Emulator Suite'i kullanmak için CLI 8.14.0 veya sonraki bir sürüme sahip olmanız gerekir. Aşağıdaki komutu kullanarak hangi sürümü yüklediğinizi kontrol edebilirsiniz:
    firebase --version
  2. Henüz yapmadıysanız mevcut çalışma dizinini bir Firebase projesi olarak başlatın. Bunun için ekrandaki talimatları uygulayarak kullanılacak ürünleri belirtin:
    firebase init
  3. Emulator Suite'i ayarlayın. Bu komut, ilgilendiğiniz emülatörleri seçmenize, ilgili emülatör ikili dosyalarını indirmenize ve varsayılanlar uygun değilse emülatör bağlantı noktalarını ayarlamanıza olanak tanıyan bir yapılandırma sihirbazı başlatır.
    firebase init emulators

Bir emülatör yüklendikten sonra, Firebase CLI sürümünüzü güncelleyene kadar güncelleme kontrolü yapılmaz ve başka otomatik indirme işlemi gerçekleşmez.

Emulator Suite'i yapılandırma

İsteğe bağlı olarak, firebase.json dosyasında emülatörlerin ağ bağlantı noktalarını ve Güvenlik Kuralları tanımlarının yolunu yapılandırabilirsiniz:

  • firebase init emulators dosyasını çalıştırarak veya firebase.json dosyasını manuel olarak düzenleyerek emülatör bağlantı noktalarını değiştirin.
  • firebase.json dosyasını manuel olarak düzenleyerek Güvenlik Kuralları tanımlarının yolunu değiştirin.

Bu ayarları yapılandırmazsanız emülatörler varsayılan bağlantı noktalarında dinler ve Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörleri açık veri güvenliğiyle çalışır.

Komut Açıklama
init emulators Bir emülatör başlatma sihirbazını başlatın. Yüklenecek emülatörleri tanımlayın ve isteğe bağlı olarak emülatör bağlantı noktası ayarlarını belirtin. init emulators, dosyaları etkilemez. Varsayılanları kabul ettiğinizde mevcut emülatör yapılandırması korunur.

Bağlantı noktası yapılandırması

Her emülatör, tercih edilen varsayılan değerle makinenizdeki farklı bir bağlantı noktasına bağlanır.

Emülatör Varsayılan Bağlantı Noktası
Authentication 9099
App Hosting 5002
Emulator Suite UI 4.000
Cloud Functions 5001
Eventarc 9299
Realtime Database 9000
Cloud Firestore 8080
Cloud Storage for Firebase 9199
Firebase Hosting 5000
Pub/Sub 8085

Proje kimliği yapılandırması

Emülatörleri nasıl çağırdığınıza bağlı olarak, farklı Firebase proje kimlikleri kullanarak bir emülatörden birden fazla örnek veya belirli bir proje kimliği için birden fazla emülatör örneği çalıştırabilirsiniz. Bu gibi durumlarda, emülatör örnekleri ayrı bir ortamda çalışır.

Genellikle tüm emülatör çağrıları için tek bir proje kimliği ayarlamak iyi bir uygulamadır. Böylece Emulator Suite UI, farklı ürün emülatörleri ve belirli bir emülatörün çalışan tüm örnekleri her durumda doğru şekilde iletişim kurabilir.

Local Emulator Suite, ortamda birden fazla proje kimliği algıladığında uyarı verir. Ancak firebase.json dosyanızda singleProjectMode anahtarını false olarak ayarlayarak bu davranışı geçersiz kılabilirsiniz.

Proje kimliği beyanlarında aşağıdaki yerlerde uyuşmazlık olup olmadığını kontrol edebilirsiniz:

  • Komut satırındaki varsayılan proje. Varsayılan olarak, proje kimliği firebase init veya firebase use ile seçilen projeden alınır. Proje listesini görüntülemek (ve hangisinin seçili olduğunu görmek) için firebase projects:list simgesini kullanın.
  • Kural birim testleri. Proje kimliği genellikle Kurallar Birim Testi kitaplığı yöntemleri initializeTestEnvironment veya initializeTestApp çağrılarında belirtilir.
  • Komut satırı --project işareti. Firebase CLI --project işareti iletilmesi, varsayılan projeyi geçersiz kılar. İşaretin değerinin birim testlerinde ve uygulama başlatmada proje kimliğiyle eşleştiğinden emin olmanız gerekir.

Ayrıca, Apple platformlarınızı, Android ve web projelerinizi yapılandırırken belirlediğiniz platforma özel proje kimliği yapılandırmalarını da kontrol edin.

Güvenlik Kuralları yapılandırması

Emülasyon cihazları, firebase.json'daki database, firestore ve storage yapılandırma anahtarlarından Güvenlik Kuralları yapılandırmasını alır.

{
  // 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"
    }
  }
}

Java seçeneklerini belirtme

Realtime Database emülatör, Cloud Firestore emülatör ve Cloud Storage for Firebase emülatörünün bir kısmı Java'ya dayanır. Java, JAVA_TOOL_OPTIONS ortam değişkeni aracılığıyla JVM işaretleriyle özelleştirilebilir.

Örneğin, Java yığın alanıyla ilgili hatalarla karşılaşıyorsanız maksimum Java yığın boyutunu 4 GB'a çıkarabilirsiniz:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Birden fazla işaret, JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" gibi tırnak içinde boşluklarla ayrılmış olarak belirtilebilir. İşaretler yalnızca emülatörlerin Java tabanlı bileşenlerini etkiler ve Firebase CLI'nin Emulator Suite UI gibi diğer bölümlerini etkilemez.

Emülatörleri başlatma

Emülatörleri manuel olarak sonlandırılana kadar veya belirli bir test komut dosyasının süresi boyunca çalıştırıp otomatik olarak kapatacak şekilde başlatabilirsiniz.

Komut Açıklama
emulators:start firebase.json'te yapılandırılan Firebase ürünlerinin emülatörlerini başlatın. Emülatör işlemleri, açıkça durdurulana kadar çalışmaya devam eder. emulators:start çağrısı, yüklü değilse emülatörleri ~/.cache/firebase/emulators/ dizinine indirir.
İşaret Açıklama
--only İsteğe bağlıdır. Hangi emülatörlerin başlatılacağını sınırlayın. "auth", "database", "firestore", "functions", "hosting" veya "pubsub" seçeneklerinden birini veya daha fazlasını belirterek virgülle ayrılmış bir emülatör adı listesi sağlayın.
--inspect-functions debug_port İsteğe bağlıdır. Belirtilen bağlantı noktasındaki (veya bağımsız değişken atlanmışsa varsayılan bağlantı noktası 9229) işlevlerde kesme noktası hata ayıklama özelliğini etkinleştirmek için Cloud Functions emülatörüyle kullanın. Bu işaret sağlandığında Cloud Functions emülatörünün, işlevlerin tek bir işlemde ardışık (FIFO) sırada yürütüldüğü özel bir serileştirilmiş yürütme moduna geçtiğini unutmayın. Bu, işlev hata ayıklama işlemini basitleştirir ancak davranış, buluttaki işlevlerin çok işlemli, paralel yürütmesinden farklıdır.
--export-on-exit= İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. emulators:export komutunda açıklandığı gibi, kapatma işlemi gerçekleştiğinde emülatörlere verileri bir dizin içine aktarma talimatı verin. Dışa aktarma dizini şu işaretle belirtilebilir: firebase emulators:start --export-on-exit=./saved-data. --import kullanılırsa dışa aktarma yolu varsayılan olarak aynı olur. Örneğin: firebase emulators:start --import=./data-path --export-on-exit. Son olarak, dilerseniz --import ve --export-on-exit işaretçilerine farklı dizin yolları iletebilirsiniz.
--import=import_directory İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. --export-on-exit başlangıç seçeneği veya emulators:export komutu kullanılarak kaydedilen verileri çalışan bir Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneğine aktarın. Şu anda emülatör belleğindeki tüm verilerin üzerine yazılacak.
emulators:exec scriptpath firebase.json'te yapılandırılan Firebase ürünlerinin emülatörlerini başlattıktan sonra komut dosyasını scriptpath'te çalıştırın. Komut dosyası çalıştırmayı tamamladığında emülatör işlemleri otomatik olarak durur.
İşaret Açıklama
--only İsteğe bağlıdır. Hangi emülatörlerin başlatılacağını sınırlayın. "firestore", "database", "functions", "hosting" veya "pubsub" seçeneklerinden birini veya daha fazlasını belirterek virgülle ayrılmış bir emülatör adı listesi sağlayın.
--inspect-functions debug_port İsteğe bağlıdır. Belirtilen bağlantı noktasındaki (veya bağımsız değişken atlanmışsa varsayılan bağlantı noktası 9229) işlevlerde kesme noktası hata ayıklama özelliğini etkinleştirmek için Cloud Functions emülatörüyle kullanın. Bu işaret sağlandığında Cloud Functions emülatörünün, işlevlerin tek bir işlemde ardışık (FIFO) sırada yürütüldüğü özel bir serileştirilmiş yürütme moduna geçtiğini unutmayın. Bu, işlev hata ayıklama işlemini basitleştirir ancak davranış, işlevlerin bulutta çok işlemli, paralel olarak yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. emulators:export komutunda açıklandığı gibi, kapatma işlemi gerçekleştiğinde emülatörlere verileri bir dizin içine aktarma talimatı verin. Dışa aktarma dizini şu işaretle belirtilebilir: firebase emulators:start --export-on-exit=./saved-data. --import kullanılırsa dışa aktarma yolu varsayılan olarak aynı olur. Örneğin: firebase emulators:start --import=./data-path --export-on-exit. Son olarak, dilerseniz --import ve --export-on-exit işaretçilerine farklı dizin yolları iletebilirsiniz.
--import=import_directory İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. --export-on-exit başlangıç seçeneği veya emulators:export komutu kullanılarak kaydedilen verileri çalışan bir Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneğine aktarın. Şu anda emülatör belleğindeki tüm verilerin üzerine yazılır.
--ui İsteğe bağlıdır. Çalıştırma sırasında Emülatör kullanıcı arayüzünü çalıştırın.

firebase emulators:exec yöntemi genellikle sürekli entegrasyon iş akışları için daha uygundur.

Emülatör verilerini dışa ve içe aktarma

Paylaşılabilir, ortak bir temel veri kümesi olarak kullanmak için Authentication, Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörlerinden veri dışa aktarabilirsiniz. Bu veri kümeleri, yukarıda açıklandığı gibi --import işareti kullanılarak içe aktarılabilir.

emulators:export export_directory

Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü. Çalışan bir Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneğinden veri dışa aktarma Belirtilen export_directory, mevcut değilse oluşturulur. Belirtilen dizin mevcutsa önceki dışa aktarma verilerinin üzerine yazılmasını onaylamanız istenir. --force işaretini kullanarak bu isteği atlayabilirsiniz. Dışa aktarma dizini, firebase-export-metadata.json adlı bir veri manifest dosyası içerir.

Yukarıda açıklanan --export-on-exit işaretlerini kullanarak, emülatörlerin kapandığında verileri otomatik olarak dışa aktarmasını sağlayabilirsiniz.

CI sisteminizle entegrasyon

Container mimarisine alınmış Emulator Suite görüntülerini çalıştırma

Emulator Suite'i, tipik bir CI kurulumunda kapsayıcılarla kurmak ve yapılandırmak kolaydır.

Dikkat edilmesi gereken birkaç nokta vardır:

  • JAR dosyaları ~/.cache/firebase/emulators/ konumuna yüklenir ve önbelleğe alınır.

    • Tekrarlanan indirmeleri önlemek için bu yolu CI önbelleği yapılandırmanıza ekleyebilirsiniz.
  • Deponuzdan firebase.json dosyası yoksa hangi emülatörlerin başlatılacağını belirtmek için emulators:start veya emulators:exec komutuna bir komut satırı bağımsız değişkeni eklemeniz gerekir. Örneğin,
    --only functions,firestore.

Kimlik doğrulama jetonu oluşturma (yalnızca barındırma emülatörü)

Sürekli entegrasyon iş akışlarınız Firebase Hosting kullanıyorsa firebase emulators:exec'ü çalıştırmak için jeton kullanarak giriş yapmanız gerekir. Diğer emülatörlerde giriş yapılması gerekmez.

Jeton oluşturmak için yerel ortamınızda firebase login:ci'ü çalıştırın. Bu işlem bir CI sisteminden yapılmamalıdır. Kimlik doğrulama talimatlarını uygulayın. Jeton tüm derlemelerde geçerli olacağından bu adımı proje başına yalnızca bir kez uygulamanız gerekir. Jeton, şifre gibi ele alınmalıdır. Gizli tutulduğundan emin olun.

CI ortamınız, derleme komut dosyalarında kullanılabilecek ortam değişkenleri belirtmenize izin veriyorsa FIREBASE_TOKEN adlı bir ortam değişkeni oluşturup değerini erişim jetonu dizesi olarak ayarlayın. Firebase CLI, FIREBASE_TOKEN ortam değişkenini otomatik olarak alır ve emülatörler düzgün şekilde başlar.

Son çare olarak jetonu derleme komut dosyanıza ekleyebilirsiniz ancak güvenilmeyen tarafların erişemediğinden emin olun. Bu sabit kodlu yaklaşım için firebase emulators:exec komutuna --token "YOUR_TOKEN_STRING_HERE" ekleyebilirsiniz.

Emülatör Merkezi REST API'sini kullanma

Çalışan emülatörleri listeleme

Şu anda çalışan emülatörleri listelemek için Emülatör Merkezi'nin /emulators uç noktasına bir GET isteği gönderin.

curl localhost:4400/emulators

Sonuç, çalışan tüm emülatörleri ve ana makine/port yapılandırmalarını listeleyen bir JSON nesnesi olur. Örneğin:

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

Arka Plan İşlevi Tetikleyicilerini Etkinleştirme / Devre Dışı Bırakma

Bazı durumlarda yerel işlev ve uzantı tetikleyicilerini geçici olarak devre dışı bırakmanız gerekir. Örneğin, Cloud Functions veya Extensions emülatörlerinde çalışan onDelete işlevlerini tetiklemeden Cloud Firestore emülatöründeki tüm verileri silmek isteyebilirsiniz.

Yerel işlev tetikleyicilerini geçici olarak devre dışı bırakmak için Emulator Hub'ın /functions/disableBackgroundTriggers uç noktasına bir PUT isteği gönderin.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Sonuç, mevcut durumu ayrıntılı olarak açıklayan bir JSON nesnesi olur.

{
  "enabled": false
}

Devre dışı bırakıldıktan sonra yerel işlev tetikleyicilerini etkinleştirmek için Emulator Merkezi'nin /functions/enableBackgroundTriggers uç noktasına bir PUT isteği gönderin.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Sonuç, mevcut durumu ayrıntılı olarak açıklayan bir JSON nesnesi olur.

{
  "enabled": true
}

Emülatör SDK'sı entegrasyonları

Bu bölümdeki tablolarda, istemci ve Yönetici SDK'ları tarafından hangi emülatörlerin desteklendiği belirtilmektedir. Gelecekte, emülatör desteğinin planlandığı ancak henüz kullanıma sunulmadığı anlamına gelir.

İstemci SDK'sı kullanılabilirliği

Android Apple platformları Web Firebase UI
Android
Firebase UI
iOS
Firebase UI
Web
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Gelecek Yok
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Gelecek Yok
Authentication 20.0.0 7.0.0 8.0.0 7.0.0 Gelecek 4.7.2
Cloud Storage for Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Yok
Cloud Functions 19.1.0 7.2.0 8.0.0 Yok Yok Yok
Hosting Yok Yok Yok Yok Yok Yok
Extensions Yok Yok Yok Yok Yok Yok

Yönetici SDK'sının kullanılabilirliği

Düğüm Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Gelecek
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Authentication 9.3.0 7.2.0 5.0.0 4.2.0
Cloud Storage for Firebase 9.8.0 Gelecek Gelecek Gelecek
Cloud Functions Yok Yok Yok Yok
Hosting Yok Yok Yok Yok
Extensions Yok Yok Yok Yok