1. Desenvolvimento e Integração Contínua (CI/CD):
- GitLab Source Repository: O código-fonte do projeto é gerenciado no GitLab, onde os desenvolvedores fazem versionamento e colaboram no desenvolvimento.
- GitLab Runner com Docker: Na AWS, uma instância EC2 hospeda um GitLab Runner dentro de um container Docker. Esse Runner é responsável por executar pipelines de CI/CD, que automatizam os processos de build, testes e deploy do aplicativo. Isso garante que novas funcionalidades ou correções de bugs sejam entregues de forma ágil e contínua.
2. Autenticação:
- Firebase Authentication: O Firebase é utilizado para autenticar os usuários tanto no aplicativo mobile quanto na versão web. Isso garante que apenas usuários autorizados possam acessar a aplicação e seus dados. A escolha do Firebase simplifica o processo de autenticação, eliminando a necessidade de construir uma solução personalizada de gerenciamento de usuários.
3. Backend (Node.js):
- Node.js em Docker: O backend da aplicação é executado em um container Docker com Node.js, o que traz flexibilidade e portabilidade para o ambiente. O Node.js é responsável por processar as requisições enviadas pelos clientes (mobile e web), realizar a lógica de negócios e se comunicar com os serviços externos, como o Amazon S3. Esse backend atua como um ponto central para gerenciar as interações entre o frontend e os serviços externos.
4. Frontend:
- Flutter Mobile: O aplicativo é desenvolvido com Flutter para rodar nativamente em dispositivos Android e iOS, aproveitando uma única base de código para ambas as plataformas. O Flutter facilita o desenvolvimento multiplataforma, o que reduz o tempo de desenvolvimento e a complexidade de manutenção.
- Flutter Web: O frontend web também é desenvolvido com Flutter e pode ser acessado através de navegadores como Chrome, Firefox, Edge e Safari. A aplicação web interage com o backend Node.js, enviando e recebendo requisições para a mesma lógica de negócios que o aplicativo mobile.
5. Armazenamento de Dados:
- Amazon S3 (Simple Storage Service): O S3 é utilizado para armazenar arquivos e dados estáticos, como imagens e documentos. Ele fornece escalabilidade automática, alta durabilidade e segurança para os dados armazenados, e é acessado diretamente pelo backend Node.js para armazenar ou recuperar dados conforme necessário.
6. Fluxo de Comunicação:
- Flutter (Mobile/Web) -> Node.js: O fluxo de dados começa com o aplicativo Flutter (mobile ou web) enviando requisições HTTP ao backend Node.js rodando no Docker. Essas requisições podem incluir operações como autenticação, envio de dados ou solicitações de arquivos.
- Node.js -> Firebase & Amazon S3: O backend Node.js lida com as requisições, utilizando o Firebase para autenticação e o Amazon S3 para armazenamento de arquivos. Uma vez processadas, as respostas são enviadas de volta ao frontend Flutter.
- Firebase para Autenticação Direta: O Flutter também interage diretamente com o Firebase para autenticação, validando os tokens antes de enviar requisições mais complexas ao backend.
Resumo Final:
Essa arquitetura combina flexibilidade, escalabilidade e simplicidade. O GitLab Runner com Docker oferece automação de CI/CD eficiente na AWS, enquanto o Node.js continua como a camada de backend para processar lógica de negócios e comunicação entre o frontend e serviços externos. O Flutter proporciona uma solução multiplataforma para o desenvolvimento do frontend, reduzindo custos e tempo de desenvolvimento. O Firebase Authentication simplifica o controle de acesso dos usuários e o Amazon S3 cuida do armazenamento de dados e arquivos.
Essa abordagem modular facilita a escalabilidade e manutenção da aplicação, ao mesmo tempo que promove uma infraestrutura robusta e ágil.