Blog
Gerenciando Infraestrutura de Produção do Firebase: Implantação Multi-Ambiente para um PWA em React
Olá, você já ouviu falar sobre a importância de gerenciar a infraestrutura de produção do Firebase? Eu estou aqui para compartilhar minhas experiências e dicas sobre como configurar e manter uma infraestrutura de produção robusta e escalável para um aplicativo PWA em React.
Recentemente, eu trabalhei em um projeto de gerenciamento de restaurantes que exigia uma arquitetura multi-tenant, controle de acesso baseado em funções, implantação em múltiplos ambientes e capacidade offline. Neste artigo, vou compartilhar o que aprendi sobre como configurar e manter uma infraestrutura de produção do Firebase para atender às necessidades desse tipo de aplicativo.
**Desafios**
O aplicativo precisava atender aos seguintes requisitos:
* Arquitetura multi-tenant: vários restaurantes usando uma única plataforma
* Controle de acesso baseado em funções: administrador, proprietário, gerente, operador e cliente
* Implantação em múltiplos ambientes: desenvolvimento, estágio e produção
* Capacidade offline: funciona sem conexão com a internet
* Atualizações em tempo real: pedidos sincronizados instantaneamente em todos os dispositivos
* Backup automatizado: proteção de dados de produção
**Tecnologias utilizadas**
* Frontend: React 18 + TypeScript + MUI
* Backend: Firebase (Autenticação, Firestore, Armazenamento, Hospedagem)
* Sistema de construção: pnpm workspaces (monorepo)
* CI/CD: GitHub Actions + Firebase CLI
* Backup: Console do Google Cloud (exportações agendadas)
**Configuração do projeto do Firebase**
Eu criei três projetos do Firebase separados para isolamento de ambiente adequado:
* Desenvolvimento: project-dev
* Estágio: project-staging
* Produção: project-production
Cada projeto tem seus próprios:
* Usuários de autenticação do Firebase
* Banco de dados do Firestore
* Bucket de armazenamento em nuvem
* Implantação de hospedagem
**Configuração de ambiente**
A parte complicada foi gerenciar as variáveis de ambiente corretamente. Aqui está a minha estrutura:
client/
├── .env # Desenvolvimento (usa emulador)
├── .env.staging # Implantação em estágio
├── .env.production # Implantação em produção
└── src/
└── constants/
└── config.ts # Configuração do Firebase
**Regras de segurança do Firestore com declarações personalizadas**
As regras de segurança impõem isolamento multi-tenant usando declarações personalizadas:
rules_version = ‘2’;
service cloud.firestore {
match /databases/{database}/documents {
// Função de ajuda para verificar acesso ao comerciante
function hasAccess(merchantId, allowedRoles) {
return request.auth != null &&
request.auth.token.merchants[merchantId] in allowedRoles;
}
// Dados do comerciante – apenas acessível por usuários atribuídos
match /merchants/{merchantId} {
allow read: if hasAccess(merchantId, [‘Admin’, ‘Owner’, ‘Manager’, ‘Operator’]);
allow write: if hasAccess(merchantId, [‘Admin’, ‘Owner’]);
}
// Pedidos – diferentes níveis de acesso
match /merchants/{merchantId}/orders/{orderId} {
allow read: if hasAccess(merchantId, [‘Admin’, ‘Owner’, ‘Manager’, ‘Operator’])
|| request.auth.token.isCustomer == true;
allow create: if hasAccess(merchantId, [‘Admin’, ‘Owner’, ‘Manager’, ‘Operator’])
|| request.auth.token.isCustomer == true;
allow update, delete: if hasAccess(merchantId, [‘Admin’, ‘Owner’, ‘Manager’]);
}
}
}
**Conclusão**
Gerenciar a infraestrutura de produção do Firebase é crucial para o sucesso de um aplicativo. Com a configuração correta, você pode garantir a escalabilidade, segurança e confiabilidade do seu aplicativo. Lembre-se de:
* Separar projetos do Firebase por ambiente
* Usar declarações personalizadas para controle de acesso multi-tenant
* Implementar múltiplas camadas de backup
* Testar as regras de segurançaoroughly
* Documentar tudo
* Usar o emulador do Firebase para desenvolvimento
* Criar scripts de ajuda do SDK do administrador
Espero que essas dicas sejam úteis para você! Se tiver alguma dúvida ou precisar de ajuda com a implantação do Firebase, sinta-se à vontade para entrar em contato.