Вы можете выполнить локальное тестирование своего приложения перед развертыванием на 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 , как описано в разделе «Установка, настройка и интеграция Local Emulator Suite» . В дополнение к любым другим эмуляторам Firebase, которые вы хотите настроить, обязательно выберите App Hosting Emulator . CLI запросит у вас некоторые значения для App Hosting Emulator, в том числе:
- Корневой каталог вашего приложения относительно проекта; это важно, если вы используете монорепозитории с 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 разработан таким образом, чтобы его было безопасно добавлять в репозитории и делиться им с коллегами. Чтобы избежать случайной публикации конфиденциальных данных в репозиториях исходного кода, любая переменная окружения, являющаяся секретом в apphosting.yaml , также должна быть секретом в apphosting.emulator.yaml . Если секрет не нужно изменять между продакшеном и локальной разработкой (например, ключ API Gemini), его не нужно добавлять в apphosting.emulator.yaml ; вместо этого предоставьте вашей команде доступ к секрету .
Если ваше приложение использует много секретов (например, ключи API для трех разных сервисов с разными значениями для производственного, тестового и локального тестирования), вы можете превысить бесплатный уровень 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 Groups для управления доступом к секретам вместо предоставления доступа отдельным пользователям. Это упростит адаптацию новых членов вашей команды разработчиков, поскольку добавление их в группу предоставит им доступ ко всем необходимым секретам. Возможно, у вас уже есть подходящая группа, где разработчики общаются друг с другом. Контроль доступа с помощью Google Groups также помогает гарантировать, что разработчики, покидающие вашу команду, потеряют доступ ко всем секретам после удаления из группы электронной почты. Однако, если секрет имеет доступ к производственным данным или реальным побочным эффектам, все же может быть целесообразно сменить ключ и присвоить ему новое значение с помощью firebase apphosting:secrets:set .
Запустите эмулятор
firebase emulators:start
Это запустит все эмуляторы, определенные в вашем файле firebase.json , включая эмулятор App Hosting .