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

Вы можете настроить один или несколько сайтов Firebase Hosting в одном проекте Firebase. Поскольку все сайты находятся в одном проекте 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

  • Используйте API REST 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

  • Используйте API REST 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 и конфигурацию сайта Hosting по умолчанию на локально размещенном URL-адресе.
firebase emulators:start --only hosting: TARGET_NAME Эмулирует содержимое Hosting и конфигурацию указанного Hosting сайта по локально размещенному URL-адресу.
firebase hosting:channel:deploy \
CHANNEL_ID
Развертывает содержимое Hosting и конфигурацию сайта Hosting по умолчанию по предварительному URL-адресу.
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 и конфигурацию сайта Hosting по умолчанию на локально размещенном URL-адресе.
(не рекомендуется; вместо этого используйте emulators:start )
firebase serve --only hosting: TARGET_NAME
Обслуживает содержимое Hosting и конфигурацию указанного Hosting сайта по локально размещенному URL-адресу.