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:
Emulator Suite'i yüklemek için:
- 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
- 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
- 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 veyafirebase.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
veyafirebase 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çinfirebase projects:list
simgesini kullanın. - Kurallar birim testleri Proje kimliği genellikle Kurallar Birim Testi kitaplığı yöntemlerine
initializeTestEnvironment
veyainitializeTestApp
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.
|
||||||||||||||
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.
|
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
Yukarıda açıklanan |
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çinemulators:start
veyaemulators: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 |