ضبط استضافة التطبيقات

لإجراء عملية ضبط متقدّمة، مثل متغيّرات البيئة أو إعدادات وقت التشغيل، مثل التزامن ووحدة المعالجة المركزية (CPU) وحدود الذاكرة، عليك إنشاء ملف apphosting.yaml وتعديله في الدليل الجذري لتطبيقك. يدعم هذا الملف أيضًا مراجع الأسرار التي تتم إدارتها باستخدام Cloud Secret Manager، ما يجعلها آمنة للتحقّق من عنصر التحكّم في المصدر.

إليك ما قد يبدو عليه ملف apphosting.yaml النموذجي، مع إعدادات خدمة Cloud Run في الخلفية، وبعض متغيرات البيئة، وبعض الإشارات إلى الأسرار التي يديرها Cloud Secret Manager:

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

يوفر باقي هذا الدليل مزيدًا من المعلومات والسياق لأمثلة الإعدادات هذه.

ضبط إعدادات خدمة Cloud Run

باستخدام إعدادات apphosting.yaml، يمكنك ضبط طريقة توفير المتطلبات اللازمة لخدمة Cloud Run. يتم توفير الإعدادات المتاحة لخدمة التشغيل في السحابة الإلكترونية في الكائن runConfig:

  • cpu – عدد وحدات المعالجة المركزية المستخدَمة لكل مثيل عرض (القيمة التلقائية 0).
  • memoryMiB – مقدار الذاكرة المخصّصة لكل مثيل عرض بالميبيبايت (القيمة التلقائية 512)
  • maxInstances – الحد الأقصى لعدد الحاويات المطلوب تشغيلها في وقت واحد (القيمة التلقائية 100 حاوية وتُدار حسب الحصة)
  • minInstances – عدد الحاويات المطلوب الاحتفاظ بها دائمًا (القيمة التلقائية 0).
  • concurrency – الحدّ الأقصى لعدد الطلبات التي يمكن أن يتلقّاها كل مثيل عرض (القيمة التلقائية 80).

يُرجى العِلم العلاقة المهمة بين cpu وmemoryMiB، إذ يمكن ضبط الذاكرة على أي عدد صحيح تتراوح بين 128 و32768، إلا أنّ زيادة حدّ الذاكرة قد تتطلب زيادة حدود وحدة المعالجة المركزية (CPU):

  • يجب استخدام وحدتَي معالجة مركزية (CPU) على الأقل مع ما يزيد عن 4 غيبي بايت
  • يتطلب استخدام أكثر من 8 غيبي بايت 4 وحدات معالجة مركزية (CPU) على الأقل.
  • يتطلب استخدام أكثر من 16 غيبي بايت استخدام 6 وحدات معالجة مركزية (CPU) على الأقل.
  • يجب استخدام 8 وحدات معالجة مركزية (CPU) على الأقل مع ما يزيد عن 24 غيبي بايت.

وبالمثل، تؤثر قيمة cpu في إعدادات المزامنة. إذا تم ضبط قيمة أقل من وحدة معالجة مركزية واحدة، يجب ضبط التزامن على 1، ولن يتم تخصيص وحدة المعالجة المركزية إلا أثناء معالجة الطلب.

ضبط بيئة الإصدار

قد تحتاج أحيانًا إلى ضبط إعدادات إضافية لعملية التصميم، مثل مفاتيح واجهة برمجة التطبيقات التابعة لجهات خارجية أو الإعدادات القابلة للضبط. توفّر خدمة "استضافة التطبيقات" إعدادًا للبيئة في apphosting.yaml لتخزين هذا النوع من البيانات واسترداده لمشروعك.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

بالنسبة إلى تطبيقات Next.js، ستعمل ملفات dotenv التي تحتوي على متغيرات البيئة أيضًا مع استضافة التطبيقات. ننصحك باستخدام apphosting.yaml للتحكّم الدقيق في متغيّرات البيئة مع أي إطار عمل.

في apphosting.yaml، يمكنك تحديد العمليات التي يمكنها الوصول إلى متغيّر البيئة باستخدام السمة availability. يمكنك حظر أحد متغيرات البيئة بحيث يكون متاحًا لبيئة الإصدار فقط أو لبيئة وقت التشغيل فقط. وتكون هذه الميزة متاحة لكليهما تلقائيًا.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

بالنسبة إلى تطبيقات Next.js، يمكنك أيضًا استخدام البادئة NEXT_PUBLIC_ بالطريقة نفسها التي تستخدمها في ملف dotenv لإتاحة الوصول إلى متغيّر في المتصفّح.

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

تتكون مفاتيح المتغير الصالحة من أحرف A-Z أو شرطات سفلية. يتم حجز بعض مفاتيح متغيرات البيئة للاستخدام الداخلي. لا تستخدم أيًا من المفاتيح التالية في ملفات التهيئة:

  • أي متغيّر يبدأ بـ X_FIREBASE_
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

تخزين المعلمات السرية والوصول إليها

يجب تخزين المعلومات الحساسة مثل مفاتيح واجهة برمجة التطبيقات كمعلومات سرية. يمكنك الرجوع إلى المفاتيح السرّية في apphosting.yaml لتجنّب التحقق من المعلومات الحساسة في عناصر التحكّم في المصدر.

تمثّل المعلمات من النوع secret مَعلمات السلسلة التي تحتوي على قيمة مخزنة في Cloud Secret Manager. بدلاً من اشتقاق القيمة مباشرةً، تتحقق المعلمات السرية من وجودها في Cloud Secret Manager، وتحمِّل القيم أثناء الطرح.

  -   variable: API_KEY
      secret: myApiKeySecret

يمكن أن يكون للأسرار في Cloud Secret Manager عدة إصدارات. بشكل تلقائي، يتم تثبيت قيمة المعلَمة السرّية المتاحة للواجهة الخلفية المباشرة في أحدث إصدار متاح من السرّية في وقت إنشاء الواجهة الخلفية. إذا كانت لديك متطلبات تتعلق بتحديد الإصدارات وإدارة مراحل النشاط للمعلمات، يمكنك التثبيت في إصدارات محددة باستخدام Cloud Secret Manager. على سبيل المثال، للتثبيت إلى الإصدار 5:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

يمكنك إنشاء واجهات برمجة تطبيقات سرّية باستخدام أمر واجهة سطر الأوامر firebase apphosting:secrets:set، وسيُطلب منك إضافة الأذونات اللازمة. يتيح لك هذا المسار إضافة المرجع السري تلقائيًا إلى apphosting.yaml.

لاستخدام الحزمة الكاملة من وظائف Cloud Secret Manager، يمكنك بدلاً من ذلك استخدام وحدة تحكّم Cloud Secret Manager. في حال إجراء ذلك، عليك منح الأذونات إلى واجهة "استضافة التطبيقات" باستخدام أمر واجهة سطر الأوامر firebase apphosting:secrets:grantaccess.

مزامنة حالة مصادقة Firebase

ننصح التطبيقات التي تستخدم مصادقة Firebase باستخدام حزمة تطوير البرامج (SDK) للويب في Firebase للمساعدة في الحفاظ على مزامنة حالة المصادقة بين العميل والخادم. ويمكن تسهيل ذلك من خلال تنفيذ FirebaseServerApp مع مشغّل خدمات. تدفق المهام الأساسي هو:

  1. تنفيذ عامل خدمة يضيف العناوين المناسبة لتطبيقك في الطلبات المرسَلة إلى الخادم
  2. احصل على العناوين من الطلب على الخادم، وحوِّلها إلى مستخدم مصادق باستخدام FirebaseServerApp.