Делитесь ресурсами проекта на нескольких сайтах

В одном проекте Firebase можно настроить один или несколько сайтов Firebase Hosting . Поскольку все сайты находятся в одном проекте Firebase, они могут получить доступ к другим ресурсам Firebase этого проекта.

Создав несколько сайтов Hosting в рамках одного проекта Firebase, вы можете упростить совместное использование ресурсов Firebase между связанными сайтами и приложениями. Например, если вы создадите свой блог, панель администратора и общедоступное приложение как отдельные сайты в одном проекте Firebase, они смогут использовать одну и ту же базу данных пользователей Firebase Authentication , при этом имея собственные уникальные домены или контент.

Шаг 1 : Обновите версию Firebase CLI.

Чтобы получить доступ к самым актуальным функциям Firebase Hosting , обновите Firebase CLI до последней версии .

Шаг 2 : Добавьте дополнительные сайты

Добавьте дополнительные сайты в проект Firebase одним из следующих способов:

  • Используйте алгоритм действий на странице Hosting в консоли Firebase

  • Используйте команду Firebase CLI: firebase hosting:sites:create SITE_ID

  • Используйте REST API Hosting : projects.sites.create

Для каждого из этих методов вам потребуется указать SITE_ID , который будет использоваться для создания поддоменов по умолчанию, предоставляемых Firebase для сайта:

  • SITE_ID .web.app
  • SITE_ID .firebaseapp.com

Поскольку для этих URL-адресов используется SITE_ID , к идентификатору сайта предъявляются следующие требования:

  • Это должна быть допустимая метка имени хоста, то есть она не может содержать точки, _ подчеркивания и т . д.
  • Не более 30 символов.
  • Должно быть уникальным в глобальном масштабе в рамках Firebase.

К каждому сайту также можно дополнительно добавить пользовательские домены , чтобы отображать один и тот же контент и конфигурацию по нескольким URL-адресам.

Удалить дополнительный сайт

Удалите ненужные сайты из проекта Firebase одним из следующих способов:

  • Используйте алгоритм действий на странице Hosting в консоли Firebase

  • Используйте команду Firebase CLI: firebase hosting:sites:delete SITE_ID

  • Используйте REST API Hosting : projects.sites.delete

Обратите внимание, что удалить сайт по умолчанию невозможно, поскольку его SITE_ID совпадает с идентификатором вашего проекта Firebase.

Шаг 3 : Настройте цели развертывания для ваших сайтов.

Когда у вас несколько сайтов и вы запускаете команды развертывания Firebase CLI, CLI необходимо передавать информацию о том, какие настройки следует развернуть на каждом сайте. С помощью целей развертывания вы можете однозначно идентифицировать конкретный сайт с помощью TARGET_NAME в файле конфигурации firebase.json и в командах Firebase CLI для тестирования или развертывания на ваших сайтах.

Чтобы создать целевой объект развертывания и присвоить ему имя TARGET_NAME для Hosting сайта, выполните следующую команду CLI из корневого каталога вашего проекта:

firebase target:apply hosting TARGET_NAME RESOURCE_IDENTIFIER

Где параметры следующие:

  • TARGET_NAME — уникальное имя (определенное вами самостоятельно) для Hosting сайта, на который вы развертываете приложение.

  • RESOURCE_IDENTIFIERSITE_ID для Hosting , указанный в вашем проекте Firebase.

Например, если вы создали два сайта ( myapp-blog и myapp-app ) в своем проекте Firebase, вы можете присвоить каждому сайту уникальное TARGET_NAME ( blog и app соответственно), выполнив следующие команды:

firebase target:apply hosting blog myapp-blog
firebase target:apply hosting app myapp-app

Настройки целей развертывания хранятся в файле .firebaserc в каталоге вашего проекта, поэтому вам нужно настроить цели развертывания только один раз для каждого проекта.

Шаг 4 : Определите конфигурацию хостинга для каждого сайта.

Используйте TARGET_NAME присвоенное сайту, при определении конфигурации хостинга в файле firebase.json .

  • Если в вашем файле firebase.json определена конфигурация для нескольких сайтов, используйте формат массива:

    {
      "hosting": [ {
          "target": "blog",  // "blog" is the applied TARGET_NAME for the Hosting site "myapp-blog"
          "public": "blog/dist",  // contents of this folder are deployed to the site "myapp-blog"
    
          // ...
        },
        {
          "target": "app",  // "app" is the applied TARGET_NAME for the Hosting site "myapp-app"
          "public": "app/dist",  // contents of this folder are deployed to the site "myapp-app"
    
          // ...
    
          "rewrites": [...]  // You can define specific Hosting configurations for each site
        }
      ]
    }
  • Если в вашем файле firebase.json определена конфигурация только для одного сайта, использовать формат массива не обязательно:

    {
      "hosting": {
          "target": "blog",
          "public": "dist",
    
          // ...
    
          "rewrites": [...]
      }
    }

Шаг 5 : Протестируйте локально, просмотрите изменения и разверните их на своих сайтах.

Выполните любую из следующих команд из корневого каталога вашего локального проекта.

Командование Описание
firebase emulators:start --only hosting Имитирует содержимое и конфигурацию Hosting по умолчанию на локально размещенном URL-адресе Hosting
firebase emulators:start --only hosting: TARGET_NAME Имитирует Hosting и конфигурацию указанного Hosting сайта по локально размещенному URL-адресу.
firebase hosting:channel:deploy \
CHANNEL_ID
Развертывает содержимое и конфигурацию Hosting по умолчанию на URL-адресе предварительного Hosting .
firebase hosting:channel:deploy \
CHANNEL_ID --only TARGET_NAME
Развертывает Hosting и конфигурацию указанного Hosting сайта по предварительному URL-адресу.
firebase deploy --only hosting Развертывает контент и конфигурацию Hosting в рабочем канале всех сайтов Hosting , настроенных в файле firebase.json
firebase deploy --only hosting: TARGET_NAME Развертывает контент и конфигурацию Hosting в рабочем канале указанного сайта Hosting .
Командование Описание
(не рекомендуется; используйте emulators:start вместо этого)
firebase serve --only hosting
Предоставляет контент и конфигурацию Hosting по умолчанию по локальному URL-адресу Hosting
(не рекомендуется; используйте emulators:start вместо этого)
firebase serve --only hosting: TARGET_NAME
Hosting контент и конфигурацию указанного Hosting сайта по локально размещенному URL-адресу.