Este repositório contém uma aplicação simples de Loja Virtual, composta por:
- Frontend: SPA em Angular 20, empacotada e servida por NGINX.
- Backend: API RESTful em Spring Boot 3.5.0 (Java 21).
- Banco de Dados: MySQL 8.0.
- Mensageria: Apache Kafka para eventos de pedidos.
- Infraestrutura: Docker Compose para orquestração local e Kubernetes (K8s) para deploy em ambiente de nuvem ou cluster local.
- Visão Geral
- Tecnologias Utilizadas
- Estrutura de Pastas
- Execução com Docker Compose
- Execução com Kubernetes
- Testes
- Considerações Finais
O projeto tem como objetivo fornecer uma base completa para um sistema de e-commerce com:
- Autenticação JWT
- CRUD de usuários, produtos e pedidos
- Eventos Kafka para processar pedidos
- Observabilidade via Spring Actuator
- Deploy local com Docker Compose ou em cluster com Kubernetes
- Java 21
- Spring Boot 3.5.0
- Spring Security
- Spring Data JPA
- Apache Kafka
- MySQL
- JUnit 5 e Mockito (testes)
- Angular 20
- RxJS
- Karma / Jasmine
- JWT
- Docker
- Docker Compose
- Kubernetes (Minikube)
- ELK Stack (Elasticsearch, Logstash, Kibana)
ShopEasy/
├── backend/
| |── src/
│ ├── pom.xml
│ └── Dockerfile
├── elk # Configuração do logstash
├── frontend/
| ├── src/
│ ├── package.json
│ └── Dockerfile
├── k8s/
├── .gitignore
├── docker-compose.yml # Manifests do Kubernetes
├── LICENSE # MIT LICENSE
├── minikube.sh # Script para rodar o minikube
└── README.md
git clone https://github.com/victormoni/ShopEasy.git
cd ShopEasy
docker compose up -d
- Frontend: http://localhost
- Actuator: http://localhost:8080/actuator
- Swagger: http://localhost:8080/swagger-ui/index.html
- Kafka UI: http://localhost:8085/
- Kibana: http://localhost:5601/
- H2 Database: http://localhost:8080/h2-console
- MySQL: localhost:3306
docker compose down
Execute o script minikube.sh pelo terminal como administrador na pasta raiz do projeto:
./minikube.sh
Execute o comando minikube tunnel em outro terminal como administrador para a loja funcionar, deixe o tunnel aberto enquanto estiver usando.
minikube tunnel
kubectl get svc -n ingress-nginx
echo "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE"
echo "ingress-nginx-controller LoadBalancer 10.109.168.86 192.168.49.2 80:31945/TCP,443:31383/TCP 5m"
Depois acesse no navegador: http://EXTERNAL-IP/"
Pegue o EXTERNAL-IP do comando anterior e troque pelo "localhost" nas URLs que vc for usar, lembre-se que dependendo da URL que for usar é necessário colocar a porta da URL:
- Exemplo:
- Testes backend com JUnit 5 + Mockito
- Testes de integração com banco H2
- Uso do Jacoco para Cobertura de Código
mvn clean verify
- Testes frontend com Karma + Jasmine
ng test
Obrigado por usar a ShopEasy!
Se tiver dúvidas ou sugestões, abra uma issue ou envie um Pull Request.
Autor: Victor Moni Licença: MIT License (consulte o arquivo LICENSE para mais detalhes)