قم بإقران الوظائف السحابية مع استضافة Firebase لإنشاء المحتوى الديناميكي الخاص بك وخدمته أو إنشاء واجهات برمجة تطبيقات REST كخدمات صغيرة.
تتيح لك Cloud Functions for Firebase تشغيل التعليمات البرمجية الخلفية تلقائيًا استجابةً لطلبات HTTPS. يتم تخزين التعليمات البرمجية الخاصة بك في سحابة Google وتشغيلها في بيئة مُدارة. ليست هناك حاجة لإدارة وتوسيع نطاق الخوادم الخاصة بك.
على سبيل المثال، استخدم حالات وعينات للوظائف السحابية المدمجة مع استضافة Firebase، تفضل بزيارة النظرة العامة بدون خادم .
ربط الوظائف السحابية باستضافة Firebase
يقدم هذا القسم مثالاً تفصيليًا لتوصيل إحدى الوظائف باستضافة Firebase.
لاحظ أنه لتحسين أداء تقديم المحتوى الديناميكي، يمكنك اختياريًا ضبط إعدادات ذاكرة التخزين المؤقت .
الخطوة 1: إعداد الوظائف السحابية
تأكد من حصولك على أحدث إصدار من Firebase CLI ومن قيامك بتهيئة Firebase Hosting.
للحصول على إرشادات مفصلة حول تثبيت واجهة سطر الأوامر (CLI) وتهيئة الاستضافة، راجع دليل البدء للاستضافة .
تأكد من إعداد وظائف السحابة:
إذا قمت بالفعل بإعداد وظائف السحابة، فيمكنك المتابعة إلى الخطوة 2: إنشاء وظيفة HTTPS واختبارها .
إذا لم تقم بإعداد وظائف السحابة:
قم بتهيئة وظائف السحابة عن طريق تشغيل الأمر التالي من جذر دليل مشروعك:
firebase init functions
عندما يُطلب منك ذلك، حدد JavaScript (يستخدم هذا المثال الإرشادي JS).
تأكد من وجود دليل
functions
في دليل مشروعك المحلي (تم إنشاؤه بواسطة أمر Firebase الذي قمت بتشغيله للتو). دليلfunctions
هذا هو المكان الذي يوجد فيه رمز Cloud Functions.
الخطوة 2: إنشاء واختبار وظيفة HTTPS لموقع الاستضافة الخاص بك
افتح
/functions/index.js
في محررك المفضل.استبدل محتويات الملف بالكود التالي.
يقوم هذا الكود بإنشاء وظيفة HTTPS (تسمى
bigben
) والتي ترد على طلبات HTTPS باستخدامBONG
لكل ساعة من اليوم، تمامًا مثل الساعة.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 .
من جذر دليل المشروع المحلي الخاص بك، قم بتشغيل الأمر التالي:
firebase emulators:start
قم بالوصول إلى الوظيفة عبر عنوان URL المحلي الذي تم إرجاعه بواسطة واجهة سطر الأوامر، على سبيل المثال:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
تفضل بزيارة وثائق Cloud Functions لمعرفة المزيد حول طلبات HTTPS.
ترشدك الخطوة التالية إلى كيفية الوصول إلى وظيفة HTTPS هذه من عنوان URL لاستضافة Firebase حتى تتمكن من إنشاء محتوى ديناميكي لموقعك المستضاف على Firebase.
الخطوة 3: توجيه طلبات HTTPS إلى وظيفتك
باستخدام قواعد إعادة الكتابة ، يمكنك توجيه الطلبات التي تطابق أنماطًا معينة إلى وجهة واحدة. توضح لك الخطوات التالية كيفية توجيه جميع الطلبات من المسار ../bigben
على موقع الاستضافة الخاص بك لتنفيذ وظيفة bigben
.
افتح ملف
firebase.json
الخاص بك.أضف تكوين
rewrite
التالي ضمن قسمhosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } ] }
تأكد من أن عملية إعادة التوجيه الخاصة بك تعمل كما هو متوقع من خلال الاختبار مرة أخرى باستخدام محاكيات Firebase.
من جذر دليل المشروع المحلي الخاص بك، قم بتشغيل الأمر التالي:
firebase emulators:start
قم بزيارة عنوان URL المستضاف محليًا لموقعك كما تم إرجاعه بواسطة سطر الأوامر (عادةً
localhost:5000
)، لكن قم بإلحاق عنوان URL بـbigben
، كما يلي:http://localhost:5000/bigben
كرر على وظيفتك ووظائفها لموقعك. استخدم محاكيات Firebase لاختبار هذه التكرارات.
إذا تم حذف
region
من كتلةfunction
في تكوينhosting.rewrites
، فستحاول واجهة سطر أوامر Firebase اكتشاف المنطقة تلقائيًا من الكود المصدري للوظيفة، والذي إذا لم يتم تحديده، فسيتم تعيينه افتراضيًا علىus-central1
. إذا كان الكود المصدري للوظيفة غير متاح، فستحاول واجهة سطر الأوامر (CLI) اكتشاف المنطقة من الوظيفة المنشورة. إذا كانت الوظيفة في مناطق متعددة، فإن واجهة سطر الأوامر (CLI) تتطلب تحديدregion
في تكوينhosting.rewrites
.
ميزة
pinTag
متاحة فقط في Cloud Functions لـ Firebase (الجيل الثاني). باستخدام هذه الميزة، يمكنك التأكد من أن كل وظيفة لإنشاء المحتوى الديناميكي لموقعك تظل متزامنة مع موارد الاستضافة الثابتة وتكوين الاستضافة. تتيح لك هذه الميزة أيضًا معاينة عمليات إعادة الكتابة الخاصة بك إلى الوظائف الموجودة على استضافة قنوات المعاينة.إذا أضفت
"pinTag": true
إلىfunction
دالة من تكوينhosting.rewrites
، فسيتم نشر الوظيفة "المثبتة" جنبًا إلى جنب مع موارد الاستضافة الثابتة وتكوينها، حتى عند تشغيل. إذا قمت باستعادة نسخة من موقعك، فسيتم أيضًا التراجع عن الوظيفة "المثبتة".
firebase deploy --only hosting تعتمد هذه الميزة على علامات Cloud Run ، والتي يبلغ حدها 1000 علامة لكل خدمة و2000 علامة لكل منطقة. وهذا يعني أنه بعد مئات عمليات النشر، قد تتوقف الإصدارات الأقدم من الموقع عن العمل.
للحصول على أفضل أداء، قم بتوزيع وظائفك مع الاستضافة عن طريق اختيار إحدى المناطق التالية:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
قم بزيارة صفحة تكوين الاستضافة لمزيد من التفاصيل حول قواعد إعادة الكتابة . يمكنك أيضًا التعرف على ترتيب أولويات الاستجابات لتكوينات الاستضافة المختلفة.
لاحظ أنه لتحسين أداء تقديم المحتوى الديناميكي، يمكنك اختياريًا ضبط إعدادات ذاكرة التخزين المؤقت .
الخطوة 4: نشر وظيفتك
بمجرد أن تعمل وظيفتك كما تريد في المحاكي، يمكنك المتابعة لنشرها واختبارها وتشغيلها باستخدام موارد المشروع الحقيقية . يعد هذا هو الوقت المناسب للنظر في تعيين خيارات وقت التشغيل للتحكم في سلوك القياس للوظائف التي تعمل في الإنتاج.
انشر وظيفتك بالإضافة إلى محتوى الاستضافة والتكوين على موقعك عن طريق تشغيل الأمر التالي من جذر دليل المشروع المحلي الخاص بك:
firebase deploy --only functions,hosting
قم بالوصول إلى موقعك المباشر ووظيفتك على عناوين URL التالية:
نطاقات Firebase الفرعية الخاصة بك:
PROJECT_ID .web.app/bigben
وPROJECT_ID .firebaseapp.com/bigben
أي مجالات مخصصة متصلة:
CUSTOM_DOMAIN /bigben
استخدم إطار الويب
يمكنك استخدام أطر عمل الويب، مثل Express.js ، في Cloud Functions لخدمة المحتوى الديناميكي لتطبيقك وكتابة تطبيقات الويب المعقدة بسهولة أكبر.
يوفر القسم التالي مثالاً تفصيليًا لاستخدام Express.js مع استضافة Firebase والوظائف السحابية.
قم بتثبيت Express.js في مشروعك المحلي عن طريق تشغيل الأمر التالي من دليل
functions
الخاص بك:npm install express --save
افتح ملف
/functions/index.js
الخاص بك، ثم قم باستيراد Express.js وتهيئته:const functions = require('firebase-functions'); 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);
تفضل بزيارة وثائق Cloud Functions لمعرفة المزيد حول استخدام Firebase مع تطبيقات Express ووحدات البرامج الوسيطة.
الخطوات التالية
قم بإعداد التخزين المؤقت للمحتوى الديناميكي الخاص بك على شبكة CDN عالمية.
تفاعل مع خدمات Firebase الأخرى باستخدام Firebase Admin SDK .
قم بمراجعة الأسعار والحصص والحدود الخاصة بالوظائف السحابية.