O App Hosting foi projetado para facilitar o uso e a 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 gerenciar e configurar back-ends de acordo com suas necessidades específicas. Este guia descreve essas ferramentas e processos.
Criar e editar apphosting.yaml
Para configurações avançadas, como variáveis de ambiente ou configurações de tempo de execução, como simultaneidade, CPU e limites de memória, crie e edite o arquivo apphosting.yaml
no diretório raiz do app. Esse arquivo também
aceita referências a secrets gerenciados
com o Cloud Secret Manager, o que torna seguro fazer check-in no controle de origem.
Para criar apphosting.yaml
, execute o seguinte comando:
firebase init apphosting
Isso cria um arquivo apphosting.yaml
inicial básico com um exemplo de configuração (em comentário). Depois da edição, um arquivo apphosting.yaml
típico pode ter esta aparência, com configurações para o serviço Cloud Run do back-end, algumas variáveis de ambiente e algumas 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.firebasestorage.app
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 oferece mais informações e contexto sobre essas configurações de exemplo.
Configurar as definições do serviço Cloud Run
Com as configurações de apphosting.yaml
, é possível configurar como seu
serviço de Cloud Run é
provisionado. As configurações disponíveis para o
serviço Cloud Run são fornecidas no objeto runConfig
:
cpu
: número de CPUs usadas para cada instância de veiculação (padrão: 0).memoryMiB
: quantidade de memória alocada para cada instância de serviço em MiB (padrão: 512)maxInstances
: número máximo de contêineres que podem ser executados ao mesmo tempo (padrão de 100 e gerenciado por cota).minInstances
: número de contêineres que sempre devem ser mantidos ativos (padrão 0).concurrency
: número máximo de solicitações que cada instância de veiculação pode receber (padrão: 80).
Observe a relação importante entre cpu
e memoryMiB
. A memória pode ser definida como qualquer valor inteiro entre 128 e 32.768, mas aumentar o limite de memória pode exigir o aumento dos limites de CPU:
- Mais de 4 GiB requer pelo menos 2 CPUs
- Mais de 8 GiB requer pelo menos 4 CPUs
- Mais de 16 GiB requer pelo menos 6 CPUs
- Mais de 24 GiB requer pelo menos 8 CPUs
Da mesma forma, o valor de cpu
afeta as configurações de simultaneidade. Se você definir um valor
menor que 1 CPU, defina a simultaneidade como 1. A CPU só será alocada
durante o processamento da solicitação.
Configurar o ambiente
Às vezes, você precisará de configuração adicional para seu processo de build, como chaves de API de terceiros ou configurações ajustáveis. O App Hosting oferece configuração de ambiente em apphosting.yaml
para armazenar e recuperar esse tipo de dados para seu projeto.
env:
- variable: STORAGE_BUCKET
value: mybucket.firebasestorage.app
Para apps Next.js, os arquivos dotenv que contêm
variáveis de ambiente
também funcionam com App Hosting. Recomendamos usar apphosting.yaml
para controle granular de variáveis de ambiente com qualquer framework.
Em apphosting.yaml
, é possível especificar quais processos têm acesso à sua
variável de ambiente usando a propriedade availability
. É possível restringir uma variável de ambiente para que ela esteja disponível apenas no ambiente de build ou apenas no ambiente de execução. Por padrão, ele está disponível para os dois.
env:
- variable: STORAGE_BUCKET
value: mybucket.firebasestorage.app
availability:
- BUILD
- RUNTIME
Para apps Next.js, também é possível usar o prefixo NEXT_PUBLIC_
da mesma forma que
faria no arquivo dotenv para tornar uma variável acessível no navegador.
env:
- variable: NEXT_PUBLIC_STORAGE_BUCKET
value: mybucket.firebasestorage.app
availability:
- BUILD
- RUNTIME
As chaves de variável válidas são compostas de caracteres de A a Z ou sublinhados. Algumas chaves de variáveis de ambiente são reservadas para uso interno. Não use nenhuma destas chaves nos arquivos de configuração:
- Qualquer variável que comece com
X_FIREBASE_
PORT
K_SERVICE
K_REVISION
K_CONFIGURATION
Substituir scripts de build e execução
O App Hosting deduz o comando de build e inicialização do app com base no framework
detectado. Se você quiser usar um comando de build ou inicialização personalizado, substitua os padrões de App Hosting em apphosting.yaml
.
scripts:
buildCommand: next build --no-lint
runCommand: node dist/index.js
A substituição do comando de build tem precedência sobre qualquer outro comando de build e
desativa os adaptadores de framework e as otimizações específicas do framework
fornecidas pelo App Hosting. É melhor usar quando os recursos do app
não são bem compatíveis com os adaptadores. Se você quiser mudar o comando de build, mas ainda usar os adaptadores fornecidos, defina o script de build em package.json
, conforme descrito em adaptadores do framework App Hosting.
Use a substituição do comando de execução quando houver um comando específico que você quer usar para iniciar o app, diferente do comando inferido por App Hosting.
Configurar a saída do build
Por padrão, o App Hosting otimiza as implantações do app excluindo arquivos de saída não utilizados, conforme indicado pelo framework. Se quiser otimizar ainda mais o tamanho de implantação do app ou ignorar as otimizações padrão, substitua isso em apphosting.yaml
.
outputFiles:
serverApp:
include: [dist, server.js]
O parâmetro include
recebe uma lista de diretórios e arquivos relativos ao diretório raiz do app que são necessários para implantar o app. Se você quiser garantir que todos os arquivos sejam mantidos, defina "include" como [.]
, e todos os arquivos serão implantados.
Armazenar e acessar parâmetros de secret
Informações sensíveis, como chaves de API, precisam ser armazenadas como secrets. É possível
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
armazenado no Secret Manager do Google Cloud.
Em vez de
derivar o valor diretamente, os parâmetros do secret verificam a existência no Secret
Manager do Google Cloud e carregam 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 valor de um parâmetro secreto disponível para seu back-end ativo é fixado na versão mais recente disponível do secret no momento em que o back-end foi criado. Se você tiver requisitos de controle de versões e gerenciamento do ciclo de vida de parâmetros, poderá fixar versões específicas com o Cloud Secret Manager. Por exemplo, para fixar na 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 oferece a
opção de adicionar automaticamente a referência do secret a apphosting.yaml
.
Para usar o conjunto completo de funcionalidades do Cloud Secret Manager, use o console do Cloud Secret Manager. Se fizer isso, você precisará conceder
permissões ao seu back-end App Hosting com o comando da CLI firebase
apphosting:secrets:grantaccess
.
Configurar o acesso à VPC
Seu back-end App Hosting pode se conectar a uma rede de nuvem privada virtual (VPC). Para mais informações e um exemplo, consulte Conectar Firebase App Hosting a uma rede VPC.
Use o mapeamento vpcAccess
no arquivo apphosting.yaml
para configurar o acesso.
Use um nome de rede totalmente qualificado ou um ID. O uso de IDs permite a portabilidade entre ambientes de preparo e produção com diferentes conectores/redes.
runConfig:
vpcAccess:
egress: PRIVATE_RANGES_ONLY # Default value
networkInterfaces:
# Specify at least one of network and/or subnetwork
- network: my-network-id
subnetwork: my-subnetwork-id
Gerenciar back-ends
Os comandos para gerenciamento básico de back-ends do App Hosting são fornecidos na CLI Firebase e no console do Firebase. Esta seção descreve algumas das tarefas de gerenciamento mais comuns, incluindo a criação e exclusão de back-ends.
Criar um back-end
Um back-end do App Hosting é a coleção de recursos gerenciados que o App Hosting cria para criar e executar seu web app.
Console do Firebase: no menu Build, selecione App Hosting e clique em Começar agora.
CLI: (versão 13.15.4 ou mais recente) para criar um back-end, execute o seguinte comando na raiz do diretório do projeto local, fornecendo seu projectID como um argumento:
firebase apphosting:backends:create --project PROJECT_ID
No console ou na CLI, siga as instruções para escolher uma região, configurar uma conexão do GitHub e definir estas configurações básicas de implantação:
Defina o diretório raiz do app (o padrão é
/
)É onde o arquivo
package.json
geralmente está localizado.
Defina a ramificação ativa
Esse é o branch do seu repositório do GitHub que é implantado no seu URL ativo. Muitas vezes, é a ramificação em que as ramificações de recursos ou de desenvolvimento são mescladas.
Aceitar ou recusar lançamentos automáticos
Os lançamentos automáticos são ativados por padrão. Ao concluir a criação do back-end, você pode escolher implantar o app em App Hosting imediatamente.
Atribua um nome ao back-end.
Excluir um back-end
Para remover completamente um back-end, primeiro use a CLI Firebase ou o console Firebase para excluí-lo e, em seguida, remova manualmente os recursos relacionados. Tome cuidado para não excluir recursos que possam ser usados por outros back-ends ou outros aspectos do seu projeto do Firebase.
Console do Firebase: no menu Configurações, selecione Excluir back-end.
CLI:versão 13.15.4 ou mais recente
Execute o comando a seguir para excluir o back-end App Hosting. Isso desativa todos os domínios do seu back-end e exclui o serviço Cloud Run associado:
firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID
(Opcional) Na guia do Console do Google Cloud para Artifact Registry, exclua a imagem do seu back-end em "firebaseapphosting-images".
No Cloud Secret Manager, exclua todos os secrets com "apphosting" no nome, tomando cuidado especial para garantir que eles não sejam usados por outros back-ends ou outros aspectos do seu projeto do Firebase.