- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1
Devops ‐ Deploy
A prática de DevOps adotada pela equipe visa integrar o desenvolvimento com operações, permitindo a entrega contínua e automatizada de aplicações em produção. A implementação do pipeline CI/CD com GitHub Actions proporciona maior agilidade, controle e rastreabilidade durante o processo de entrega, reduzindo erros humanos e aumentando a confiabilidade dos deploys.
Entre os principais conceitos utilizados estão:
- CI/CD (Integração Contínua e Entrega Contínua) com GitHub Actions
- Ambientes containerizados com Docker
- Pipelines independentes para cada repositório, com deploy individualizado e isolado
No contexto deste projeto, a automação dos deploys foi fundamental para manter a consistência entre os ambientes de desenvolvimento e produção. A adoção de DevOps possibilitou:
- Deploy rápido e sem intervenção manual
- Maior confiabilidade ao subir atualizações
- Padronização entre os ambientes (dev/prod)
Prós:
- Redução de erros operacionais
- Integração simples com o GitHub
- Escalabilidade futura com mínima adaptação
Contras/dificuldades enfrentadas:
- Curva de aprendizado inicial para configurar workflows CI/CD
- Configuração manual da infraestrutura na EC2
- Dependência da configuração correta dos secrets para conexão SSH
A automação dos deploys foi feita via GitHub Actions, com pipelines separados por repositório, integrando cada um com a instância EC2 da AWS. Cada aplicação (ETL em Python, backend em Spring Boot, frontend em Vue) possui seu próprio repositório e workflow YAML individual.
Cada repositório contém:
- Um Dockerfile específico para sua aplicação
- Um workflow .ymlno GitHub Actions para build e deploy individual
O processo de deploy consiste em:
- Gatilho a cada push na branch main
- Conexão segura via SSH com EC2 usando chave privada criptografada
- Pull do repositório na máquina e execução do docker buildedocker run
Resumo técnico:
- Arquivos .github/workflows/deploy.ymlseparados em cada repositório
- Chaves SSH armazenadas via GitHub Secrets
- Dockerfiles específicos por serviço
- Deploy automatizado e desacoplado entre aplicações
- 
Problema: Primeiros testes falharam por permissões incorretas de execução do SSH no runner. 
 Solução: Corrigido com permissões600para a chave viachmod.
- 
Problema: Deploy falhava ao acessar diretório do projeto na EC2. 
 Solução: Criado script para garantir o caminho correto do projeto e permissões apropriadas.
- 
Problema: Diferentes configurações de build entre Vue, Spring e Python. 
 Solução: Separação clara por repositório, cada um com seu Dockerfile e pipeline CI/CD própria.
| Tecnologia | Alternativas | Justificativa | 
|---|---|---|
| GitHub Actions | Jenkins, GitLab CI | Integração nativa com o GitHub, fácil configuração, baixo overhead | 
| EC2 | AWS ECS, Heroku | Maior controle da infraestrutura e suporte a serviços heterogêneos | 
| Docker | Kubernetes (K8s) | Solução mais simples e direta para containerização individualizada | 
- EC2 foi escolhida por oferecer flexibilidade de configuração e permitir hospedar múltiplos serviços em um único servidor, ideal para o estágio inicial do projeto.
- Containers Docker individuais, um por aplicação, com repositórios separados e pipelines independentes.
- Divisão em múltiplos repositórios mantém a separação de responsabilidades entre os serviços, com deploys isolados e mais fáceis de versionar.
- O uso de EC2 também permite upgrade vertical ou horizontal conforme o crescimento da base de usuários.
- 
Tipo atual: t3.medium(2 vCPUs, 6 GiB RAM)
- Sistema: Ubuntu 22.04 LTS
- Suficiente para hospedar os três serviços (ETL, API, Frontend) com baixa concorrência simultânea.
- Custos reduzidos e operação simplificada na fase inicial de implantação.
- Boa base para testar automações, pipelines e a confiabilidade do deploy.
A instância t3.medium foi escolhida por equilibrar custo-benefício e oferecer recursos suficientes para hospedar três serviços containerizados simultaneamente:
O serviço de ETL em Python executa tarefas periódicas com uso moderado de CPU e memória.
A API em Spring Boot é responsiva e escalável, porém com carga baixa inicialmente.
O frontend em Vue consome poucos recursos e pode ser servido diretamente por um servidor web leve como Nginx.
Além disso, a instância suporta testes de carga, pipelines CI/CD em execução e acessos simultâneos dentro da expectativa atual de até 100 usuários no primeiro mês.
A arquitetura baseada em Docker garante isolamento e reutilização dos recursos de forma eficiente, maximizando o aproveitamento dos 2 vCPUs e 6 GB de memória disponíveis.
Para atender ao crescimento previsto:
- Monitoramento de métricas com CloudWatch e/ou Prometheus + Grafana.
- Adoção de Auto Scaling com múltiplas EC2 ou migração gradual para AWS ECS ou EKS (container orchestration com escalabilidade automática).
- Separação de serviços críticos em instâncias distintas ou em fargate containers.
- Armazenamento de dados e logs fora da EC2 (ex: S3, RDS, etc.), reduzindo acoplamento e melhorando performance.
Esse planejamento garante que o ambiente atual atenda à demanda inicial, mas já está pronto para ser evoluído com mínima refatoração à medida que a base de usuários cresce.