Pipeline de DevOps ponta a ponta para uma aplicação Flask, construído por uma estudante de Ciência da Computação em Porto Alegre.
Este projeto demonstra um fluxo de trabalho de DevOps completo para uma aplicação leve em Python (Flask), desde o desenvolvimento local até a implantação na nuvem, monitoramento e configuração segura. Ele foi projetado para ser reprodutível, documentado e pronto para produção - mesmo como um projeto de aprendizado.
O objetivo principal deste projeto é criar uma base prática e demonstrável para as seguintes competências de DevOps:
- Automação de CI/CD: Automatizar testes e implantação com GitHub Actions.
- Infraestrutura como Código (IaC): Provisionar infraestrutura na nuvem com OpenTofu(Terraform) e DigitalOcean.
- Observabilidade: Monitorar o desempenho da aplicação e a saúde da infraestrutura com New Relic.
- Gerenciamento de Segredos: Gerenciar chaves de API e outras informações sensíveis de forma segura com Doppler.
- Documentação: Documentar decisões técnicas e arquitetura de forma clara e concisa.
✨ Este projeto faz parte do meu portfólio de DevOps enquanto estudante de Ciência da Computação na Unisinos (Porto Alegre).
A seleção de ferramentas foi orientada para o uso de tecnologias modernas e populares no mercado, com um foco especial em aproveitar os benefícios do GitHub Student Developer Pack.
| Categoria | Ferramenta | Benefício do GitHub Student Pack |
|---|---|---|
| Aplicação | Python + Flask | — |
| CI/CD | GitHub Actions | ✅ GitHub Pro |
| Infraestrutura | Terraform + DigitalOcean | ✅ $200 em créditos |
| Observabilidade | New Relic | ✅ Conta Pro gratuita |
| Secrets | Doppler | ✅ Team Plan grátis |
| Desenvolvimento | GitHub Codespaces | ✅ Acesso Pro |
A arquitetura do projeto é dividida em três componentes principais:
- Aplicação (
/app): Uma aplicação web simples em Flask que serve como carga de trabalho para o pipeline. - Infraestrutura como Código (
/tofu): Código Terraform para provisionar os recursos necessários na DigitalOcean. - CI/CD (
/.github/workflows): Workflows do GitHub Actions que orquestram o build, teste e deploy da aplicação.
infra-pipeline-poa/
├── .github/
│ └── workflows/
│ └── ci.yml
├── app/
│ ├── app.py
│ └── requirements.txt
├── tofu/
│ ├── environments/
│ │ ├── dev/
│ │ └── prod/
│ ├── modules/
│ │ ├── compute/
│ │ ├── database/
│ │ └── networking/
│ ├── scripts/
│ │ └── cloud-init.yaml
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── versions.tf
└── README.md
/app: Contém a aplicação Flask. É uma aplicação "Hello, World!" que foi configurada para ser containerizada e implantada./tofu: Organizado com uma estrutura de módulos e ambientes para promover a reutilização e a separação de configurações. O diretóriomodulescontém os componentes reutilizáveis da infraestrutura (computação, rede, banco de dados), enquantoenvironmentsdefine as configurações específicas para cada ambiente (desenvolvimento e produção)./.github/workflows/ci.yml: Define o pipeline de CI/CD. Atualmente, ele está configurado para ser acionado em cada push para o branchmain, executando as etapas de build, teste e implantação.
Para reproduzir este projeto, você precisará de contas nas seguintes plataformas:
- GitHub
- DigitalOcean
- New Relic
- Doppler
-
Fork este repositório: Comece criando um fork deste repositório para a sua própria conta do GitHub.
-
Configure o Doppler: Crie um projeto no Doppler e adicione os segredos necessários (chaves de API da DigitalOcean e New Relic). O arquivo
.doppler.yamlno repositório já está configurado para usar o Doppler CLI para injetar os segredos no ambiente de CI/CD. -
Configure os Segredos do GitHub: Adicione o token de acesso do Doppler como um segredo no seu repositório GitHub (
DOPPLER_TOKEN).
Com a configuração concluída, qualquer push para o branch main irá acionar o workflow do GitHub Actions. O pipeline irá:
- Fazer o checkout do código.
- Configurar o ambiente com as ferramentas necessárias (Terraform, Python, etc.).
- Injetar os segredos do Doppler no ambiente.
- Executar o Terraform para provisionar ou atualizar a infraestrutura.
- Construir e testar a aplicação Flask.
- Implantar a aplicação na infraestrutura provisionada.