Skip to content

jonataspc/MBA-Peo-microservices

Repository files navigation

.NET CI Docker Deploy Quality Gate Status Coverage Docker

PEO - Plataforma de Educação Online

Apresentação

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.

Autor

  • Jonatas Cruz

Proposta do Projeto

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.

Tecnologias Utilizadas

  • 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

Estrutura do Projeto

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

Como Executar o Projeto

Pré-requisitos

  • .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

Passos para Execução

Opção 1: 🐳 Docker Compose

# 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 --build

URLs após inicialização:

🏗️ 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.

Opção 2: ☸ Kubernetes (Recomendado para produção)

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-production
Imagens 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-platform

URLs após deploy:

📖 Guia completo: Veja devops/KUBERNETES-GUIDE.md para instruções detalhadas.

Opção 3: 🔨 Desenvolvimento Local com Aspire

  1. Clone o Repositório:

    • git clone https://github.com/jonataspc/MBA-Peo-microservices.git
    • cd MBA-Peo
  2. 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
  3. 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).
  4. Credenciais de teste para usuário administrativo:

Usuário: admin@admin.com

Senha: @dmin!

Instruções de Configuração

  • 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.

Documentação da API

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/

Documentação do projeto

Uma documentação extensiva pode ser obtida aqui.

Code coverage e CI

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.

DevOps e Deploy

Aspir8 (Geração Automática de Manifestos)

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 compose

Deploy Automático para DockerHub

O projeto inclui uma pipeline automatizada para build e deploy das imagens Docker para o DockerHub quando há push na branch main.

Configuração dos Secrets no GitHub:

Para que o deploy automático funcione, configure os seguintes secrets no repositório GitHub:

  1. DOCKERHUB_USERNAME: Seu nome de usuário do DockerHub
  2. DOCKERHUB_TOKEN: Token de acesso do DockerHub (recomendado em vez da senha)

Como criar um token no DockerHub:

  1. Acesse DockerHub e faça login
  2. Vá para Account Settings → Security → Access Tokens
  3. Clique em "New Access Token"
  4. Dê um nome descritivo (ex: "GitHub Actions Deploy")
  5. Copie o token gerado (guarde em local seguro, não será exibido novamente)

Como adicionar secrets no GitHub:

  1. Vá para o repositório no GitHub
  2. Clique em Settings → Secrets and variables → Actions
  3. Clique em "New repository secret"
  4. Adicione os dois secrets mencionados acima

Serviços que serão deployados:

  • peo-faturamento-webapi
  • peo-gestaoalunos-webapi
  • peo-gestaoconteudo-webapi
  • peo-identity-webapi
  • peo-web-bff
  • peo-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

Avaliação

  • 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.

About

PEO - Plataforma de Educação Online (microservices)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors