Bem-vindo ao repositório do projeto Peo. Este projeto é uma entrega do MBA DevXpert Full Stack .NET e é referente ao quinto módulo do MBA Desenvolvedor.IO.
O objetivo principal é desenvolver uma plataforma educacional online com múltiplos bounded contexts (BC), aplicando DDD, TDD, CQRS, microsserviços e padrões arquiteturais para gestão eficiente de conteúdos educacionais, alunos e processos financeiros.
Além disso são aplicados conceitos de devops, como Git/GitHub, Docker, GitHub Actions, Kubernetes e Cultura DevOps.
- Jonatas Cruz
O projeto consiste em:
- API RESTful: Exposição dos endpoints necessários para os casos de uso.
- Autenticação e Autorização: Implementação de controle de acesso, diferenciando administradores e alunos.
- Acesso a Dados: Implementação de acesso ao banco de dados através de ORM.
- CI: Build automatizado de geração e push de imagens para o DockerHub através de GitHub Actions; análise de código estática através do SonarQube Cloud.
- CD: Automação de deploy através de kubernetes e docker-compose.
- Linguagem de Programação: C#
- Frameworks:
- ASP.NET Blazor
- ASP.NET Core Web API
- ASP.NET Aspire
- Entity Framework Core
- Componentes/Bibliotecas:
- MudBlazor
- NSwag
- MassTransit
- MediatR
- Banco de Dados:
- SQL Server
- Mensageria:
- RabbitMQ
- Autenticação e Autorização:
- ASP.NET Core Identity
- JWT (JSON Web Token) para autenticação na API
- Documentação da API:
- Swagger
- Devops:
- Kubernetes (manifestos e scripts completos)
- Docker e Docker Compose
- Aspir8 (geração automatizada dos manifestos)
- SonarQube
- GitHub Actions
- Imagens ASPNET e SDK Alpine
A estrutura do projeto é organizada da seguinte forma:
-
src: códigos-fonte da solução
-
tests: testes de integração e de unidade.
-
docs: documentação do projeto e requisitos
-
devops: scripts e manifestos para deploy (kubernetes)
-
README.md: Arquivo de Documentação do Projeto
-
FEEDBACK.md: Arquivo para Consolidação dos Feedbacks
-
DEVELOPMENT.md: Notas de apoio para o desenvolvimento
-
.gitignore: Arquivo de Ignoração do Git
-
.gitattributes: Atributos do Git
-
.editorconfig: Preferências de Estilo de Código
- .NET SDK 9.0 ou superior
- SQL Server
- Docker (ou outra solução de container)
- Visual Studio 2022 ou superior (ou qualquer IDE de sua preferência)
- Git
# Clone o repositório
git clone https://github.com/jonataspc/MBA-Peo-microservices.git
cd MBA-Peo-microservices
# Copie o arquivo de ambiente (IMPORTANTE!)
cp .env.example .env
# Edite o .env com suas configurações (opcional para desenvolvimento)
# Inicie toda a plataforma em modo desenvolvimento
docker compose -f docker-compose.yml -f docker-compose.override.yml up -d --build
# Ou em modo produção
docker compose up -d --buildURLs após inicialização:
- Frontend Blazor: http://localhost:3000
- BFF API: http://localhost:5000
- RabbitMQ Management: http://localhost:15672 (guest/guest)
🏗️ Arquitetura de Banco de Dados: Esta implementação usa o padrão "Instance/Database per Service" com instâncias SQL Server dedicadas:
- Identity DB: localhost:1433 (identity-db)
- Faturamento DB: localhost:1434 (faturamento-db)
- Gestão Alunos DB: localhost:1435 (gestao-alunos-db)
- Gestão Conteúdo DB: localhost:1436 (gestao-conteudo-db)
📖 Guia completo: Veja README.Docker.md para instruções detalhadas, benefícios da arquitetura e considerações de recursos.
Imagens hospedadas no Dockerhub container registry (https://hub.docker.com/repositories/jonataspc?search=peo):
# Clone o repositório
git clone https://github.com/jonataspc/MBA-Peo-microservices.git
cd MBA-Peo-microservices
# Deploy usando kubectl
kubectl apply -k devops/k8s-production/
# Destroi namespace (e respectivos pods)
kubectl delete namespace peo-platform-productionImagens locais (necessário build local - ver: devops/KUBERNETES-GUIDE.md):
# Clone o repositório
git clone https://github.com/jonataspc/MBA-Peo-microservices.git
cd MBA-Peo-microservices
# Realizar build das imagens (docker build...)
# ...
# Deploy usando kubectl
kubectl apply -k devops/k8s/
# Destroi namespace (e respectivos pods)
kubectl delete namespace peo-platformURLs após deploy:
- Frontend Blazor: http://localhost:30000
- BFF API: http://localhost:30001
- RabbitMQ Management: http://localhost:30002
📖 Guia completo: Veja devops/KUBERNETES-GUIDE.md para instruções detalhadas.
-
Clone o Repositório:
git clone https://github.com/jonataspc/MBA-Peo-microservices.gitcd MBA-Peo
-
Configuração do Banco de Dados:
- Por padrão, em ambiente de desenvolvimento, o projeto está configurado para utilizar SQLServer (uma instância/database para cada microsserviço).
- Caso necessário configure a string de conexão nas aplicações Web-API (
\src\Peo.XXX.WebApi\appsettings.XXX.json). - Rode o projeto para que a configuração do Seed crie o banco e popule com os dados básicos
-
Executar o Aspire AppHost (garantir que o Docker esteja em execução):
cd .\src\Peo.AppHost\dotnet run --launch-profile "https"- O dashboard do Aspire estará disponível em: https://localhost:17005 (utilizar o link disponível no console após o comando
dotnet run)) - Acesse a documentação da API do BFF (backend for frontend) em: https://localhost:7276/
- O frontend Blazor estará disponível em: https://localhost:7031/ . Utilizar os dados de login (admin) fornecidos abaixo ou registre um novo usuário (aluno).
-
Credenciais de teste para usuário administrativo:
Usuário: admin@admin.com
Senha: @dmin!
- JWT para API: As chaves de configuração do JWT estão nos arquivos
\src\Peo.XXX.Api\appsettings.json. - Migrações do Banco de Dados: As migrações são gerenciadas pelo Entity Framework Core. Não é necessário aplicar manualmente devido a configuração do seed de dados.
A documentação da API BFF está disponível através do Swagger. Após iniciar a API, acesse a documentação em https://localhost:7276/
Uma documentação extensiva pode ser obtida aqui.
A cobertura de código pode ser gerada manualmente/localmente através do script \scripts\run-tests-with-coverage.ps1 (que utiliza dotCover) e pode ser visualizada no caminho \scripts\report.html.
No repositório GitHub a action de compilação executa a compilação e os testes, além de gerar o relatório de cobertura de código e armazena-lo como artefato, que pode ser obtido:
- Acesse a aba "Actions" do repositório.
- Escolha o último workflow executado.
- Na seção Artifacts, baixar o arquivo ZIP, contendo o relatório em HTML.
Para geração dos manifestos do Kubernetes e deploy, utilize Aspir8 a partir do path \src\Peo.AppHost:
dotnet tool install -g aspirate --prerelease
# k8s
aspirate generate --output-path ..\..\devops\k8s
# docker-compose
aspirate generate --output-path ..\..\devops\docker-compose-manifests --output-format composeO projeto inclui uma pipeline automatizada para build e deploy das imagens Docker para o DockerHub quando há push na branch main.
Para que o deploy automático funcione, configure os seguintes secrets no repositório GitHub:
- DOCKERHUB_USERNAME: Seu nome de usuário do DockerHub
- DOCKERHUB_TOKEN: Token de acesso do DockerHub (recomendado em vez da senha)
Como criar um token no DockerHub:
- Acesse DockerHub e faça login
- Vá para Account Settings → Security → Access Tokens
- Clique em "New Access Token"
- Dê um nome descritivo (ex: "GitHub Actions Deploy")
- Copie o token gerado (guarde em local seguro, não será exibido novamente)
Como adicionar secrets no GitHub:
- Vá para o repositório no GitHub
- Clique em Settings → Secrets and variables → Actions
- Clique em "New repository secret"
- Adicione os dois secrets mencionados acima
peo-faturamento-webapipeo-gestaoalunos-webapipeo-gestaoconteudo-webapipeo-identity-webapipeo-web-bffpeo-web-spa
As imagens serão taggeadas com:
latest(sempre a versão mais recente da main)- Versão do projeto (extraída do arquivo
Peo.Core.csproj) - Hash do commit para rastreabilidade
- Este projeto é parte de um curso acadêmico e não aceita contribuições externas.
- Para feedbacks ou dúvidas utilize o recurso de Issues
- O arquivo
FEEDBACK.mdé um resumo das avaliações do instrutor e deverá ser modificado apenas por ele.