Dinamik içeriğinizi oluşturup sunmak veya REST API'lerini mikro hizmetler olarak oluşturmak için Bulut İşlevlerini Firebase Hosting ile eşleştirin.
Firebase için Cloud Functions, HTTPS isteklerine yanıt olarak arka uç kodunu otomatik olarak çalıştırmanıza olanak tanır. Kodunuz Google'ın bulutunda depolanır ve yönetilen bir ortamda çalışır. Kendi sunucularınızı yönetmenize ve ölçeklendirmenize gerek yok.
Örneğin, Firebase Hosting ile entegre Bulut İşlevlerine yönelik kullanım senaryoları ve örnekleri için sunucusuz genel bakış sayfamızı ziyaret edin.
Bulut İşlevlerini Firebase Hosting'e Bağlayın
Bu bölümde, bir işlevi Firebase Hosting'e bağlamak için ayrıntılı bir örnek verilmektedir.
Dinamik içerik sunma performansını artırmak için isteğe bağlı olarak önbellek ayarlarınızı ayarlayabileceğinizi unutmayın.
1. Adım: Cloud Functions'ı ayarlayın
Firebase CLI'nin en son sürümüne sahip olduğunuzdan ve Firebase Hosting'i başlattığınızdan emin olun.
CLI'yi yükleme ve Barındırma'yı başlatma hakkında ayrıntılı talimatlar için Barındırma için Başlangıç kılavuzuna bakın.
Cloud Functions'ı kurduğunuzdan emin olun:
Cloud Functions'ı zaten ayarladıysanız 2. Adım: Bir HTTPS işlevi oluşturma ve test etme adımına geçebilirsiniz.
Cloud Functions'ı kurmadıysanız :
Proje dizininizin kökünden aşağıdaki komutu çalıştırarak Cloud Functions'ı başlatın:
firebase init functions
İstendiğinde JavaScript'i seçin (bu ayrıntılı örnekte JS kullanılmaktadır).
Yerel proje dizininizde (az önce çalıştırdığınız Firebase komutu tarafından oluşturulan) bir
functions
dizininiz olup olmadığını kontrol edin. Bufunctions
dizini, Bulut İşlevleri kodunun bulunduğu yerdir.
2. Adım: Barındırma siteniz için bir HTTPS işlevi oluşturun ve test edin
Favori düzenleyicinizde
/functions/index.js
dosyasını açın.Dosyanın içeriğini aşağıdaki kodla değiştirin.
Bu kod, HTTPS isteklerine tıpkı bir saat gibi günün her saati için bir
BONG
ile yanıt veren bir HTTPS işlevi (bigben
adında) oluşturur.const functions = require('firebase-functions'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
Firebase Local Emulator Suite'i kullanarak işlevlerinizi yerel olarak test edin.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:
firebase emulators:start
İşleve CLI tarafından döndürülen yerel URL aracılığıyla erişin; örneğin:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
HTTPS istekleri hakkında daha fazla bilgi edinmek için Bulut İşlevleri belgelerini ziyaret edin.
Bir sonraki adım, Firebase tarafından barındırılan siteniz için dinamik içerik oluşturabilmesi amacıyla bu HTTPS işlevine bir Firebase Barındırma URL'sinden nasıl erişeceğiniz konusunda size yol gösterir.
3. Adım: HTTPS isteklerini işlevinize yönlendirin
Yeniden yazma kurallarıyla , belirli kalıplarla eşleşen istekleri tek bir hedefe yönlendirebilirsiniz. Aşağıdaki adımlar, bigben
işlevini yürütmek için Hosting sitenizdeki ../bigben
yolundaki tüm istekleri nasıl yönlendireceğinizi gösterir.
firebase.json
dosyanızı açın.hosting
bölümünün altına aşağıdakirewrite
yapılandırmasını ekleyin:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }
Firebase emülatörleriyle tekrar test ederek yönlendirmenizin beklendiği gibi çalıştığını doğrulayın.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:
firebase emulators:start
Siteniz için CLI tarafından döndürülen yerel olarak barındırılan URL'yi ziyaret edin (genellikle
localhost:5000
), ancak URL'yibigben
ile şu şekilde ekleyin:http://localhost:5000/bigben
Siteniz için işlevinizi ve işlevselliğini yineleyin. Bu yinelemeleri test etmek için Firebase emülatörlerini kullanın.
hosting.rewrites
yapılandırmasının birfunction
bloğundanregion
çıkarılırsa Firebase CLI, bölgeyi işlevin kaynak kodundan otomatik olarak algılamaya çalışır; belirtilmediği takdirde varsayılan olarakus-central1
olur. İşlevin kaynak kodu kullanılamıyorsa CLI, dağıtılan işlevden bölgeyi algılamaya çalışır. İşlev birden fazla bölgedeyse CLI,region
hosting.rewrites
yapılandırmasında belirtilmesini gerektirir.
pinTag
özelliği yalnızca Cloud Functions for Firebase'de (2. nesil) mevcuttur. Bu özellik sayesinde, sitenizin dinamik içeriğini oluşturmaya yönelik her işlevin, statik Hosting kaynaklarınızla ve Hosting yapılandırmanızla senkronize tutulmasını sağlayabilirsiniz. Ayrıca bu özellik, Hosting önizleme kanallarındaki işlevlere yönelik yeniden yazma işlemlerinizi önizlemenize olanak tanır.
hosting.rewrites
yapılandırmasının birfunction
bloğuna"pinTag": true
eklerseniz, "sabitlenmiş" işleviçalıştırırken bile statik Hosting kaynaklarınız ve yapılandırmanızla birlikte dağıtılacaktır. Sitenizin bir sürümünü geri alırsanız "sabitlenmiş" işlevi de geri alınır.
firebase deploy --only hosting Bu özellik, hizmet başına 1000 etiket ve bölge başına 2000 etiket sınırına sahip Cloud Run etiketlerini temel alır. Bu, yüzlerce dağıtımdan sonra bir sitenin en eski sürümlerinin çalışmayı durdurabileceği anlamına gelir.
En iyi performansı elde etmek için aşağıdaki bölgelerden birini seçerek işlevlerinizi Hosting ile aynı yerde konumlandırın:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Yeniden yazma kuralları hakkında daha fazla ayrıntı için Barındırma yapılandırma sayfasını ziyaret edin. Ayrıca çeşitli Barındırma yapılandırmalarına yönelik yanıtların öncelik sırası hakkında da bilgi edinebilirsiniz.
Dinamik içerik sunma performansını artırmak için isteğe bağlı olarak önbellek ayarlarınızı ayarlayabileceğinizi unutmayın.
4. Adım: İşlevinizi dağıtın
İşleviniz öykünücüde istendiği gibi çalışmaya başladıktan sonra onu gerçek proje kaynaklarıyla dağıtmaya, test etmeye ve çalıştırmaya devam edebilirsiniz. Bu, üretimde çalışan işlevler için ölçeklendirme davranışını denetlemek üzere çalışma zamanı seçeneklerini ayarlamayı düşünmek için iyi bir zamandır.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırarak işlevinizin yanı sıra Barındırma içeriğinizi de dağıtın ve sitenize yapılandırın:
firebase deploy --only functions,hosting
Yayındaki sitenize ve işlevinize aşağıdaki URL'lerden erişin:
Firebase alt alan adlarınız:
PROJECT_ID .web.app/bigben
vePROJECT_ID .firebaseapp.com/bigben
Bağlı tüm özel alanlar :
CUSTOM_DOMAIN /bigben
Bir web çerçevesi kullanın
Uygulamanızın dinamik içeriğini sunmak ve karmaşık web uygulamalarını daha kolay yazmak için Cloud Functions'ta Express.js gibi web çerçevelerini kullanabilirsiniz.
Aşağıdaki bölümde Express.js'yi Firebase Hosting ve Cloud Functions ile kullanmaya yönelik bir örnek verilmektedir.
functions
dizininizden aşağıdaki komutu çalıştırarak Express.js'yi yerel projenize yükleyin:npm install express --save
/functions/index.js
dosyanızı açın, ardından Express.js'yi içe aktarın ve başlatın:const functions = require('firebase-functions'); const express = require('express'); const app = express();
Aşağıdaki iki uç noktayı ekleyin:
Web sitemizin dizinini
/
konumuna sunacak ilk uç noktayı ekleyin.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
Ve
/api
altındaBONG
sayısını JSON formatında bir API olarak döndürmek için başka bir uç nokta:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Express.js uygulamasını HTTPS işlevi olarak dışa aktarın:
exports.app = functions.https.onRequest(app);
firebase.json
dosyanızda tüm istekleriapp
işlevine yönlendirin. Bu yeniden yazma, Express.js'nin yapılandırdığımız farklı alt yola (bu örnekte/
ve/api
) hizmet vermesine olanak tanır.{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Ara yazılım ekle
Örneğimize devam edersek, artık Express.js'yi kullandığınıza göre, Express.js ara yazılımını normal şekilde ekleyebilirsiniz. Örneğin uç noktalarımızda CORS isteklerini etkinleştirebilirsiniz.
Aşağıdaki komutu çalıştırarak
cors
ara yazılımını yükleyin:npm install --save cors
/functions/index.js
dosyanızı açın, ardından Express.js uygulamanıza şu şekildecors
ekleyin:const cors = require('cors')({origin: true}); app.use(cors);
Firebase'i Express uygulamaları ve ara katman yazılımı modülleriyle kullanma hakkında daha fazla bilgi edinmek için Bulut İşlevleri belgelerini ziyaret edin.
Sonraki adımlar
Küresel bir CDN'de dinamik içeriğiniz için önbelleğe almayı ayarlayın .
Firebase Admin SDK'yı kullanarak diğer Firebase hizmetleriyle etkileşim kurun.
Cloud Functions'ın fiyatlandırmasını , kotalarını ve sınırlarını inceleyin.