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 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ış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
functionsdizininin olup olmadığını kontrol edin. Bufunctionsdizini, Cloud Functions kodunun bulunduğu yerdir.
2. adım: Hosting siteniz için bir HTTPS işlevi oluşturun ve test edin
/functions/index.jsdosyası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
BONGile HTTPS isteklerine yanıt veren bir HTTPS işlevi (bigbenadlı) 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.jsondosyanızı açın.hostingbölümüne aşağıdakirewriteyapı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'yebigbenekleyin. Ö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-west1us-central1us-east1europe-west1asia-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şlevinizin yanı sıra 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/bigbenvePROJECT_ID.firebaseapp.com/bigbenBağlı tüm özel alanlar:
CUSTOM_DOMAIN/bigben
Web çerçevesi kullanma
Uygulamanızın dinamik içeriğine hizmet vermek 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.
functionsdizininizden aşağıdaki komutu çalıştırarak Express.js'yi yerel projenize yükleyin:npm install express --save
/functions/index.jsdosyanı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,
BONGsayısını JSON biçiminde API olarak döndüren başka bir uç nokta da vardır. Bu uç nokta/apialtı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.jsondosyanızda tüm istekleriappiş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
corsara yazılımını yükleyin:npm install --save cors
/functions/index.jsdosyanızı açın, ardından Express.js uygulamanızacorsekleyin. Ö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 Functions dokümanlarını 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ı inceleyin.