אתם יכולים לבצע בדיקות מקומיות של האפליקציה לפני הפריסה ב-App Hosting באמצעות האמולטור של App Hosting, שהוא חלק מ-Firebase Local Emulator Suite.
לפני שאתם משתמשים באמולטור של App Hosting, חשוב להבין את תהליך העבודה הכולל של 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 כמו שמתואר במאמר התקנה, הגדרה ושילוב של חבילת הכלים לאמולטור מקומי. בנוסף לאמולטורים אחרים של Firebase שרוצים להגדיר, חשוב לבחור את App Hosting
Emulator. ב-CLI תתבקשו להזין כמה ערכים של אמולטור 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. אפשר גם להגדיר את האמולטור של App Hosting על ידי עדכון ישיר של firebase.json. הסכימה של אמולטור App Hosting היא:
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional],
"rootDirectory": <path> [optional]
}
}
}
- הערך של
startCommandנוצר ומוגדר באופן אוטומטי כשהאמולטור מאותחל. אם לא תציינו פקודה, האמולטור יזהה ויריץ את פקודת הפיתוח של מנהל החבילות. - השדה
rootDirectoryמשמש לתמיכה בהגדרות של פרויקטים במונוריפו. אם אפליקציית האינטרנט נמצאת בתת-ספרייה, צריך לציין את הנתיב של התיקייה הזו ביחס לתיקיית השורש (המיקום שלfirebase.json).
ניהול האמולציה
אתחול האמולטור יוצר קובץ apphosting.emulator.yaml בתיקיית השורש של האפליקציה. לקובץ התצורה הזה יש את אותה סכימה כמו לקובץ apphosting.yaml שמשמש בסביבת הייצור, אבל הוא מיועד אך ורק לפיתוח מקומי. כברירת מחדל, האמולטור קורא את ההגדרות מהקובץ apphosting.yaml, אבל אם קיים קובץ apphosting.emulator.yaml, ההגדרות בקובץ הזה מקבלות עדיפות.
הקובץ apphosting.emulator.yaml נועד להיות בטוח לביצוע ולשיתוף עם עמיתים. כדי לוודא שלא תבצעו בטעות commit של נתונים רגישים למאגרי מקור, כל משתנה סביבה שהוא סוד ב-apphosting.yaml חייב להיות סוד גם ב-apphosting.emulator.yaml. אם לא צריך לשנות את הסוד בין סביבת הייצור לסביבת הפיתוח המקומית (לדוגמה, מפתח Gemini API), לא צריך להוסיף אותו ל-apphosting.emulator.yaml. במקום זאת, נותנים לצוות גישה לסוד.
אם האפליקציה שלכם משתמשת בהרבה סודות (לדוגמה, מפתחות API לשלושה שירותים שונים, עם ערכים שונים לכל אחד מהם בסביבת הייצור, בסביבת ה-staging ובסביבת הפיתוח המקומית), יכול להיות שתחרגו מהמכסה של 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.
הגדרת הפקודה start לאפליקציות Angular
אם פקודת האמולטור start נכשלת בגלל זמן קצוב לתפוגה, סביר להניח ששרת הפיתוח של Angular מציג את האפליקציה ביציאה שונה מזו שהאמולטור App Hosting מצפה לה.
כדי לעקוף את הבעיה, אפשר להוסיף הגדרות אישיות ב-firebase.json:
- מגדירים את
emulators.apphosting.startCommandלהיותng serve. - כדי להשתמש ביציאה שהיא לא ברירת המחדל, מגדירים אותה באמצעות
emulators.apphosting.port(במקום להוסיף את הדגל--portל-ng serveב-emulators.apphosting.startCommand).
לדוגמה:
"emulators": {
"apphosting": {
"port": 5002,
"rootDirectory": "./test-app",
"startCommand": "ng serve"
},
"ui": {
"enabled": true
},
...
}