https://github.com/patinaomi/projeto-java-thymeleaf
Repositório destinado para a entrega da sprint 4 da matérias de Devops e Java.
https://github.com/patinaomi/projeto-java-thymeleaf
devops java spring spring-boot spring-mvc spring-security thymeleaf thymeleaf-java thymeleaf-template-engine
Last synced: about 1 month ago
JSON representation
Repositório destinado para a entrega da sprint 4 da matérias de Devops e Java.
- Host: GitHub
- URL: https://github.com/patinaomi/projeto-java-thymeleaf
- Owner: patinaomi
- Created: 2025-03-18T00:58:15.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-23T13:58:47.000Z (about 1 year ago)
- Last Synced: 2026-05-07T06:42:12.731Z (about 1 month ago)
- Topics: devops, java, spring, spring-boot, spring-mvc, spring-security, thymeleaf, thymeleaf-java, thymeleaf-template-engine
- Language: Java
- Homepage:
- Size: 1000 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# **Challenge OdontoPrev**
[](https://github.com/patinaomi/projeto-java-thymeleaf/actions/workflows/sync-to-azure-devops.yml)
## 📌 **Índice**
1. [Sobre o Projeto](#-sobre-o-projeto)
2. [Implementações Java – Sprint 4](#️-implementações-java--sprint-4)
3. [Implementações DevOps – Sprint 4](#️-implementações-devops--sprint-4)
4. [Vídeos Demonstrativos](#-vídeos-demonstrativos)
5. [Arquitetura do Projeto](#-arquitetura-do-projeto)
6. [Configuração das Pipelines](#-configuração-das-pipelines)
7. [Rodando o Projeto com Docker](#-rodando-o-projeto-com-docker)
8. [Equipe](#-equipe)
## 💡 **Sobre o Projeto**
O sistema é uma aplicação Java com Spring Boot, desenvolvida para gerenciar clínicas odontológicas, com recursos para cadastro de dentistas, clínicas e feedbacks. Foi implementado um ambiente DevOps com CI/CD utilizando **Azure DevOps** e deploy em **na nuvem**. O banco de dados é **Oracle**, também hospedado em container Docker.
#### **⚙️ Funcionalidades principais**
✅ Cadastro e gerenciamento de dentistas, clínicas e consultas.
✅ Recebimento e gestão de feedbacks dos atendimentos.
✅ Dashboard moderno e responsivo para facilitar a navegação.
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
## ⚙️ Implementações Java – Sprint 4
Nesta 4ª Sprint, a aplicação Java foi finalizada com arquitetura **full MVC**, contemplando os requisitos funcionais propostos:
- 🔐 **Autenticação e Autorização**
Implementação do **Spring Security**, com autenticação baseada em formulário e controle de acesso por **perfis de usuário (roles)**, permitindo acesso diferenciado para clínicas e dentistas.
- 🌐 **Internacionalização**
A aplicação conta com suporte a múltiplos idiomas por meio do recurso de internacionalização do Spring. Os arquivos `.properties` foram configurados para exibir textos em português e inglês de forma dinâmica.
- 📬 **Mensageria com RabbitMQ**
Integração com o **RabbitMQ** para envio e consumo de mensagens assíncronas, como no envio de e-mails de cadastro. A configuração foi realizada com produtores e consumidores devidamente registrados.
- 📊 **Monitoramento com Spring Boot Actuator**
Endpoints de monitoramento e métricas foram habilitados com o **Spring Boot Actuator**, permitindo acompanhar a saúde da aplicação, consumo de recursos e estatísticas de uso.
- 🤖 **Inteligência Artificial com Spring AI**
Recursos de IA foram adicionados utilizando o **Spring AI** com integração à API da OpenAI (GPT-3.5 Turbo). O sistema é capaz de **gerar resumos automáticos de feedbacks dos pacientes**, proporcionando insights inteligentes para as clínicas.
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
## ⚙️ Implementações DevOps – Sprint 4
Nesta sprint, foi implementada uma esteira completa de **CI/CD** utilizando o **Azure DevOps**, com o objetivo de automatizar o build, push e deploy da aplicação na nuvem.
- 🚀 **Integração Contínua (CI)**
A pipeline é disparada automaticamente a cada push no repositório Git. Ela realiza o `build` do projeto com Maven, empacota a aplicação como **imagem Docker** e faz o push para o **Azure Container Registry (ACR)**.
- 📦 **Entrega Contínua (CD)**
Após a publicação da imagem no ACR, a pipeline de CD realiza o deploy automático para o **Azure Container Instance (ACI)**, expondo a aplicação com **IP público**, tornando possível acessá-la diretamente pelo navegador.
- 🔄 **Automação e Rastreabilidade**
O processo automatizado proporciona **velocidade, confiabilidade e versionamento controlado**, além de facilitar testes e validações em ambiente de produção.
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
## 🎥 **Vídeos Demonstrativos**
Disponibilizamos dois vídeos para apresentar as etapas e funcionalidades do projeto:
### 📦 _1. DevOps: CI/CD com Azure DevOps_
Neste vídeo, mostramos todo o fluxo da esteira de integração e entrega contínua:
- Push no repositório Git
- Execução da pipeline de CI (build da imagem Docker e push no Azure Container Registry)
- Execução da pipeline de CD (deploy automático no Azure Container Instances)
- Verificação do container em execução e acesso via IP público
📌 **Assista aqui:**
[▶ CI/CD no Azure DevOps](https://youtu.be/P0mPnDin5T0)
----------
### 💻 _2. Demonstração do Sistema Java_
Este vídeo apresenta as funcionalidades principais da aplicação:
- Login e navegação com interface desenvolvida em Thymeleaf
- Arquitetura final da solução
- Integrações com RabbitMQ e OpenAI
📌 **Assista aqui:**
[▶ Demonstração do Sistema Java](https://youtu.be/-vDVQu-9Jb0)
Credenciais usadas para testes:
- `clinica1@email.com` / `senha123`
- `dentista1@email.com` / `senha123`
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
## 🏛️ **Arquitetura do Projeto**

A arquitetura do projeto foi desenvolvida com foco em escalabilidade, monitoramento e integração contínua. Utilizando o Azure DevOps, o pipeline de CI/CD automatiza o processo de build e deploy da aplicação. A imagem Docker é gerada a partir do código Java com Spring Boot, enviada para o Azure Container Registry e, em seguida, implantada no Azure Container Instance como um container acessível por IP público. A aplicação se comunica com um banco de dados Oracle, hospedado em container, e com o RabbitMQ como serviço de mensageria para eventos assíncronos, como o envio de e-mails. O monitoramento é realizado com Prometheus e Grafana, também em containers, permitindo o acompanhamento em tempo real do estado e métricas da aplicação. Toda a estrutura é pensada para proporcionar uma experiência DevOps completa e robusta.
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
---
## 💡 **Configuração das Pipelines**
#### 🛠️ Configuração da Pipeline de CI (Continuous Integration)
Na pipeline de **Integração Contínua (CI)**, configurada no Azure DevOps, foi definido o uso do `pool` padrão do Azure Pipelines para execução das tarefas. O processo automatiza a construção da imagem Docker da aplicação Java. Primeiramente, a tarefa `Docker Build an image` é responsável por **compilar o projeto** e gerar a imagem Docker a partir do `Dockerfile` localizado na pasta `challenge/`. Em seguida, a tarefa `Push an image` faz o **envio da imagem criada para o Azure Container Registry (ACR)**, utilizando as credenciais fornecidas na configuração. A imagem recebe a tag correspondente ao número do build, garantindo versionamento e rastreabilidade para futuros deploys.
👉 [`link do código de ci-pipeline.yml`](https://github.com/patinaomi/projeto-java-thymeleaf/blob/main/challenge/ci-pipeline.yml)
#### 🚀 Pipeline de CD (Entrega Contínua)
A pipeline de **Continuous Deployment (CD)** foi configurada no **Azure DevOps** com o objetivo de automatizar o processo de publicação da aplicação Java na nuvem. Após a conclusão da etapa de build e push da imagem Docker (na pipeline de CI), a pipeline de CD é acionada para realizar o deploy da imagem no serviço **Azure Container Instance (ACI)**.
O processo segue os seguintes passos:
1. **Autenticação na conta Azure** via Azure CLI.
2. **Criação do container** com base na imagem gerada e armazenada no **Azure Container Registry (ACR)**.
3. O container é criado com IP público, permitindo o acesso via navegador.
4. A aplicação roda em ambiente Linux e é configurada para escutar na porta 8080.
👉 [`link do código de cd-pipeline.yml`](https://github.com/patinaomi/projeto-java-thymeleaf/blob/main/challenge/cd-pipeline.yml)
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
## 🐳 Rodando o Projeto com Docker
Para rodar a aplicação completa com **Spring Boot + Oracle + RabbitMQ + Prometheus + Grafana**, siga os passos abaixo:
### 📁 Pré-requisitos
- Docker instalado (link de instalação)
- Docker Compose instalado (link de instalação)
### 🐑 1. Clone o repositório
```
git clone https://github.com/patinaomi/projeto-java-thymeleaf
cd projeto-java-thymeleaf
```
### ⚙️ 2. Configure o arquivo `.env`
Crie um arquivo chamado `.env` na raiz do projeto com o seguinte conteúdo (ajuste os valores conforme suas credenciais):
```ORACLE_USER=seu-usuario
ORACLE_PASS=sua-senha
OPENAI_KEY=sua-chave-openai-aqui
JWT_SECRET_KEY=sua-chave-jwt-aqui
EMAIL_USER=seuemail@gmail.com
EMAIL_PASSWORD=sua-senha-email-smpt-aqui
```
### 🚀 3. Suba os containers
Na raiz do projeto, execute o seguinte comando:
``docker compose up --build
``
Esse comando irá:
- Construir a imagem do projeto Java.
- Subir os containers do **RabbitMQ**, **Oracle** (caso esteja local), **Prometheus** e **Grafana**.
- Inicializar a aplicação acessível em:
👉 [`http://localhost:8080`](http://localhost:8080)
### 📊 Interfaces disponíveis
|Serviço|URL|
|--|--|
|🌐 Aplicação|[http://localhost:8080](http://localhost:8080)|
|🐰 RabbitMQ|[http://localhost:15672](http://localhost:15672) _(user: guest / guest)_|
|📊 Prometheus|[http://localhost:9090](http://localhost:9090)|
|📈 Grafana|[http://localhost:3000](http://localhost:3000) _(login padrão: admin / admin)_|
### 🛠️ Inicialização do Banco de Dados
Ao rodar o projeto pela primeira vez, é necessário garantir que o banco de dados seja criado automaticamente. Para isso, o projeto deve ser executado com a propriedade spring.jpa.hibernate.ddl-auto configurada como create. Isso fará com que todas as tabelas definidas pelas entidades JPA sejam geradas automaticamente no banco Oracle. Após a criação inicial, recomenda-se alterar esse modo para update ou none, evitando a recriação acidental do schema em execuções futuras.
[:arrow_up: voltar para o índice :arrow_up:](#-índice)
## 🧑🤝🧑 Equipe
|
Claudio Bispo
RM553472
|Patricia Naomi

RM552981
|
|--|--|
[:arrow_up: voltar para o índice :arrow_up:](#-índice)