Вы можете настроить один или несколько сайтов 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
Используйте 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_IDENTIFIER —
SITE_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 \ | Развертывает содержимое Hosting и конфигурацию сайта Hosting по умолчанию по URL-адресу предварительного просмотра. |
firebase hosting:channel:deploy \ | Развертывает содержимое 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-адресу. |