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:
Emulator Suite'i yüklemek için:
- Firebase CLI'yı 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
- 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
- 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 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ı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ı 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 |
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 ç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 gibi durumlarda, emülatör örnekleri ayrı bir ortamda çalışır.
Emulator Suite UI, farklı ürün emülatörleri ve belirli bir emülatörün tüm çalışan örnekleri, her durumda doğru şekilde iletişim kurabilmek için tüm emülatör çağrıları için tek bir proje kimliği ayarlamak genellikle iyi bir uygulamadır.
Local Emulator Suite, ortamda birden fazla proje kimliği algıladığında uyarılar 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. Proje kimliği varsayılan olarak başlangıçta
firebase init
veyafirebase use
ile seçilen projeden alınır. Proje listesini görüntülemek (ve hangisinin seçildiğini görmek) içinfirebase projects:list
kısayolunu kullanın. - Kural birim testleri. Proje kimliği genellikle Kurallar Birim Testi kitaplığı yöntemleri
initializeTestEnvironment
veyainitializeTestApp
ç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.
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ü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, 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 ve Firebase CLI'nin Emulator Suite UI gibi diğer bölümlerini etkilemez.
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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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.
|
||||||||||||
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ının çalışması tamamlandığında emülatör işlemleri otomatik olarak durur.
|
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.
emülatörler:dışa aktarma 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
Yukarıda açıklanan |
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ç sorun 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çinemulators:start
veyaemulators: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 hizmetini kullanı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
'yi ç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 tutulmasını sağlayın.
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ö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 açıklayan bir JSON nesnesi olur.
{
"enabled": false
}
Devre dışı bırakıldıktan sonra yerel işlev tetikleyicilerini etkinleştirmek için Emülatör 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 gösteren 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'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 |
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 |