في معظم الحالات، ننصحك باستخدام عمليات النشر التلقائية أو عمليات النشر التي يتم تشغيلها يدويًا من Firebase console. ومع ذلك، قد تحتاج إلى استخدام مسار نشر أكثر تخصيصًا. App Hosting تتوفّر فيها خيارات متعدّدة للنشر المخصّص.
النشر من المصدر
يتيح لك النشر من المصدر إرسال رمز المصدر وإعدادات التطبيق مباشرةً إلى App Hosting بدون الحاجة إلى اتصال دائم بـ GitHub
عند النشر من المصدر، تحمِّل App Hosting رمز المصدر إلى مجموعة تخزين في
Google Cloud Storage، وتنفِّذ أمر إنشاء الإطار في
Cloud Build، وتنشر العناصر المجمّعة إلى Cloud Run و
Cloud CDN. تُستخدَم عملية التصميم نفسها لعمليات نشر المصدر
المحلية وعمليات النشر على GitHub. إذا كان ملف .gitignore متوفّرًا في مشروعك، يتم استبعاد الملفات والمجلدات المُدرَجة فيه من عملية النشر.
يمكنك تفعيل من مصدر محلي باستخدام إما Firebase واجهة سطر الأوامر أو Firebase وحدة التحكّم.
أذونات IAM المطلوبة وإعداد البنية الأساسية
بما أنّ كلاً من واجهة سطر الأوامر في Firebase ووحدة تحكّم Firebase تستخدِمان البنية الأساسية نفسها في الخلفية لتخزين أرشيفات المصدر وإنشائها، تنطبق متطلبات أذونات IAM نفسها على كلتا طريقتَي النشر.
تعتمد المتطلبات الدقيقة على ما إذا كنت تنشر إلى موقع جغرافي (منطقة) معيّن للمرة الأولى أم لا. لمزيد من المعلومات عن الأذونات، يُرجى الاطّلاع على نظرة عامة على Firebase IAM وأذونات خدمة "استضافة التطبيقات" في Firebase.
أذونات الإعداد الأوّلي (أول عملية نشر إلى موقع جغرافي)
عند بدء عملية نشر المصدر المحلي في موقع جغرافي للمشروع للمرة الأولى، يجب أن توفّر Hosting مجموعة تخزين في GCS لتخزين الأرشيفات ومنح Hosting حساب "وكيل خدمة الاستضافة" إذن الوصول إليها. بما أنّ هذه المهام إدارية على مستوى المشروع، تتطلّب أذونات "مالك المشروع" أو "مشرف IAM". لا يمكن للمستخدم الذي لديه دور "محرِّر" أو "مُشاهد" أساسي إجراء هذا الإعداد الأوّلي وسيتم حظره.
تشمل أذونات الإعداد المسبق ما يلي:
- تفعيل Storage API:
serviceusage.services.enable - إنشاء مجموعة تخزين المصدر:
storage.buckets.createوstorage.buckets.list - ضبط حساب "وكيل الخدمة":
resourcemanager.projects.setIamPolicyلمنح Hosting إذن الوصول للقراءة (roles/storage.objectViewer) حتى تتمكّن من جلب الرمز البرمجي الذي تم تحميله أثناء عمليات الإنشاء
بالنسبة إلى عملية النشر الأوّلية، يتم إنشاء مجموعة تخزين GCS مع دورة حياة مدتها 30 يومًا، وبعد ذلك يتم حذف مجموعة التخزين. ومع ذلك، يمكنك إدارة هذا الإطار الزمني في Cloud Console ضمن Cloud Storage -> مجموعات التخزين -> دورة الحياة -> القواعد. يمكنك الاطّلاع على مقالة إدارة دورات حياة العناصر.
أذونات عمليات النشر اللاحقة (بعد تهيئة الموقع الجغرافي)
بعد تهيئة مجموعة تخزين المصدر وعمليات ربط الأدوار لموقع جغرافي (إما من خلال عملية نشر أوّلية باستخدام واجهة سطر الأوامر أو إعداد وحدة التحكّم)، يمكن للمطوّرين العاديين، أو المحرِّرين، أو App Hosting المشرفين نشر التعديلات. لا تكون أذونات الإدارة على مستوى المشروع مطلوبة لعمليات النشر الروتينية.
تشمل أذونات النشر النشطة ما يلي:
- التحقّق من مجموعة التخزين:
storage.buckets.list - تحميل أرشيف المصدر:
storage.objects.create - تشغيل عملية الإنشاء والنشر: أذونات Hosting العادية (
apphosting.builds.createوapphosting.rollouts.create)
النشر من المصدر باستخدام واجهة سطر الأوامر Firebase
Firebase تتيح لك واجهة سطر الأوامر الإصدار 14.4.0 والإصدارات الأحدث إرسال رمز المصدر والإعدادات الخاصة بتطبيقك مباشرةً من جهازك المحلي إلى Firebase. يكون هذا الإجراء مناسبًا إذا كنت تدير عمليات نشر أخرى على Firebase (مثل قواعد الأمان أو الدوال) وأردت نشر تطبيق الويب وخدمات الخلفية معًا باستخدام أمر واحد في واجهة سطر الأوامر.
المتطلبات الأساسية
- يجب أن تكون مشاريعك ضمن خطة Blaze.
- يجب استخدام الإصدار 14.4.0 من firebase-tools أو إصدار أحدث.
خطوات النشر
- نفِّذ الأمر
firebase init apphostingفي دليل مشروع على جهاز المستخدم. - عندما يُطلب منك ذلك، اختَر استخدام مشروع حالي واختَر مشروعك المستهدَف على Firebase.
- اختَر إما خلفية جديدة أو حالية للنشر إليها. تؤدي هذه الخطوة إلى إعداد عمليات نشر Hosting لدليلك المحلي وتطلب منك تفاصيل الإعداد:
- رقم تعريف الخلفية التي سيتم النشر إليها
- المنطقة التي سيتم النشر إليها، في حال إنشاء خلفية جديدة
- المسار إلى الدليل الجذري للرمز البرمجي لتطبيقك
- وقت تشغيل Node.js المفضّل يؤدي اختيار وقت تشغيل ذي إصدار إلى تفعيل التحديثات التلقائية للصورة الأساسية (ABIU) لتطبيق تصحيحات الأمان تلقائيًا على البيئة الأساسية.
- App Hosting تحفظ إعدادات النشر المفضّلة في
firebase.json، وتنشئ الملف في مشروعك المحلي إذا لم يكن موجودًا من قبل. بعد اكتمال عملية الإعداد بنجاح، نفِّذ الأمرfirebase deployلنشر رمز المصدر.
مثال على firebase.json
{
"apphosting": [
{
"backendId": "my-backend",
// rootDir specifies the directory containing the app to deploy, but the entire
// parent directory of firebase.json will be zipped and uploaded to ensure that
// dependencies outside of the app directory will be available at build time.
"rootDir": "./my-app",
"ignore": [
"node_modules",
".git",
"firebase-debug.log",
"firebase-debug.*.log",
"functions"
]
}
]
}
النشر باستخدام "وحدة تحكّم Firebase" (تحميل ملف مضغوط)
توفر Firebase وحدة تحكم واجهة رسومية لنشر التطبيقات من خلال تحميل أرشيف مصدر مضغوط مباشرةً. يُعدّ هذا بديلاً لمسار اتصال GitHub، وذلك في الحالات التي تفضّل فيها عدم استخدام GitHub أو تفضّل إعداد CI/CD مختلفًا.
يمكن إجراء عمليات تحميل الأرشيف أثناء إنشاء خلفية أوّلية أو عند إنشاء عملية نشر يدوية على خلفية حالية، بما في ذلك الخلفيات التي تم نشرها في الأصل باستخدام واجهة سطر الأوامر في Firebase.
التنسيقات المتوافقة
يتحقّق برنامج التحميل في وحدة التحكّم من تنسيقَي الأرشيف المضغوطَين التاليَين ويقبلهما بشكلٍ أصلي:
.zip.tgz
تظهر هذه التنسيقات بشكلٍ صريح في نص وصف برنامج تحميل الملفات.
خطوات النشر
الخيار (أ): أثناء الإعداد الأوّلي للخلفية
- اختيار المصدر: في معالج إنشاء الخلفية، اختَر تحميل ملف zip أثناء خطوة "كيف تريد استيراد تطبيقك؟".
- الإعداد الأوّلي: يؤدي النقر على "التالي" إلى تشغيل مسار الإعداد في الخلفية، ما يؤدي إلى تفعيل Storage API بالتسلسل، والتأكّد من إعداد الأدوار الصحيحة، وإدراج مجموعة التخزين أو تعديلها. تعرض واجهة المستخدم مؤشر تحميل
مع رسائل حالة ديناميكية: "جارٍ تفعيل واجهة برمجة التطبيقات..."، "جارٍ التحقّق من الأذونات..."، و "جارٍ إعداد مجموعة التخزين...".
- التعامل مع الأخطاء والضمانات: إذا فشلت أي خطوة من خطوات الإعداد (مثل تلقّي مستخدم ليس مالكًا للرسالة
403 PERMISSION_DENIEDبسبب عدم كفاية أذونات IAM)، تعرض واجهة المستخدم تحذيرًا مخصّصًا يطلب منك التواصل مع مالك المشروع. يتم قفل التنقّل بين الخطوات بشكلٍ صارم، ويظل الزر "التالي" والزر النهائي "إنهاء والنشر" غير مفعّلين إلى أن يتم حلّ المشكلة.
- التعامل مع الأخطاء والضمانات: إذا فشلت أي خطوة من خطوات الإعداد (مثل تلقّي مستخدم ليس مالكًا للرسالة
- تحميل الملفات: بعد اكتمال عملية الإعداد بنجاح، اختَر ملف الأرشيف أو اسحبه إلى مكوّن برنامج تحميل الملفات.
ضبط الإعدادات: حدِّد الدليل الجذري للتطبيق (يكون الإعداد التلقائي هو
/).انقر على إنهاء والنشر: يتم إيقاف الزر المستقل "إنهاء" لعمليات تحميل ملفات zip لأنّ تحميل الأرشيف هو إجراء لمرة واحدة ويجب أن يتبعه فورًا عملية نشر لضمان توفّر خلفية وظيفية.
الخيار (ب): إنشاء عملية نشر يدوية
- فتح مربّع الحوار: في لوحة بيانات Hosting، انقر على إنشاء عملية نشر.
- اختيار المصدر: اختَر تحميل ملف zip في أداة التنقّل بين الخطوات في مربّع الحوار. إذا لم تكن الخلفية مرتبطة بـ GitHub، يتم إيقاف خيار "GitHub".
- الإعداد والتحميل: يؤدي الاختيار إلى تشغيل مسار الإعداد نفسه في الخلفية ("جارٍ تفعيل واجهة برمجة التطبيقات..."، "جارٍ التحقّق من الأذونات..."، و "جارٍ إعداد مجموعة التخزين..."). بعد اكتمال العملية بنجاح، اسحب ملف الأرشيف أو اختَره باستخدام برنامج التحميل، وحدِّد الدليل الجذري للتطبيق، وانقر على نشر لتشغيل عملية الإنشاء والنشر.
النشر باستخدام Terraform
إذا كنت بحاجة إلى تحكّم أكبر في عملية الإنشاء والبيئة التي تم نشرها، يمكنك النشر باستخدام Terraform. يتيح لك Terraform تحديد موارد App Hosting وإدارتها باستخدام ملفات الإعداد التصريحية، ويوفر إمكانية نشر صورة حاوية تم إنشاؤها مسبقًا مباشرةً إلى App Hosting بدلاً من الاعتماد على App Hosting لإنشاءها من رمز المصدر.
إذا كنت تستخدم Terraform للمرة الأولى، يُرجى الاطّلاع على مقالة بدء استخدام Terraform وFirebase. إذا كنت على دراية جيدة باستخدام Terraform، يمكنك البدء بملفات الإعداد النموذجية وموارد App Hosting أخرى.
إعداد اتصال GitHub لـ CI/CD
يمكنك ربط مستودع GitHub في أي وقت في علامة التبويب النشر ضمن إعدادات الخلفية في Firebase console. يتيح لك ذلك نشر نموذج أولي للتطبيق من بيئة محلية ثم الانتقال إلى مسار CI/CD تلقائي عندما تكون مستعدًا.
النشر باستخدام أدوات الذكاء الاصطناعي
سنوقف Firebase Studio في 22 مارس 2027. لن تتأثر الخلفيات في خدمة App Hosting، ولكن سيتم إيقاف الزر نشر في Firebase Studio. لمتابعة نشر التعديلات بدون تغيير عنوان URL، عليك نقل مشروعك. تعرَّف على كيفية نقل مشروعك.