O App Hosting foi projetado para ser fácil de usar e de baixa manutenção, com configurações padrão otimizadas para a maioria dos casos de uso. Ao mesmo tempo, O App Hosting oferece ferramentas para você gerenciar e configurar back-ends para suas necessidades específicas. Este guia descreve essas ferramentas e processos.
Configurar um back-end
Para configurações avançadas, como variáveis de ambiente ou configurações de ambiente de execução
como limites de simultaneidade, CPU e memória, será preciso criar e editar os
apphosting.yaml
no diretório raiz do seu app. Este arquivo também
dá suporte a referências a secrets gerenciados
com o Cloud Secret Manager, o que simplifica a verificação do controle de origem.
Veja a aparência de um arquivo apphosting.yaml
típico, com configurações para
o serviço Cloud Run do back-end, algumas variáveis de ambiente e outras
referências a secrets gerenciados pelo Cloud Secret Manager:
# Settings for Cloud Run
runConfig:
minInstances: 2
maxInstances: 100
concurrency: 100
cpu: 2
memoryMiB: 1024
# Environment variables and secrets
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
- variable: API_KEY
secret: myApiKeySecret
# Same as API_KEY above but with a pinned version.
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
# Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
- variable: VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID
# Same as API_KEY above but with the long form secret reference with pinned version.
- variable: PINNED_VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID/versions/5
O restante deste guia fornece mais informações e contexto para esses exemplos configurações.
Definir as configurações do serviço Cloud Run
Com as configurações do apphosting.yaml
, é possível definir como seus
O serviço Cloud Run está
provisionado. As configurações disponíveis para o
Serviço Cloud Run são fornecidos no objeto runConfig
:
cpu
: número de CPUs usadas para cada instância de exibição (padrão 0).memoryMiB
: quantidade de memória alocada para cada instância de exibição em MiB. (padrão 512)maxInstances
: número máximo de contêineres a serem executados por vez (padrão) de 100 e gerenciadas por cotas)minInstances
: número de contêineres que devem ser sempre mantidos ativos (padrão 0).concurrency
: número máximo de solicitações que cada instância de exibição pode receber (padrão é 80).
Observe a importante relação entre cpu
e memoryMiB
. a memória pode ser definida
para qualquer valor inteiro entre 128 e 32.768, mas aumentar o limite de memória pode
exigem aumento dos limites de CPU:
- Mais de 4 GiB exigem pelo menos 2 CPUs
- Mais de 8 GiB exigem pelo menos 4 CPUs
- Mais de 16 GiB exigem pelo menos 6 CPUs
- Mais de 24 GiB requerem pelo menos 8 CPUs
Da mesma forma, o valor de cpu
afeta as configurações de simultaneidade. Se você definir um valor
menos de uma CPU, você precisa definir a simultaneidade como 1, e a CPU só será alocada
durante o processamento da solicitação.
Configurar o ambiente de build
Às vezes, você vai precisar de configurações adicionais para o processo de build, como
chaves de API de terceiros ou configurações ajustáveis. Ambiente de ofertas do App Hosting
em apphosting.yaml
para armazenar e extrair esse
tipos de dados para seu projeto.
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
Para aplicativos Next.js, os arquivos dotenv que contêm
variáveis de ambiente
também vão
funcionam com App Hosting. Recomendamos o uso de apphosting.yaml
para
o controle de variáveis de ambiente com qualquer framework.
Em apphosting.yaml
, é possível especificar quais processos têm acesso aos seus
variável de ambiente usando a propriedade availability
. É possível restringir um
variável de ambiente esteja disponível apenas para o ambiente de build ou
apenas para o ambiente de execução. Por padrão, ele está disponível para ambos.
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
Para apps Next.js, você também pode usar o prefixo NEXT_PUBLIC_
da mesma forma que
faria em seu arquivo dotenv para tornar uma variável acessível no navegador.
env:
- variable: NEXT_PUBLIC_STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
As chaves de variáveis válidas são compostas por caracteres de A a Z ou sublinhados. Algumas as chaves de variável de ambiente são reservadas para uso interno. Não use nenhum desses nos arquivos de configuração:
- Qualquer variável que comece com
X_FIREBASE_
PORT
K_SERVICE
K_REVISION
K_CONFIGURATION
Armazenar e acessar parâmetros do secret
Informações sensíveis, como chaves de API, precisam ser armazenadas como secrets. Você pode
fazer referência a secrets em apphosting.yaml
para evitar a verificação de informações sensíveis
no controle de origem.
Os parâmetros do tipo secret
representam parâmetros de string que têm um valor
armazenados no Cloud Secret Manager.
Em vez de
derivando o valor diretamente, os parâmetros do secret verificam a existência no Cloud
Secret Manager e carregue os valores durante o lançamento.
- variable: API_KEY
secret: myApiKeySecret
Os secrets no Cloud Secret Manager podem ter várias versões. Por padrão, o o valor de um parâmetro secreto disponível para seu back-end ativo é fixado versão mais recente disponível do secret no momento em que o back-end foi criado. Se você têm requisitos para controle de versões e gerenciamento do ciclo de vida dos parâmetros, é possível fixar versões específicas com o Cloud Secret Manager. Por exemplo, para fixar Versão 5:
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
É possível criar secrets com o comando da CLI firebase apphosting:secrets:set
,
e você vai receber uma solicitação para adicionar as permissões necessárias. Esse fluxo fornece
para adicionar automaticamente a referência de secret a apphosting.yaml
.
Para usar o pacote completo de funcionalidades do Cloud Secret Manager, use
no console do Cloud Secret Manager. Se você fizer isso, precisará conceder
permissões ao back-end App Hosting com o comando da CLI firebase
apphosting:secrets:grantaccess
.
Sincronizar o estado do Firebase Auth
Os apps que usam o Firebase Auth devem considerar o uso do SDK da Web do Firebase para ajudar a manter
estado de autenticação sincronizado entre o cliente e o servidor. Isso pode ser
facilitado pela implementação de FirebaseServerApp
com um service worker. O básico
fluxo de tarefas é:
- Implementar um service worker que adiciona os cabeçalhos corretos ao seu aplicativo em solicitações ao servidor.
- Receber os cabeçalhos da solicitação no servidor e convertê-los em um arquivo Auth
usuário com
FirebaseServerApp
.
Gerenciar back-ends
Os comandos para o gerenciamento básico de back-ends App Hosting são fornecidos na CLI Firebase. Algumas operações também estão disponíveis no console do Firebase. Nesta seção, descrever algumas das tarefas de gerenciamento mais comuns, incluindo criar e e excluir back-ends.
Criar um back-end
Um back-end App Hosting é a coleção de recursos gerenciados que O App Hosting cria para criar e executar seu app da Web. É possível criar e listar App Hosting back-ends usando o console do Firebase ou CLI Firebase.
Console do Firebase: no menu Build, selecione App Hosting e Comece a usar o serviço.
CLI: (versão 3.9 ou mais recente) para criar um back-end, execute o comando a seguir
da raiz do diretório do seu projeto local, informando aos
project ID como argumento (para visualização,
somente a região us-central1
tem suporte):
firebase apphosting:backends:create --project PROJECT_ID --location us-central1
No console ou na CLI, siga as instruções para atribuir um nome ao back-end para Configurar um Conexão do GitHub, e defina estas configurações básicas de implantação:
Configure o diretório raiz do seu app (o padrão é
/
)Geralmente, é onde o arquivo
package.json
está localizado.
Definir a ramificação ativa
Essa é a ramificação do seu repositório GitHub que é implantada no seu URL ativo. Muitas vezes, é a ramificação em que as ramificações ou o desenvolvimento de recursos as ramificações são mescladas.
Aceitar ou recusar lançamentos automáticos
Os lançamentos automáticos são ativados por padrão. Na conclusão da criação do back-end, é possível escolher se o app será implantado no App Hosting imediatamente.
Excluir um back-end
Para remover totalmente um back-end, primeiro use a CLI Firebase e, em seguida, manualmente remover recursos relacionados, tomando cuidado especial para não excluir recursos que possa ser usado por outros back-ends ou outros aspectos do seu projeto do Firebase.
Execute o comando a seguir para excluir o back-end App Hosting. Isso desativa todos os domínios para seu back-end e exclui os domínios associados Serviço Cloud Run:
firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
(Opcional) No Guia do console do Google Cloud para Artifact Registry, exclua a imagem do back-end em "firebaseapphosting-images".
No Cloud Secret Manager, faça o seguinte: exclua os secrets com "apphosting" no nome secreto, tomando um para garantir que esses secrets não sejam usados por outros back-ends ou outros aspectos do seu projeto do Firebase.