يمكنك إجراء اختبارات محلية لتطبيقك قبل App Hostingنشره باستخدام محاكي App Hosting، وهو جزء من مجموعة App Hostingمحاكيات Firebase المحلية.
قبل استخدام محاكي App Hosting، تأكَّد من فهم عملية Local Emulator Suite التشغيل العامة في Firebase، وثبِّت Local Emulator Suite وضبطه وراجِع أوامر Local Emulator Suite CLI.
يفترض هذا الموضوع أنّك على دراية بـ App Hosting. إذا لزم الأمر، راجِع مقدمة App Hosting والمواد الأخرى لمساعدتك في فهم آلية عمل App Hosting.
ما الذي يمكنني فعله باستخدام محاكي App Hosting؟
يتيح لك محاكي App Hosting اختبار تطبيقات الويب وتحسينها على الجهاز. يمكن أن يؤدي ذلك إلى تبسيط عملية التطوير وتحسين جودة تطبيقات الويب التي تم إنشاؤها باستخدام Firebase ونشرها على App Hosting.
محاكي App Hosting:
- يتيح لك تشغيل تطبيق الويب على الجهاز، باستخدام متغيّرات البيئة والأسرار
المحدّدة في ملفات إعدادات
apphosting.yaml
. - يمكن إلغاء متغيّرات البيئة والأسرار لاستخدامها في المحاكي باستخدام ملف
apphosting.emulator.yaml
. - يمكن استخدامه مع محاكيات Firebase الأخرى. إذا كنت تستخدم Firestore أو Auth أو أي محاكي آخر، يضمن Local Emulator Suite بدء تشغيل هذه المحاكيات أولاً قبل محاكي App Hosting.
ضبط المحاكي
للبدء، ثبِّت Local Emulator Suite وأبدِله كما هو موضّح في مقالة تثبيت حزمة Local Emulator
Suite وضبطها ودمجها. بالإضافة إلى أي محاكيات
Firebase أخرى تريد إعدادها، احرص على اختيار App Hosting
Emulator
. تطلب منك وحدة تحكّم سطر الأوامر بعض قيم محاكي App Hosting،
بما في ذلك:
- الدليل الجذر لتطبيقك بالنسبة إلى المشروع، وهذا مهم إذا كنت تستخدم مستودعات مونو مع App Hosting.
- ما إذا كنت تريد إلغاء أي قيم لتطوير الإصدارات المحلية
- ما إذا كنت تريد منح زملائك في الفريق إذن الوصول إلى الأسرار لتطوير التطبيقات على الجهاز
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
◯ Firestore Emulator
◯ Database Emulator
◯ Hosting Emulator
◯ Pub/Sub Emulator
◯ Storage Emulator
◯ Eventarc Emulator
(Move up and down to reveal more choices)
? Specify your app's root directory relative to your project (./)
? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)
? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
◯ API_KEY
? What new value would you like for plaintext MEMCACHE_ADDR?
? What would you like to name the secret reference for API_KEY? (test-api-key)
? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]
? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:
✔ Successfully set IAM bindings on secret test-api-key.
تُستخدَم أي قيم تقدّمها في عملية الإعداد هذه لتعديل إعدادات App Hosting المحاكي في firebase.json
. يمكنك أيضًا
ضبط محاكي "استضافة التطبيقات" من خلال تعديل firebase.json
مباشرةً. إليك
مخطط محاكي "استضافة التطبيقات":
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- يتم إنشاء
startCommand
وضبطه تلقائيًا عند بدء تشغيل المحاكي. في حال عدم تقديمه، سيرصد المحاكي الأمر dev الخاص بمدير الحِزم ويعمل عليه. - يُستخدَم
rootDirectory
لدعم عمليات إعداد مشاريع المستودعات الموحدة. إذا كان تطبيق الويب في دليل فرعي، عليك تقديم مسار هذا الدليل بالنسبة إلى الدليل الجذر (الموقع الجغرافي لـfirebase.json
).
إدارة المحاكاة
يؤدي إعداد المحاكي إلى إنشاء ملف apphosting.emulator.yaml
في
الدليل الجذر لتطبيقك. يحتوي ملف الإعداد هذا على المخطّط نفسه المستخدَم في ملف
apphosting.yaml
المستخدَم في
الإنتاج، ولكنّه مخصّص فقط للتطوير على الجهاز. يقرأ المحاكي تلقائيًا الإعدادات من ملف apphosting.yaml
، ولكن إذا كان ملف apphosting.emulator.yaml
متوفّرًا، يتم منح الأولوية للإعدادات في هذا الملف.
تم تصميم ملف apphosting.emulator.yaml
ليكون آمنًا للمشاركة مع الزملاء. للمساعدة في التأكّد من عدم إرسال بيانات حسّاسة عن طريق الخطأ إلى مستودعات الرمز المصدر، يجب أن تكون أي متغيّرة بيئة سرية في
apphosting.yaml
سرية أيضًا في apphosting.emulator.yaml
. إذا كان المفتاح السري لا يحتاج إلى تغيير بين الإصدار العلني والتطوير على الجهاز (مثل مفتاح واجهة برمجة التطبيقات في Gemini)، ليس عليك إضافته إلى apphosting.emulator.yaml
. بدلاً من ذلك، يمكنك منح فريقك إذن الوصول إلى المفتاح السري.
إذا كان تطبيقك يستخدم العديد من الأسرار (على سبيل المثال، مفاتيح واجهة برمجة التطبيقات لثلاث خدمات مختلفة، مع قيم مختلفة لكل من مرحلة الإصدار العلني ومرحلة الإعداد ومرحلة التطوير على الجهاز المحلي)، قد تتجاوز المساحة المتوفرة في الفئة المجانية من Cloud Secret Manager وتدفع 0.06 دولار أمريكي لكل سر إضافي في الشهر. إذا كنت تفضّل إدارة الإعدادات المحلية
خارج نظام التحكّم في المصدر لتجنُّب هذه الرسوم، يمكنك استخدام الملف القديم
apphosting.local.yaml
. على عكس apphosting.emulator.yaml
، يُسمح لهذا الملف
بتقديم قيم نصية لمتغيّرات البيئة التي تمثل قيمًا
سرية في apphosting.yaml
.
منح المستخدمين أو المجموعات إذن الوصول إلى الأسرار
يتم قراءة الأسرار المخزّنة في apphosting.emulator.yaml
عند بدء تشغيل المحاكي. وهذا يعني أنّ فريق التطوير يحتاج إلى الوصول إلى السر. يمكنك
استخدام الأمر apphosting:secrets:grantaccess
لمنح إذن الوصول إلى سر ل
مستخدم أو مجموعة من خلال البريد الإلكتروني.
firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com
ننصحك باستخدام مفاتيح الاختبار فقط في apphosting.emulator.yaml
التي لا يمكنها الوصول إلى بيانات الإصدار العلني، ولا يمكن أن يكون لها تأثيرات جانبية عامة
(إرسال رسائل إلكترونية، تحصيل رسوم من بطاقات الائتمان)، و/أو التي لها حصص أقل، حيثما كان ذلك منطبقًا. يساعد ذلك في
ضمان أن يكون للرمز البرمجي غير الذي تمت مراجعته عواقب أقل في العالم الواقعي.
ننصحك باستخدام "مجموعات Google" لإدارة الوصول إلى الأسرار بدلاً من منح
الوصول إلى مستخدمين فرديين. سيؤدي ذلك إلى تبسيط عملية إعداد الأعضاء الجدد في
فريق المطوّرين لأنّ إضافتهم إلى المجموعة ستمنحهم إمكانية الوصول إلى كل
السرّيات التي يحتاجون إليها. قد تكون لديك مجموعة مناسبة يتواصل فيها المطوّرون مع بعضهم. يساعد التحكّم في الوصول من خلال "مجموعات Google" أيضًا في
ضمان فقدان المطوّرين الذين يغادرون فريقك إمكانية الوصول إلى جميع الأسرار عند
إزالتهم من مجموعة البريد الإلكتروني. إذا كان السرّ يملك إذن الوصول إلى بيانات الإنتاج
أو إلى تأثيرات جانبية في العالم الواقعي، قد يكون من المناسب تغيير مفتاحك
وإعطائه قيمة جديدة باستخدام firebase apphosting:secrets:set
.
تشغيل المحاكي
firebase emulators:start
سيؤدي ذلك إلى تشغيل جميع المحاكيات المحدّدة في ملف firebase.json
، بما في ذلك
محاكي App Hosting.