Home | Escopo e Cronograma | Git Workflow | Design e Mockups | Configuração | Arquitetura | Infraestrutura | BD | Gerência |
---|
Infraestrutura AWS
No processo de deploy descrito no diagrama, o backend (APIs) e o banco de dados (PostgreSQL) são configurados em containers Docker executados em uma instância EC2. As imagens Docker desses serviços são buildadas a partir dos repositórios GitLab (revforce-api
e revforce-front
) por meio de um GitLab Runner também em container. Após cada build de backend, a EC2 puxa a imagem mais recente do Amazon ECR e inicia o container das APIs, garantindo que a versão em produção esteja sempre atualizada. Para o frontend, o fluxo de deploy faz com que, a cada push no repositório revforce-front
, o GitLab Runner gere os arquivos estáticos e transfira tudo para um bucket Amazon S3, permitindo que o site seja servido diretamente de um storage estático. Esse conjunto de serviços automatiza completamente o ciclo de CI/CD: do commit no GitLab até a aplicação em produção, contemplando banco, APIs e front-end.
Diagrama de Deploy
Componentes e Benefícios
A seguir, cada bloco do diagrama é explicado de forma resumida, com o propósito e o motivo de uso:
EC2 Instance
- O que é: Máquina virtual Linux hospedada na AWS.
-
Para que serve:
- Executar o Docker, que por sua vez roda todos os containers (Postgres, RevForce APIs e GitLab Runner).
- Centralizar o pipeline de CI/CD sem necessidade de múltiplos servidores.
-
Benefícios:
- Custos controlados (tudo em uma instância).
- Simplicidade de gerenciamento: basta acesso SSH/Console para inspecionar logs e containers.
Docker
- O que é: Plataforma de contenção de aplicações (containers).
-
Para que serve:
- Isolar cada serviço (banco, APIs, runner) em ambientes independentes e facilmente recriáveis.
- Garantir que todos rodem na mesma versão, sem conflitos de dependências.
-
Benefícios:
- Portabilidade (mesmo container dev → prod).
- Reprodutibilidade: se precisar recriar, basta puxar a imagem correta.
Postgres (Container Docker)
- O que é: Serviço de banco de dados relacional.
-
Para que serve:
- Armazenar tabelas, esquemas, usuários, dados do RevForce.
- Receber conexões do container de APIs (
RevForce APIs
).
-
Benefícios:
- Dados armazenados no Database Volume (EBS), garantindo persistência mesmo que o container seja parado ou recriado.
- Facilidade de upgrade ou rollback simplesmente trocando a imagem Docker.
RevForce APIs (Container Docker)
- O que é: Back-end do sistema empacotado em imagem Docker.
-
Para que serve:
- Processar requisições do front-end e de consumidores externos.
- Realizar CRUD no banco Postgres e aplicar regras de negócio.
-
Benefícios:
- Deploy atômico: o GitLab Runner builda e faz push da imagem ao ECR, e a EC2 “puxa” a versão mais nova para produção.
GitLab Runner (Container Docker)
- O que é: Executor de pipelines CI/CD do GitLab, registrado junto aos repositórios.
-
Para que serve:
- Escutar eventos (push/merge) nos repositórios
revforce-front
erevforce-api
. - Executar estágios definidos em
.gitlab-ci.yml
:- revforce-front: build do front-end e sincronização com S3.
- revforce-api: testes, build de imagem Docker e push para ECR.
- Escutar eventos (push/merge) nos repositórios
-
Benefícios:
- Automação total do ciclo de deploy: commit → build → deploy.
- Não há necessidade de runners externos: tudo roda dentro da mesma EC2.
EBS – Database Volume
- O que é: Volume anexado à EC2.
-
Para que serve:
- Persistir o diretório de dados do PostgreSQL.
- Garantir durabilidade: mesmo que o container Postgres seja recriado, os dados permanecem.
-
Benefícios:
- Snapshot fácil para backup.
- Redimensionamento de volume sem interrupção.
EBS – Root Volume
- O que é: Volume de bloco principal que contém o sistema operacional da EC2.
-
Para que serve:
- Armazenar arquivos de sistema, configurações, dependências e logs do container das APIs.
- Espaço onde o Docker armazena camadas e volumes ligados a serviços diversos (exceto o banco, que tem volume específico).
-
Benefícios:
- Manutenção simplificada: tudo no Linux (atualizações, backups, logs).
- Permite persistir arquivos de configuração sem poluir o volume do container.
Amazon S3
- O que é: Serviço de armazenamento de objetos (arquivos) escalável e altamente disponível.
-
Para que serve:
- Hospedar arquivos estáticos do front-end (HTML, CSS, JavaScript, imagens).
- Servir diretamente ao usuário final sem necessidade de servidor Web tradicional.
-
Benefícios:
- Custo muito baixo para hospedagem estática.
- Alta performance / baixa latência.
- Facilidade de versionamento e políticas de expiração.
Amazon ECR (Elastic Container Registry)
- O que é: Registro privado de imagens Docker gerenciado pela AWS.
-
Para que serve:
- Armazenar as imagens do
revforce-api
geradas pelo GitLab Runner.
- Armazenar as imagens do
-
Benefícios:
- Integração nativa com EC2 e IAM Roles, sem necessidade de credenciais estáticas.
- Segurança e escaneamento de vulnerabilidades.
- Alta disponibilidade e baixa latência para pull de imagens em produção.
GitLab – Repositórios
-
revforce-front
- Contém código-fonte do front-end.
- Define pipeline de build → deploy (upload para S3).
-
revforce-api
- Contém código-fonte do back-end.
- Define pipeline de testes → build Docker → push para ECR.
Benefícios dos repositórios no GitLab:
- Versionamento completo do código.
- Configuração central de CI/CD (arquivo
.gitlab-ci.yml
). - Controle de acesso e revisão de código (Merge Requests, Revisões, Labels).
Conclusão
A infraestrutura apresentada otimiza o ciclo de desenvolvimento e deploy do RevForce ao:
- Centralizar todo o CI/CD em um único GitLab Runner dentro da EC2.
- Garantir persistência de dados via EBS (Database e Root).
- Escalar o front-end de forma simples e econômica diretamente no S3.
- Versionar e distribuir o back-end como imagem Docker pelo ECR.
- Reduzir custos operacionais ao não manter múltiplos servidores separados, concentrando tudo em uma única instância com containers.
Com essa arquitetura, bastam alguns comandos no GitLab (push em branches específicas) para que toda a stack (frontend + backend + banco) seja automaticamente atualizada em produção, garantindo agilidade e confiabilidade no fluxo de deploy contínuo.