Тестируйте веб-приложения локально с помощью эмулятора хостинга приложений Firebase.

Вы можете выполнить локальное тестирование своего приложения перед развертыванием 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 :

  1. Позволяет запускать веб-приложение локально, используя переменные среды и секреты, определенные в файлах конфигурации apphosting.yaml .
  2. Можно переопределить переменные среды и секреты для использования в эмуляторе с помощью файла apphosting.emulator.yaml .
  3. Может использоваться вместе с другими эмуляторами 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 .