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

Firebase Local Emulator Suite, tek seferlik prototip oturumlarından üretim ölçeğindeki 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ükleyin

Emulator Suite'i yüklemeden önce şunlara ihtiyacınız vardır:

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

Emulator Suite'i yüklemek için:

  1. Firebase CLI'ı yükleyin. Firebase CLI'ı henüz yüklemediyseniz hemen yükleyin. Emulator Suite'i kullanmak için CLI'ın 8.14.0 veya üzeri bir sürümüne 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. Ardından, hangi ürünlerin kullanılacağını belirtmek için ekrandaki talimatları uygulayın:
    firebase init
  3. Emulator Suite'i kurun. Bu komut; istediğ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, güncelleme kontrolü yapılmaz ve Firebase CLI sürümünüzü güncelleyene kadar ek otomatik indirmeler yapılmaz.

Emulator Suite'i yapılandırın

İ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 komutunu çalıştırarak veya firebase.json öğesini manuel olarak düzenleyerek emülatör bağlantı noktalarını değiştirin.
  • firebase.json öğesini 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ını dinler. Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörleri ise açık veri güvenliğiyle çalışır.

Komut Açıklama
init emülatörleri Bir emülatör başlatma sihirbazı başlatın. Yüklenecek emülatörleri belirleyin ve isteğe bağlı olarak emülatör bağlantı noktası ayarlarını belirtin. init emulators zarar vermez; varsayılanların kabul edilmesi, geçerli emülatör yapılandırmasının korunmasını sağlar.

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ı
Doğrulama 9099
Emulator Suite kullanıcı arayüzü 4.000
Cloud Functions 5001
Eventarc 9299
Realtime Database 9500
Cloud Firestore 8080
Cloud Storage for Firebase 9199
Firebase Hosting 5.000
Pub/Sub 8085

Proje kimliği yapılandırması

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

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

Yerel Emulator Suite, ortamda birden fazla proje kimliği algıladığında uyarı verir. Bununla birlikte, firebase.json öğenizde singleProjectMode anahtarını false olarak ayarlayarak bu davranışı geçersiz kılabilirsiniz.

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

  • Komut satırındaki varsayılan proje. Proje kimliği varsayılan olarak başlangıçta firebase init veya firebase use ile seçilen projeden alınır. Proje listesini görüntülemek (ve hangisinin seçildiğini görmek) için firebase projects:list kısayolunu kullanın.
  • Kural birimi testleri. Proje kimliği genellikle Kural Birimi Test kitaplığının initializeTestEnvironment veya initializeTestApp yöntemlerine yapılan çağrılarda belirtilir.
  • Komut satırı --project işareti. Firebase CLI --project işareti iletildiğinde varsayılan proje geçersiz kılınır. Bayrağın değerinin, birim testlerindeki ve uygulama başlatmadaki proje kimliğiyle eşleştiğinden emin olmanız gerekir.

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

Güvenlik Kuralları yapılandırması

Emülatörler, firebase.json içindeki 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 parçası, Java tabanlıdır. Bu emülatör, 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şırsanız maksimum Java yığın boyutunu 4 GB'a artırabilirsiniz:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Birden fazla işaret, tırnak işaretleri içinde boşlukla ayrılmış şekilde belirtilebilir (ör. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"). İşaretler yalnızca emülatörlerin Java tabanlı bileşenlerini etkiler. Emulator Suite kullanıcı arayüzü gibi Firebase CLI'ın diğer bölümleri üzerinde herhangi bir etkisi yoktur.

Başlatma emülatörleri

Emülatörleri, manuel olarak sonlandırılana kadar çalışacak şekilde başlatabilir veya belirlenen bir test komut dosyası süresince çalıştırıp otomatik olarak kapatabilirsiniz.

Komut Açıklama
emülators:start firebase.json bölgesinde yapılandırılan Firebase ürünleri için emülatörleri başlatın. Emülatör işlemleri açıkça durdurulana kadar çalışmaya devam eder. emulators:start çağrısı yapıldığında emülatörler, yüklü değilse ~/.cache/firebase/emulators/ konumuna indirilir.
İşaret Açıklama
--only İsteğe bağlıdır. Hangi emülatörlerin başlatılacağını sınırlandırın. "auth", "database", "firestore", "functions", "hosting" veya "pubsub" öğelerinden birini veya daha fazlasını belirterek emülatör adlarının virgülle ayrılmış bir listesini sağlayın.
--inspect-functions debug_port İsteğe bağlıdır. Belirtilen bağlantı noktasında (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası olan 9229) işlevlerde kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions emülatörüyle birlikte kullanın. Bu işaret sağlandığında Cloud Functions emülatörünün, işlevlerin tek bir işlemde sıralı (FIFO) sırayla yürütüleceği özel bir serileştirilmiş yürütme moduna geçtiğini unutmayın. Bu, işlevlerin bulutta çok işlemli ve paralel olarak yürütülmesine göre farklılık gösterse de işlev hata ayıklamasını basitleştirir.
--export-on-exit= İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. Emülatörlere, kapanma gerçekleştiğinde emulators:export komutunda açıklandığı şekilde verileri bir dizine aktarmaları talimatını 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, istenirse --import ve --export-on-exit işaretlerine farklı dizin yolları iletin.
--import=import_directory İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. --export-on-exit başlatma 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ğinde bulunan tüm veriler aşırıya kaçar.
emulators:exec scriptpath firebase.json içinde yapılandırılan Firebase ürünleri için emülatörleri başlattıktan sonra scriptpath konumunda komut dosyasını çalıştırın. Komut dosyasının çalışması tamamlandığı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ırlandırın. "Firestore", "database", "functions", "hosting" veya "pubsub" öğelerinden birini veya daha fazlasını belirterek emülatör adlarının virgülle ayrılmış bir listesini sağlayın.
--inspect-functions debug_port İsteğe bağlıdır. Belirtilen bağlantı noktasında (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası olan 9229) işlevlerde kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions emülatörüyle birlikte kullanın. Bu işaret sağlandığında Cloud Functions emülatörünün, işlevlerin tek bir işlemde sıralı (FIFO) sırayla yürütüldüğü özel bir serileştirilmiş yürütme moduna geçtiğini unutmayın. Bu, işlevlerin bulutta çok işlemli ve paralel olarak yürütülmesine göre farklılık gösterse de işlev hata ayıklamasını basitleştirir.
--export-on-exit= İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. Emülatörlere, kapanma gerçekleştiğinde emulators:export komutunda açıklandığı şekilde verileri bir dizine aktarmaları talimatını 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, istenirse --import ve --export-on-exit işaretlerine farklı dizin yolları iletin.
--import=import_directory İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. --export-on-exit başlatma 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. Yürütme sırasında Emulator kullanıcı arayüzünü çalıştırın.

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

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

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

emülatörler:dışa aktarma export_directory

Kimlik doğrulama, 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 verileri dışa aktarın. Belirtilen export_directory mevcut değilse oluşturulur. Belirtilen dizin mevcutsa önceki dışa aktarma verilerinin üzerine yazılması gerektiğini onaylamanız istenir. --force işaretini kullanarak bu istemi atlayabilirsiniz. Dışa aktarma dizini bir veri manifest dosyası (firebase-export-metadata.json) içerir.

Yukarıda açıklanan --export-on-exit işaretlerini kullanarak emülatörlere, kapandıklarında verileri otomatik olarak dışa aktarmaları talimatını verebilirsiniz.

CI sisteminizle entegrasyon

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

Tipik bir CI kurulumunda container'larla Emulator Suite'in yüklenmesi ve yapılandırılması oldukça kolaydır.

Dikkat edilmesi gereken birkaç sorun vardır:

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

    • Yinelenen indirmeleri önlemek için bu yolu CI önbellek yapılandırmanıza eklemek isteyebilirsiniz.
  • Deponuzda firebase.json dosyası yoksa hangi emülatörlerin başlatılması gerektiğini 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.

Yetkilendirme jetonu oluşturma (yalnızca barındırma emülatörü)

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

Jeton oluşturmak için firebase login:ci komutunu yerel ortamınızda çalıştırın. Bu işlem, bir CI sisteminden yapılmamalıdır. Kimlik doğrulama talimatlarını uygulayın. Jeton derlemeler genelinde geçerli olacağından bu adımı proje başına yalnızca bir kez gerçekleştirmeniz gerekir. Jeton, şifre gibi değerlendirilmelidir. Şifrenin gizli tutulduğundan emin olun.

CI ortamınız derleme komut dosyalarında kullanılabilecek ortam değişkenlerini belirtmenize olanak tanıyorsa FIREBASE_TOKEN adında bir ortam değişkeni oluşturmanız yeterlidir. Bu değişkenin değeri erişim jetonu dizesi olur. Firebase CLI, FIREBASE_TOKEN ortam değişkenini otomatik olarak alır ve emülatörler doğru şekilde başlar.

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

Emulator Hub REST API'yi kullanma

Çalışan emülatörleri listeleme

Şu anda çalışan emülatörleri listelemek için Emulator Hub'ın /emulators uç noktasına GET isteği gönderin.

curl localhost:4400/emulators

Sonuç, tüm çalışan emülatörleri ve bunların ana makine/bağlantı noktası yapılandırmalarını listeleyen bir JSON nesnesi olacaktır. Ö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ştirin / Devre Dışı Bırakın

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örindeki 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 gösteren bir JSON nesnesi olur.

{
  "enabled": false
}

Devre dışı bırakılan yerel işlev tetikleyicilerini etkinleştirmek için Emulator Hub'ın /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 gösteren bir JSON nesnesi olur.

{
  "enabled": true
}

Emulator SDK entegrasyonları

Bu bölümdeki tablolar, istemci ve yönetici SDK'ları tarafından hangi emülatörlerin desteklendiğini gösterir. Gelecek, emülatör desteğinin planlandığı ancak henüz kullanılamadığı anlamına gelir.

İstemci SDK'sının kullanılabilirliği

Android Apple platformları Web Firebase kullanıcı arayüzü
Android
Firebase kullanıcı arayüzü
iOS
Firebase kullanıcı arayüzü
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
Doğrulama 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
Uzantılar Yok Yok Yok Yok Yok Yok

Yönetici SDK'sinin 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
Doğrulama 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
Uzantılar Yok Yok Yok Yok