Вы можете выполнить локальное тестирование своего приложения перед развертыванием 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 , включая:
- Корневой каталог вашего приложения относительно проекта; это важно, если вы используете монорепозитории с 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
автоматически генерируется и устанавливается при инициализации эмулятора. Если не указано, эмулятор обнаружит и выполнит команду dev вашего менеджера пакетов. -
rootDirectory
используется для поддержки настроек проекта monorepo. Если ваше веб-приложение находится в подкаталоге, вам необходимо указать путь к этому каталогу относительно корня (расположение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 .