Dinamik içeriklerinizi oluşturup sunmak veya REST API'leri mikro hizmetler olarak oluşturmak için Cloud Functions ile Firebase Hosting'yi eşleştirin.
Cloud Functions for Firebase, HTTPS isteklerine göre arka uç kodunu otomatik olarak çalıştırmanızı sağlar. Kodunuz, Google'ın bulutunda depolanır ve yönetilen bir ortamda çalıştırılır. Kendi sunucularınızı yönetmeniz ve ölçeklendirmeniz gerekmez.
Cloud Functions ile entegre edilmiş Firebase Hosting için örnek kullanım alanları ve örnekler için sunucusuz genel bakış sayfamızı ziyaret edin.
Cloud Functions cihazını Firebase Hosting ağına bağlama
Bu bölümde, bir işlevi Firebase Hosting'ya bağlama konusunda adım adım bir örnek verilmektedir.
Dinamik içerik yayınlama performansını artırmak için önbellek ayarlarınızı isteğe bağlı olarak ayarlayabilirsiniz.
1. adım: Cloud Functions kurulumunu yapın
Firebase CLI'nın en son sürümüne sahip olduğunuzdan ve Firebase Hosting'ı başlattığınızdan emin olun.
CLI'yı yükleme ve Hosting'ı başlatma hakkında ayrıntılı talimatlar için Hosting'ı Kullanmaya Başlama Kılavuzu'na bakın.
Cloud Functions'yı ayarladığınızdan emin olun:
Cloud Functions'ı daha önce ayarladıysanız 2. adım: HTTPS işlevi oluşturma ve test etme bölümüne geçebilirsiniz.
Cloud Functions'ı ayarlamadıysanız:
Proje dizininizin kökünden aşağıdaki komutu çalıştırarak Cloud Functions'yı başlatın:
firebase init functions
İstendiğinde JavaScript'i seçin (bu adım adım açıklama örneğinde JS kullanılmaktadır).
Yerel proje dizininizde (az önce çalıştırdığınız Firebase komutuyla oluşturulan) bir
functions
dizininin olup olmadığını kontrol edin. Bufunctions
dizini, Cloud Functions kodunun bulunduğu yerdir.
2. adım: Hosting siteniz için bir HTTPS işlevi oluşturun ve test edin
/functions/index.js
dosyasını favori düzenleyicinizde açın.Dosyanın içeriğini aşağıdaki kodla değiştirin.
Bu kod, günün her saati için saat gibi
BONG
ile HTTPS isteklerine yanıt veren bir HTTPS işlevi (bigben
adlı) oluşturur.const functions = require('firebase-functions/v1'); 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 kullanarak işlevlerinizi yerel olarak test edin.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:
firebase emulators:start
CLI tarafından döndürülen yerel URL üzerinden işleve erişin. Örneğin:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
HTTPS istekleri hakkında daha fazla bilgi edinmek için Cloud Functions belgelerini ziyaret edin.
Bir sonraki adımda, bu HTTPS işlevine bir Firebase Hosting URL'sinden nasıl erişeceğiniz açıklanmaktadır. Böylece, Firebase'de barındırılan siteniz için dinamik içerik oluşturabilirsiniz.
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ımlarda, Hosting sitenizdeki ../bigben
yolundan gelen tüm istekleri bigben
işlevini yürütecek şekilde nasıl yönlendireceğiniz gösterilmektedir.
firebase.json
dosyanızı açın.rewrite
bölümünün altına aşağıdakihosting
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
CLI tarafından döndürülen sitenizin yerel olarak barındırılan URL'sini (genellikle
localhost:5000
) ziyaret edin ancak URL'yebigben
ekleyin. Örneğin:http://localhost:5000/bigben
İşlevinizi ve sitenizdeki işlevselliğini yineleyin. Bu yinelemeleri test etmek için Firebase emülatörlerini kullanın.
En iyi performansı elde etmek için aşağıdaki bölgelerden birini seçerek işlevlerinizi Hosting ile birlikte konumlandırın:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Hosting yapılandırma sayfasını ziyaret ederek yeniden yazma kuralları hakkında daha fazla bilgi edinin. Ayrıca, çeşitli Hosting yapılandırmaları için yanıtların öncelik sırası hakkında da bilgi edinebilirsiniz.
Dinamik içerik yayınlama performansını artırmak için önbellek ayarlarınızı isteğe bağlı olarak ayarlayabilirsiniz.
4. adım: İşlevinizi dağıtın
İşleviniz emülatörde istediğiniz gibi çalıştıktan sonra gerçek proje kaynaklarıyla dağıtma, test etme ve çalıştırma işlemlerine geçebilirsiniz. Bu, üretimde çalışan işlevler için ölçeklendirme davranışını kontrol etmek üzere çalışma zamanı seçeneklerini ayarlamak için iyi bir zamandır.
Aşağıdaki komutu yerel proje dizininizin kökünden çalıştırarak işlevinizi, Hosting içeriğinizi ve yapılandırmanızı sitenize dağıtın:
firebase deploy --only functions,hosting
Aşağıdaki URL'lerden canlı sitenize ve işlevinize erişin:
Firebase alt alanlarınız:
PROJECT_ID.web.app/bigben
vePROJECT_ID.firebaseapp.com/bigben
Bağlı tüm özel alanlar:
CUSTOM_DOMAIN/bigben
Web çerçevesi kullanma
Uygulamanızın dinamik içeriğine hizmet etmek ve karmaşık web uygulamalarını daha kolay yazmak için Cloud Functions'da Express.js gibi web çerçevelerini kullanabilirsiniz.
Aşağıdaki bölümde, Express.js'nin Firebase Hosting ve Cloud Functions ile birlikte kullanımına ilişkin adım adım açıklamalı 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ıp başlatın:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
Aşağıdaki iki uç noktayı ekleyin:
Web sitemizin dizinini
/
adresinde yayınlamak için 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>`); });
Ayrıca,
BONG
sayısını JSON biçiminde API olarak döndüren başka bir uç nokta da vardır. Bu uç nokta/api
altında yer alır: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 işlemi, Express.js'nin yapılandırdığımız farklı alt yolu (bu örnekte/
ve/api
) sunmasına olanak tanır.{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Ara katman yazılımı ekleme
Örneğimize devam edersek artık Express.js kullandığınız için 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ızacors
ekleyin. Örneğin:const cors = require('cors')({origin: true}); app.use(cors);
Express uygulamaları ve ara katman yazılımı modülleriyle Firebase'i kullanma hakkında daha fazla bilgi edinmek için Cloud Functionsdokümanları 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 için fiyatlandırma ile kotalar ve sınırlar başlıklı makaleleri inceleyin.