Skip to content

📝 Relatório de Contribuição – Sprint 0

Disciplina: Gestão de Configuração e Evolução de Software

Equipe: OWASP (Times Blue e Red)

Comunidade/Projeto de Software Livre: OWASP (ej-application)


1. Objetivos da Sprint

  • Instalar a aplicação local.
  • Estudar infraestrutura da aplicação.
  • Documentar primeiros aprendizados sobre ambiente.

2. Entregas Coletivas

Entrega Status (Concluído/Parcial/Pendente) Link/Referência Observações
Ambiente local configurado Concluído Original: Repositório ej-application Execução com inv docker-up
Relatório de atividades da Sprint 0 Concluído Documento atual
Identificação das práticas de GCES do projeto Concluído 📚 Práticas de GCES no EJ Documento atual
Configuração inicial do ambiente do EJ Concluído - ⚙️ Configuração de Ambiente Documento atual
Estudo sobre a infraestrutura da aplicação Concluído - 🏗️ Infraestrutura Documento atual

3. Contribuições Individuais

Integrante Contribuições Links (PRs, Issues, Docs) Observações
Mateus Vieira Documentação das práticas de GCES do EJ 📚 Práticas de GCES no EJ
Miguel Arthur Documentação da Infraestrutura do EJ 🏗️ Infraestrutura
Marcus Vinicius Documentação da Configuração inicial do ambiente do EJ ⚙️ Configuração de Ambiente
Júlio Costa Documentação das Maiores Dificuldades Maiores Dificuldades
Henrique Quenino Documentação de Aprendizados Lições Aprendidas

4. Maiores Avanços

✨ Destaques da Sprint

  • Aplicação instalada e containers rodando corretamente.
  • Equipe conseguiu compreender dependências principais (Docker, Python, Invoke).
  • Alinhamento com o mentor da disciplina sobre o cronograma e entregas.

📚 Práticas de GCES no EJ

Comunicação e Fluxo:

  • Sempre usar grupos públicos — Telegram — (evitar contato privado).
  • Ambiente configurado via Docker conforme README.md.
  • Organização por sprints + OKRs, com Kanban para acompanhamento.

Desenvolvimento e Boas Práticas:

  • Branchs a partir da develop, nome ligando ao ID da issue.
  • Testes: unitários, integração (Pytest), aceitação (Cypress).
  • Código: Black (formatação), Ruff (análise estática).
  • Frontend: BEM CSS, SASS, HTMX, responsividade com flex/grid.
  • Priorizar soluções simples, coesas e “pythonicas”.

Revisão e Deploy:

  • Auto-revisão obrigatória antes de pedir análise do MR.
  • MR sem testes ou com erros não é revisado.
  • Atualizar documentação (Sphinx) e traduções (Django i18n) quando necessário.
  • MR aprovado ativa CI/CD, atualizando homologação e produção automaticamente.

⚙️ Configuração de Ambiente

1. Instalação do Docker

A aplicação é executada em contêineres, então o Docker é um requisito fundamental. Então para atualizar os pacotes e instalar as dependências do Docker:

Comando:

  • sudo apt update
  • sudo apt install -y ca-certificates curl
Instalar o Docker Engine e plugins

Comando:

  • sudo apt update
  • sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2. Instalação e Configuração do Pyenv e Python

instalar o pyenv e suas dependências:

Comando:

  • curl https://pyenv.run | bash
  • sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev git

Para instalar o Python para o projeto pós configuração do do Pyenv, é necessário utilizar a versão ressaltada no proprio README.rd do projeto, sendo ela a versão 3.11 do Python.

Comando:

  • pyenv install 3.11.9.
3. Clonar Repositório

Para começar a configurar o ambiente, primeiramente é necessario clonar o repositório do projeto para a maquina local. Logo após isso, adentrar a pasta do projeto.

Comando:

  • git clone https://gitlab.com/pencillabs/ej/ej-application
  • cd ej-application
4. Instalar o Invoke

O projeto utiliza a ferramenta de invoke para gerenciar os comandos do Docker. O README.md é instruido a instalá-lo utilizando o pip3.

Comando:

  • pip3 install invoke==2.0.0 django-environ --user
5. Iniciar a Aplicação

Com o invoke instaladom, agora é utilizar o seguinte comando para construir as imagens Docker e iniciar todos os contêiners da aplicação: Esse comando do Docker-up serve para baixar todas as dependências, criar os contêineres e executar a aplicação. O terminal ficará exibindo os logs em tempo real.

Comando:

  • inv docker-up
6. Acessar a Aplicação

Assim que os contêineres estiverem rodando, a aplicação estará disponível no seu navegador nesse endereço:

  • http://localhost:8000 ---
7. Outros comandos do Projeto

No README.md do projeto também é listado outros comandos úteis para gerenciar o ambiente Docker através do invoke:

  • inv docker-stop: Para os contêineres da aplicação.
  • inv docker-logs: Mostrar os logs do serviço do Django.
  • inv docker-rm: Remove os contrêineres da aplicação.
  • inv docker-exec "comando": Executa um comando shell dentro do contêiner do Django.

🏗️ Infraestrutura

Análise da Infraestrutura do Projeto EJ-Platform

Ao analisar o projeto, Notamos que ele utiliza uma infraestrutura moderna e bem organizada, baseada em contêineres com Docker. Uma prática interessante é que a arquitetura é dividida em dois cenários distintos: um para desenvolvimento e outro para produção.

1. Ambiente de Desenvolvimento

Para o desenvolvimento do dia a dia, o projeto usa uma configuração mais simples, definida no arquivo docker-compose.yml. Ela é composta por apenas dois serviços principais:

  • server: Um contêiner que roda a aplicação Django com o servidor de desenvolvimento embutido. Isso é ótimo para o desenvolvimento, pois o código é sincronizado em tempo real, e qualquer alteração é refletida na hora.
  • db: Um contêiner com o banco de dados PostgreSQL.

Essa abordagem simplifica muito a configuração inicial e permite que o desenvolvedor foque apenas no código.

2. Ambiente de Produção

Para o ambiente de produção, a arquitetura é mais robusta e focada em performance e segurança, como é esperado de uma aplicação real. Embora não haja um único arquivo de configuração que defina toda a estrutura, as dependências declaradas no arquivo pyproject.toml apontam para a seguinte estrutura:

  • Gunicorn: É o servidor que executa a aplicação Django de forma otimizada para produção, aguentando mais tráfego que o servidor de desenvolvimento.
  • PostgreSQL: O mesmo banco de dados, responsável por guardar os dados.
Conclusão

Em resumo, o projeto demonstra maturidade ao fornecer uma configuração de desenvolvimento limpa e auto contida, enquanto desacopla a aplicação da infraestrutura de produção. Em vez de definir uma configuração de produção rígida dentro do repositório, ele indica os componentes essenciais para produção (servidor Gunicorn) através de suas dependências e espera que o ambiente de implantação final gerencie o resto da infraestrutura (como o banco de dados e o reverse proxy).


5. Maiores Dificuldades

A utilização do Docker facilitou em subir o ambiente isolado com todas as dependências instaladas, a configuração do ambiente foi concluída com sucesso, sem ocorrências de problemas técnicos, mas alguns integrantes tiveram dificuldade parar subir o ambiente usando WSL no Windows, o projeto aparenta ser bem documentado e é possível subir uma página de documentação local Sphinx rodando inv docker-exec "inv docs" após a configuração inicial do ambiente.


6. Lições Aprendidas

Nesta sprint, o principal aprendizado foi sobre a importância de ter um ambiente de desenvolvimento bem configurado e documentado. O uso do Docker possibilita isolar todas as dependências do projeto em containers, garantindo que todos trabalhem em ambientes idênticos, o que elimina o famoso problema do “funciona na minha máquina”. Por fim concluimos que praticar essas técnicas acelera o desenvolvimento, reduz retrabalho, proporciona escalabilidade e melhora a colaboração entre times, entregando mais qualidade durante todo o ciclo de vida do software.


7. Planejamento para a Próxima Sprint

Blue Team

  • Mapear arquitetura e superfícies de ataque:
  • Estudar os frameworks de modelagem (STRIDE, DREAD, PATH)
  • Recolher o máximo de documentação do projeto
  • Realizar a modelagem de riscos utilizando o STRIDE

Red Team

  • Estudar vetores de ataque:
    • SQL Injection
    • CSRF
    • XSS e Clickjacking
    • IDOR
    • Sessões/Cookies inseguros
    • Brute force / Rate limiting