Cloud Functions با Firebase Hosting جفت کنید تا محتوای پویای خود را تولید و ارائه دهید یا APIهای REST را به عنوان میکروسرویس بسازید.
Cloud Functions for Firebase به شما امکان میدهد تا به طور خودکار کد بکاند را در پاسخ به درخواستهای HTTPS اجرا کنید. کد شما در فضای ابری گوگل ذخیره میشود و در یک محیط مدیریتشده اجرا میشود. نیازی به مدیریت و مقیاسبندی سرورهای خودتان نیست.
برای مثال، موارد استفاده و نمونههایی برای Cloud Functions یکپارچه با Firebase Hosting ، از نمای کلی بدون سرور ما دیدن کنید.
Cloud Functions به Firebase Hosting متصل کنید
این بخش یک مثال عملی برای اتصال یک تابع به Firebase Hosting ارائه میدهد.
توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، میتوانید تنظیمات حافظه پنهان خود را به صورت اختیاری تنظیم کنید.
مرحله 1: تنظیم Cloud Functions
مطمئن شوید که آخرین نسخه Firebase CLI را دارید و Firebase Hosting مقداردهی اولیه کردهاید.
برای دستورالعملهای دقیق در مورد نصب CLI و مقداردهی اولیه Hosting ، به راهنمای شروع به کار Hosting مراجعه کنید.
مطمئن شوید که Cloud Functions را تنظیم کردهاید:
اگر قبلاً Cloud Functions تنظیم کردهاید، میتوانید به مرحله ۲: ایجاد و آزمایش یک تابع HTTPS بروید.
اگر Cloud Functions تنظیم نکردهاید :
با اجرای دستور زیر از ریشه دایرکتوری پروژه خود، Cloud Functions مقداردهی اولیه کنید:
firebase init functions
وقتی از شما خواسته شد، جاوا اسکریپت را انتخاب کنید (این مثال عملی از JS استفاده میکند).
بررسی کنید که یک دایرکتوری
functionsدر دایرکتوری پروژه محلی خود داشته باشید (که توسط دستور Firebase که اجرا کردید ایجاد شده است). این دایرکتوریfunctionsجایی است که کد مربوط به Cloud Functions در آن قرار دارد.
مرحله ۲: یک تابع HTTPS برای سایت Hosting خود ایجاد و آزمایش کنید
/functions/index.jsدر ویرایشگر مورد علاقه خود باز کنید.محتویات فایل را با کد زیر جایگزین کنید.
این کد یک تابع HTTPS (به نام
bigben) ایجاد میکند که به درخواستهای HTTPS با یکBONGبرای هر ساعت از روز، درست مانند یک ساعت، پاسخ میدهد.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 آزمایش کنید.
از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:
firebase emulators:start
از طریق URL محلی که توسط CLI برگردانده میشود، به تابع دسترسی پیدا کنید، برای مثال:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
برای کسب اطلاعات بیشتر در مورد درخواستهای HTTPS، به مستندات Cloud Functions مراجعه کنید.
مرحله بعدی به شما نحوه دسترسی به این تابع HTTPS از طریق URL Firebase Hosting آموزش میدهد تا بتوانید محتوای پویا را برای سایت میزبانی شده توسط Firebase خود تولید کنید.
مرحله ۳: درخواستهای HTTPS را به تابع خود هدایت کنید
با استفاده از قوانین بازنویسی ، میتوانید درخواستهایی را که با الگوهای خاص مطابقت دارند، به یک مقصد واحد هدایت کنید. مراحل زیر به شما نشان میدهد که چگونه میتوانید تمام درخواستها را از مسیر ../bigben در سایت Hosting خود برای اجرای تابع bigben هدایت کنید.
فایل
firebase.jsonخود را باز کنید.پیکربندی
rewriteزیر را در بخشhostingاضافه کنید:"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، تأیید کنید که تغییر مسیر شما مطابق انتظار کار میکند.
از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:
firebase emulators:start
به آدرس اینترنتی (URL) سایت خود که توسط CLI برگردانده میشود (معمولاً
localhost:5000) که به صورت محلی میزبانی میشود، مراجعه کنید، اما URL را باbigbenبه صورت زیر اضافه کنید:http://localhost:5000/bigben
روی تابع و عملکرد آن برای سایت خود تکرار کنید. از شبیهسازهای Firebase برای آزمایش این تکرارها استفاده کنید.
اگر
regionاز یک بلوکfunctionدر پیکربندیhosting.rewritesحذف شود، رابط خط فرمان Firebase CLI) سعی میکند به طور خودکار region را از کد منبع تابع تشخیص دهد که اگر مشخص نشده باشد، به طور پیشفرض رویus-central1قرار میگیرد. اگر کد منبع تابع در دسترس نباشد، رابط خط فرمان سعی میکند region را از تابع مستقر شده تشخیص دهد. اگر تابع در چندین region باشد، رابط خط فرمان نیاز دارد کهregionدر پیکربندیhosting.rewritesمشخص شود.
ویژگی
pinTagفقط در Cloud Functions for Firebase (نسل دوم) موجود است. با این ویژگی، میتوانید اطمینان حاصل کنید که هر تابع برای تولید محتوای پویای سایت شما با منابع Hosting استاتیک و پیکربندی Hosting شما همگامسازی میشود. همچنین، این ویژگی به شما امکان میدهد بازنویسیهای خود را در توابع در کانالهای پیشنمایش Hosting پیشنمایش کنید.اگر
"pinTag": trueرا به یک بلوکfunctionازhosting.rewritesاضافه کنید، تابع "pinned" به همراه منابع و پیکربندی ثابت Hosting شما، حتی هنگام اجرای، مستقر خواهد شد. اگر نسخهای از سایت خود را به حالت اولیه برگردانید، تابع "pinned" نیز به حالت اولیه برمیگردد.firebase deploy --only hosting این ویژگی به برچسبهای Cloud Run متکی است که محدودیت ۱۰۰۰ برچسب در هر سرویس و ۲۰۰۰ برچسب در هر منطقه دارند. این بدان معناست که پس از صدها بار نصب، قدیمیترین نسخههای یک سایت ممکن است از کار بیفتند.
برای بهترین عملکرد، با انتخاب یکی از مناطق زیر، وظایف خود را با Hosting در یک مکان قرار دهید:
-
us-west1 -
us-central1 -
us-east1 -
europe-west1 -
asia-east1
برای جزئیات بیشتر در مورد قوانین بازنویسی، به صفحه پیکربندی Hosting مراجعه کنید. همچنین میتوانید در مورد ترتیب اولویت پاسخها برای پیکربندیهای مختلف Hosting اطلاعات کسب کنید.
توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، میتوانید تنظیمات حافظه پنهان خود را به صورت اختیاری تنظیم کنید.
مرحله ۴: تابع خود را مستقر کنید
زمانی که تابع شما در شبیهساز مطابق میل شما کار کرد، میتوانید آن را مستقر، آزمایش و با منابع پروژه واقعی اجرا کنید. اکنون زمان مناسبی برای بررسی تنظیم گزینههای زمان اجرا برای کنترل رفتار مقیاسپذیری توابعی است که در محیط عملیاتی اجرا میشوند.
با اجرای دستور زیر از ریشه دایرکتوری پروژه محلی خود، تابع و همچنین محتوای Hosting و پیکربندی خود را در سایت خود مستقر کنید:
firebase deploy --only functions,hosting
از طریق آدرسهای اینترنتی زیر به سایت زنده و عملکرد خود دسترسی پیدا کنید:
زیر دامنههای فایربیس شما:
PROJECT_ID .web.app/bigbenوPROJECT_ID .firebaseapp.com/bigbenهر دامنه سفارشی متصل:
CUSTOM_DOMAIN /bigben
استفاده از یک چارچوب وب
شما میتوانید از چارچوبهای وب، مانند Express.js ، در Cloud Functions برای ارائه محتوای پویای برنامه خود و نوشتن آسانتر برنامههای وب پیچیده استفاده کنید.
بخش زیر یک مثال عملی برای استفاده از Express.js با Firebase Hosting و Cloud Functions ارائه میدهد.
با اجرای دستور زیر از دایرکتوری
functionsExpress.js را در پروژه محلی خود نصب کنید:npm install express --save
فایل
/functions/index.jsخود را باز کنید، سپس Express.js را وارد و مقداردهی اولیه کنید:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
دو نقطه پایانی زیر را اضافه کنید:
اولین نقطه پایانی را برای ارائه فهرست وبسایت خود در
/اضافه کنید.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>`); });و یک نقطه پایانی دیگر برای بازگرداندن تعداد
BONGبه عنوان یک API، در قالب JSON، تحت/api: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 را به عنوان یک تابع HTTPS صادر کنید:
exports.app = functions.https.onRequest(app);
در فایل
firebase.jsonخود، تمام درخواستها را به تابعappهدایت کنید. این بازنویسی به Express.js اجازه میدهد تا زیرمسیر متفاوتی را که پیکربندی کردهایم (در این مثال،/و/api) ارائه دهد.{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
افزودن میانافزار
در ادامهی مثالمان، حالا که از Express.js استفاده میکنید، میتوانید میانافزار Express.js را به روش معمول اضافه کنید. برای مثال، میتوانید درخواستهای CORS را در نقاط انتهایی ما فعال کنید.
میانافزار
corsرا با اجرای دستور زیر نصب کنید:npm install --save cors
فایل
/functions/index.jsخود را باز کنید، سپسcorsبه برنامه Express.js خود اضافه کنید، مانند این:const cors = require('cors')({origin: true}); app.use(cors);
برای کسب اطلاعات بیشتر در مورد استفاده از Firebase با برنامههای Express و ماژولهای میانافزار، به مستندات Cloud Functions مراجعه کنید.
مراحل بعدی
برای محتوای پویای خود در یک CDN جهانی ، قابلیت ذخیرهسازی (caching) راهاندازی کنید .
با استفاده از Firebase Admin SDK با سایر سرویسهای Firebase تعامل داشته باشید.
قیمتگذاری و سهمیهها و محدودیتهای مربوط به Cloud Functions را بررسی کنید.