قم بإقران وظائف السحابة مع استضافة Firebase لإنشاء المحتوى الديناميكي الخاص بك وتقديمه أو إنشاء واجهات برمجة تطبيقات REST كخدمات صغيرة.
تتيح لك وظائف السحابة لـ Firebase تشغيل التعليمات البرمجية الخلفية تلقائيًا استجابةً لطلبات HTTPS. يتم تخزين شفرتك في سحابة Google وتشغيلها في بيئة مُدارة. ليست هناك حاجة لإدارة وتوسيع نطاق الخوادم الخاصة بك.
على سبيل المثال ، حالات الاستخدام والعينات للوظائف السحابية المدمجة مع Firebase Hosting ، تفضل بزيارة نظرة عامة على الخادم بدون خادم .
قم بتوصيل وظائف السحابة باستضافة Firebase
يقدم هذا القسم مثالًا تفصيليًا لتوصيل إحدى الوظائف باستضافة Firebase.
لاحظ أنه لتحسين أداء عرض المحتوى الديناميكي ، يمكنك ضبط إعدادات ذاكرة التخزين المؤقت اختياريًا.
الخطوة 1: إعداد وظائف السحابة
تأكد من أن لديك أحدث إصدار من Firebase CLI وأنك قمت بتهيئة Firebase Hosting.
للحصول على إرشادات مفصلة حول تثبيت CLI وتهيئة الاستضافة ، راجع دليل البدء للاستضافة .
تأكد من قيامك بإعداد وظائف السحابة:
إذا قمت بالفعل بإعداد وظائف السحابة ، فيمكنك المتابعة إلى الخطوة 2: إنشاء وظيفة HTTPS واختبارها .
إذا لم تقم بإعداد وظائف السحابة:
قم بتهيئة وظائف السحابة عن طريق تشغيل الأمر التالي من جذر دليل المشروع الخاص بك:
firebase init functions
عند المطالبة ، حدد JavaScript (يستخدم هذا المثال الإرشادي JS).
تحقق من وجود دليل
functions
في دليل المشروع المحلي (تم إنشاؤه بواسطة أمر Firebase الذي قمت بتشغيله للتو). دليلfunctions
هذا هو المكان الذي يوجد فيه رمز وظائف السحابة.
الخطوة 2: إنشاء واختبار وظيفة HTTPS لموقع الاستضافة الخاص بك
افتح
/functions/index.js
في المحرر المفضل لديك.استبدل محتويات الملف بالرمز التالي.
ينشئ هذا الرمز وظيفة HTTPS (تسمى
bigben
) التي ترد على طلبات HTTPSBONG
لكل ساعة من اليوم ، تمامًا مثل الساعة.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 المحلي الذي يعرضه CLI ، على سبيل المثال:
.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 المستضاف محليًا لموقعك كما تم إرجاعه بواسطة CLI (عادةً
localhost:5000
) ، ولكن قم بإلحاق عنوان URL بـbigben
، مثل:http://localhost:5000/bigben
كرر وظيفتك ووظائفها لموقعك. استخدم محاكيات Firebase لاختبار هذه التكرارات.
إذا تم حذف
region
من كتلةfunction
لتكوينhosting.rewrites
، فإن Firebase CLI يحاول تلقائيًا اكتشاف المنطقة من كود مصدر الوظيفة الذي ، إذا لم يتم تحديده ، يتم تعيينه افتراضيًا إلىus-central1
. إذا كان كود مصدر الوظيفة غير متاح ، يحاول CLI اكتشاف المنطقة من الوظيفة المنشورة. إذا كانت الوظيفة في مناطق متعددة ، فإن واجهة سطر الأوامر (CLI) تتطلب تحديدregion
في تهيئةhosting.rewrites
.
ميزة
pinTag
متاحة فقط في Cloud Functions for Firebase (الجيل الثاني). باستخدام هذه الميزة ، يمكنك التأكد من أن كل وظيفة لإنشاء المحتوى الديناميكي لموقعك تظل متزامنة مع موارد الاستضافة الثابتة وتهيئة الاستضافة. أيضًا ، تتيح لك هذه الميزة معاينة عمليات إعادة الكتابة الخاصة بك للوظائف على قنوات معاينة الاستضافة.إذا أضفت
"pinTag": true
إلى كتلةfunction
لتكوينhosting.rewrites
، فسيتم نشر الوظيفة "المثبتة" جنبًا إلى جنب مع موارد الاستضافة الثابتة وتكوينها ، حتى عند تشغيل. إذا استعدت إصدارًا من موقعك ، فسيتم أيضًا التراجع عن وظيفة "التثبيت".
firebase deploy --only hosting تعتمد هذه الميزة على علامات Cloud Run ، والتي لها حد 1000 علامة لكل خدمة و 2000 علامة لكل منطقة. هذا يعني أنه بعد مئات عمليات النشر ، قد تتوقف الإصدارات الأقدم من الموقع عن العمل.
قم بزيارة صفحة تهيئة الاستضافة للحصول على مزيد من التفاصيل حول قواعد إعادة الكتابة . يمكنك أيضًا التعرف على ترتيب أولويات الاستجابات لتكوينات الاستضافة المختلفة.
لاحظ أنه لتحسين أداء عرض المحتوى الديناميكي ، يمكنك ضبط إعدادات ذاكرة التخزين المؤقت اختياريًا.
الخطوة 4: نشر وظيفتك
بمجرد أن تعمل وظيفتك على النحو المطلوب في المحاكي ، يمكنك المتابعة لنشرها واختبارها وتشغيلها باستخدام موارد المشروع الحقيقية . هذا هو الوقت المناسب للنظر في تعيين خيارات وقت التشغيل للتحكم في سلوك القياس للوظائف التي تعمل في الإنتاج.
انشر وظيفتك بالإضافة إلى محتوى الاستضافة الخاص بك وقم بتكوين موقعك عن طريق تشغيل الأمر التالي من جذر دليل المشروع المحلي الخاص بك:
firebase deploy --only functions,hosting
قم بالوصول إلى موقعك المباشر ووظيفتك على عناوين URL التالية:
نطاقات Firebase الفرعية الخاصة بك:
PROJECT_ID .web.app/bigben
وPROJECT_ID .firebaseapp.com/bigben
أي مجالات مخصصة متصلة:
CUSTOM_DOMAIN /bigben
استخدم إطار عمل الويب
يمكنك استخدام أطر عمل الويب ، مثل Express.js ، في وظائف السحابة لتقديم المحتوى الديناميكي لتطبيقك وكتابة تطبيقات الويب المعقدة بسهولة أكبر.
يوفر القسم التالي مثالًا تفصيليًا لاستخدام Express.js مع Firebase Hosting and Cloud Functions.
قم بتثبيت 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
كواجهة برمجة تطبيقات ، بتنسيق 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 .
راجع الأسعار والحصص وحدود وظائف السحابة.