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

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

Local Emulator Suite'i yükleme

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

  • 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'yı yükleyin. Firebase CLI'yi henüz yüklemediyseniz hemen yükleyin. Emulator Suite'i kullanmak için CLI 8.14.0 veya sonraki 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 hangi ürünlerin kullanılacağını belirtmek için ekrandaki istemleri izleyerek geçerli çalışma dizinini Firebase projesi olarak başlatın:
    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 ek 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 komutunu ç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ını 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 Emülatör başlatma sihirbazını 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, mevcut yapılandırmayı bozmaz. Varsayılanları kabul ettiğinizde mevcut emülatör yapılandırması korunur.

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

Her emülatör, makinenizde tercih edilen varsayılan değerle 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örün birden fazla örneğini veya belirli bir proje kimliği için birden fazla emülatör örneğini çalıştırabilirsiniz. Bu gibi durumlarda, emülatör örnekleri ayrı bir ortamda çalışır.

Genel olarak, tüm emülatör çağırmaları 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ılar yayınlar. Ancak firebase.json dosyanızda singleProjectMode anahtarını false olarak ayarlayarak bu davranışı geçersiz kılabilirsiniz.

Proje kimliği beyanlarının eşleşip eşleşmediğini şu yerlerde kontrol edebilirsiniz:

  • Komut satırındaki varsayılan proje. Varsayılan olarak, proje kimliği firebase init veya firebase use ile seçilen projeden başlatma sırasında alınır. Proje listesini görüntülemek (ve hangisinin seçildiğini görmek) için firebase projects:list simgesini kullanın.
  • Kurallar birim testleri Proje kimliği genellikle Kurallar Birim Testi kitaplığı yöntemlerine initializeTestEnvironment veya initializeTestApp yapılan çağrılarda belirtilir.
  • Komut satırı --project işareti. Firebase CLI --project işaretini iletmek varsayılan projeyi geçersiz kılar. İşaretin değerinin, birim testlerinde ve uygulama başlatma işleminde 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 ayarladığınız platforma özel proje kimliği yapılandırmalarını da kontrol edin.

Güvenlik kuralları yapılandırması

Emülatörler, database,firestore ve storage yapılandırma anahtarlarından firebase.json içindeki 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. Bu emülatörler, JAVA_TOOL_OPTIONS ortam değişkeni aracılığıyla JVM işaretleriyle özelleştirilebilir.

Örneğin, Java yığın alanı ile ilgili hatalar yaşıyorsanız maksimum Java yığın boyutunu 4 GB'a çıkarabilirsiniz:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Birden fazla işaret, boşluklarla ayrılmış tırnak işaretleri içinde belirtilebilir. Örneğin, JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". Bu işaretler yalnızca emülatörlerin Java tabanlı bileşenlerini etkiler ve Firebase CLI'nın diğer bölümleri (ör. Emulator Suite UI) üzerinde herhangi bir etkisi yoktur.

Emülatörleri başlatma

Emülatörleri manuel olarak sonlandırılana kadar veya belirlenen bir test komut dosyası süresince çalışacak ve ardından otomatik olarak kapanacak şekilde başlatabilirsiniz.

Komut Açıklama
emulators:start firebase.json içinde 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. Calling emulators:start, emülatörler yüklü değilse bunları ~/.cache/firebase/emulators/ konumuna indirir.
İşaret Açıklama
--only İsteğe bağlıdır. Hangi emülatörlerin başlatılacağını sınırlayın. Virgülle ayrılmış bir emülatör adı listesi sağlayın. Bu listede "auth", "database", "firestore", "functions", "hosting" veya "pubsub"dan birini ya da daha fazlasını belirtin.
--inspect-functions debug_port İsteğe bağlıdır. Belirtilen bağlantı noktasındaki (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası 9229) işlevlerde kesme noktası hata ayıklaması yapmak için Cloud Functions emülatörüyle birlikte kullanılır. Bu işaret sağlandığında Cloud Functions emülatörünün, işlevlerin tek bir işlemde sırayla (FIFO) yürütüldüğü özel bir seri yürütme moduna geçtiğini unutmayın. Bu, işlevlerin hata ayıklamasını kolaylaştırır ancak davranış, işlevlerin bulutta çok işlemli, paralel 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. Kapatma işlemi gerçekleştiğinde emülatörlere, 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ü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ğinde bulunan tüm verilerin üzerine yazılır.
--log-verbosity=verbosity İsteğe bağlıdır. Emülatörlerden gelen günlük çıktısı miktarını azaltarak konsoldaki ve günlük dosyalarındaki gürültüyü azaltır. Geçerli değerler DEBUG, INFO, QUIET, SILENT'tır.
emulators:exec scriptpath scriptpath konumunda komut dosyasını çalıştırın. Bunun için firebase.json konumunda yapılandırılan Firebase ürünleri için emülatörleri başlatın. Komut dosyası çalışmayı bitirdiğinde emülatör işlemleri otomatik olarak durdurulur.
İşaret Açıklama
--only İsteğe bağlıdır. Hangi emülatörlerin başlatılacağını sınırlayın. Virgülle ayrılmış bir emülatör adları listesi sağlayın. Bu listede "firestore", "database", "functions", "hosting" veya "pubsub"dan birini ya da daha fazlasını belirtin.
--inspect-functions debug_port İsteğe bağlıdır. Belirtilen bağlantı noktasındaki (bağımsız değişken atlanırsa varsayılan bağlantı noktası 9229) işlevlerde kesme noktası hata ayıklaması yapmak için Cloud Functions emülatörüyle birlikte kullanılır. Bu işaret sağlandığında Cloud Functions emülatörünün, işlevlerin tek bir süreçte sırayla (FIFO) yürütüldüğü özel bir seri yürütme moduna geçtiğini unutmayın. Bu, işlevlerin hata ayıklamasını kolaylaştırır ancak davranış, işlevlerin bulutta çok süreçli ve paralel 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. Kapatma işlemi gerçekleştiğinde emülatörlere, 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ü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ğinde bulunan 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.
--log-verbosity=verbosity İsteğe bağlıdır. Emülatörlerden gelen günlük çıktısı miktarını azaltarak konsoldaki ve günlük dosyalarındaki gürültüyü azaltır. Geçerli değerler DEBUG, INFO, QUIET, SILENT'tır.

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

Yukarıda açıklanan --export-on-exit işaretlerini kullanarak kapatıldıklarında emülatörlerin 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

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

Dikkat edilmesi gereken birkaç nokta vardır:

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

    • Tekrar tekrar indirme işlemini önlemek için bu yolu CI önbellek yapılandırmanıza ekleyebilirsiniz.
  • Deponuzda 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ızda Firebase Hosting kullanılı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 yerel ortamınızda firebase login:ci komutunu çalıştırın. Bu işlem bir CI sisteminden yapılmamalıdır. Kimlik doğrulama talimatlarını uygulayın. Jeton, derlemelerde geçerli olacağından bu adımı proje başına yalnızca bir kez uygulamanız gerekir. Jeton, şifre gibi değerlendirilmeli ve gizli tutulmalıdır.

CI ortamınız, derleme komut dosyalarında kullanılabilecek ortam değişkenleri belirtmenize olanak tanıyorsa erişim jetonu dizesi değerine sahip FIREBASE_TOKEN adlı bir ortam değişkeni oluşturmanız yeterlidir. Firebase CLI, FIREBASE_TOKEN ortam değişkenini otomatik olarak alır ve emülatörler düzgün şekilde başlatılır.

Son çare olarak, jetonu derleme komut dosyanıza ekleyebilirsiniz ancak güvenilmeyen tarafların erişimi olmadığından emin olun. Bu sabit kodlu yaklaşım için --token "YOUR_TOKEN_STRING_HERE" komutuna firebase emulators:exec 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 bir GET isteği gönderin.

curl localhost:4400/emulators

Sonuç, çalışan tüm emülatörleri ve bunların ana makine/bağlantı noktası yapılandırması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 işlevi tetikleyicilerini etkinleştirme / devre dışı bırakma

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

Yerel işlev tetikleyicilerini geçici olarak devre dışı bırakmak için Emulator Hub'ın /functions/disableBackgroundTriggers uç noktasına 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ılan yerel işlev tetikleyicilerini etkinleştirmek için Emulator Hub'ın /functions/enableBackgroundTriggers uç noktasına 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
}

Emulator SDK entegrasyonları

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

İstemci SDK'sının 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

Admin SDK'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