Cloud Commerce: template para nova loja
-
Comece criando um novo projeto no Firebase console:
- Insira um bom nome (ID) para o projeto e lembre-se dele;
- Desative (recomendado) Google Analytics for Firebase, não será utilizado por padrão;
-
Com o projeto criado, vá para Criação > Firestore Database (menu lateral) e clique em Criar banco de dados:
- Pule com o modo e as regras de produção padrão;
- Selecione a região
us-east4
(recomendado);
-
Vá para Criação > Storage e clique Vamos começar:
- Pule com o modo de produção padrão e a mesma região (pré-selecinada);
-
Vá para Criação > Authentication e clique em Vamos começar:
- Clique em Provedores nativos > E-mail/senha e ative Link do e-mail (login sem senha);
- Vá para as configurações do Authentication e adicione o domínio(s) da sua loja na lista de autorizados;
- Opcionalmente, adicione outros fornecedores por Smartphone (SMS, gera custos adicionais) e/ou redes sociais;
-
Vá para ⚙️ > Configurações do projeto e edite:
- Local padrão dos recursos do GCP: mesma região do Firestore (
us-east4
); - Configurações públicas > Nome exibido ao público: O nome da sua loja;
- Configurações públicas > E-mail para suporte (opcional);
- Em Seus aplicativos crie um app Web:
- Insira novamente o nome da loja e ativa Firebase Hosting para o novo app;
- Copie apenas o valor do objeto
firebaseConfig
e substitua emfunctions/ssr/src/scripts/InlineScripts.astro
; - Apenas clique em prosseguir nos próximos passos até confirmar e voltar para o console;
- Local padrão dos recursos do GCP: mesma região do Firestore (
-
O plano gratuito do Firebase não é compatível com o envio de solicitações HTTP externas, portanto você precisará fazer upgrade para o plano Blaze (sob demanda) no canto inferior esquerdo do console do Firebase;
-
Use esse template para gerar um novo repositório para sua loja;
- Setup e primeiro deploy pelo terminal com Firebase CLI:
# Install `firebase-tools` and login
npm install -g firebase-tools && firebase login
# Clone your new store repository
git clone [email protected]:{gh-user}/{new-store}.git
cd {new-store}
npm i
Com gcloud CLI (opcional) instalado
# Run project configuration and deploy on GitHub Actions
FIREBASE_PROJECT_ID={project-id} npm run setup
A chave de conta é criada automaticamente apenas com as permissões necessárias usando gcloud CLI (pule as etapas 8 e 9).
Sem gcloud CLI
# Run project configuration and first deploy
FIREBASE_PROJECT_ID={project-id} npm run setup -- --no-gcloud
npm run deploy
-
Crie uma conta de serviço para seu projeto do Firebase diretamente no Google Cloud Platform:
- Nomeie Cloud Commerce GH Actions (YOUR REPOSITORY);
- Descreva como A service account with permission to deploy Cloud Commerce from the GitHub repository to Firebase;
- Continue e selecione as seguintes permissões:
- Administrador do Firebase
- Leitor de chaves de API
- Leitor do Cloud Run
- Administrador do Cloud Functions
- Administrador do Artifact Registry
- Criador do App Engine
- Administrador do App Engine
- Administrador do Cloud Scheduler
- Usuário da conta de serviço
-
De volta na lista de contas de serviço, clique nos 3 pontos (ações) and selecione Gerenciar chaves, crie e faça o download de uma nova chave JSON para a conta recém criada;
- Configure os seguintes secrets no seu repositório do GitHub (Settings > Secrets > Actions):
FIREBASE_SERVICE_ACCOUNT
: Cole o JSON da chave do Google Cloud geradaECOM_AUTHENTICATION_ID
: Pegue no output do setup no CLIECOM_API_KEY
: Pegue no output do setup no CLI
🏁 🏁 🏁 Tudo pronto, boa!
O CDN do Firebase Hosting é rápido, mas não suporta Stale-While-Revalidate (contexto e feature request) e Hosting proxy + Cloud Functions (mesmo sem cold starts) nunca leva menos que 1s (TTFB provavelmente vai bater ~2s). Nós gostamos de respostas "instantâneas" mas queremos manter views dinâmicas renderizadas em servidor (por menos client-side JS), então stale caching é necessário e portanto precisamos de outra camada de CDN em produção (quando o domínio próprio for apontado).
-
Forma recomemdada usando bunny.net CDN com Perma Cache e Edge Rules para ISR:
- Obtenha sua chave de API em account details no painel do bunny.net;
- Salve em um secret chamado
BUNNYNET_API_KEY
no seu repositório do GitHub; - Edite .github/build-and-deploy (some 1) e confirme com a mensagem [run:bunny-setup].
-
OU usando bunny.net CDN com Stale Cache para SWR:
- Pull zone com seu domínio https://project.web.app do Firebase Hosting como URL de origem;
- SSL + Force SSL habilitados (previne redirecionar http://* para o domínio de origem);
- Smart Cache desabilitado (cache para tudo respeitando os cabeçalhos da resposta);
- Caching Query String Sort habilitado (ótimo para transformações de imagens);
- Caching Strip Response Cookies habilitado;
- Stale Cache while origin offline e while updating habilitados;
- Outras configurações de origem e cache podem ser mantidas desabilitadas;
- Você pode querer desabilitar algumas zonas na configuração de routing dependendo do target da loja.
-
OU usando Cloudflare Worker para ISR/SWR:
- SSL full;
- Page rule para */* (qualquer rota) com Cache Level: Cache Everything;
- Cache Reserve com Tiered Cache;
- Entrada A no DNS com proxy ativo apontando para o IP do seu projeto no Firebase Hosting;
- Worker swr com o código (quick edit) copiado de
cloud-commerce/packages/ssr/cloudflare/swr-worker.js
.
Note
Você pode querer remover ou editar a licença padrão (arquivo LICENSE) antes de publicar o conteúdo da sua loja.