Вы можете провести локальное тестирование своего приложения перед развертыванием 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
. Интерфейс командной строки запросит у вас некоторые параметры эмулятора 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
используется для поддержки настройки проектов с монорепозиторием. Если ваше веб-приложение находится в подкаталоге, необходимо указать путь к этому каталогу относительно корня (местоположения файла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 .