https://github.com/antonyandrade01/clinica-evolution-architecture
Architectural overview and Docker Compose configuration for 'Clínica Evolution', a containerized full-stack web application.
https://github.com/antonyandrade01/clinica-evolution-architecture
architecture docker docker-compose flask fullstack mariadb onlyoffice portfolio-project portfolio-website python rabbitmq redis system-design web-application
Last synced: 3 months ago
JSON representation
Architectural overview and Docker Compose configuration for 'Clínica Evolution', a containerized full-stack web application.
- Host: GitHub
- URL: https://github.com/antonyandrade01/clinica-evolution-architecture
- Owner: antonyandrade01
- Created: 2025-07-22T04:01:59.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-08-06T04:35:42.000Z (12 months ago)
- Last Synced: 2025-08-06T06:22:34.683Z (12 months ago)
- Topics: architecture, docker, docker-compose, flask, fullstack, mariadb, onlyoffice, portfolio-project, portfolio-website, python, rabbitmq, redis, system-design, web-application
- Homepage: https://github.com/antonyandrade01
- Size: 4.08 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README-pt.md
Awesome Lists containing this project
README
---
# 🏥 Clínica Evolution - Sistema de Gestão para Clínicas
**Solução completa para gerenciamento de clínicas** com agendamento inteligente, prontuário eletrônico integrado e comunicação em tempo real.
**Note:** Este repositório contém **a documentação da arquitetura e a configuração para o ambiente de desenvolvimento.** O código da aplicação está em um repositório privado. O objetivo deste projeto é demonstrar o design do sistema e habilidades de deploy com docker.
## ✨ Funcionalidades Principais
* **📅 Agenda Inteligente:** Visualização em calendário (mês/semana/dia) ou lista, cores por status, edição em tempo real e filtros avançados.
* **👥 Gestão de Usuários Multiperfil:** 4 níveis de acesso (Admin, Recepcionista, Profissional, Paciente) com autenticação segura (CPF/E-mail) e proteção CAPTCHA.
* **📄 Prontuário Eletrônico (PEP):** Editor de documentos **ONLYOFFICE** integrado para DOCX/XLSX, com controle de versões e organização por pastas.
* **🔔 Comunicação em Tempo Real:** Notificações instantâneas via WebSockets (Socket.IO) sobre eventos importantes na plataforma.
---
## 🚀 Guia de Início Rápido (Ambiente de Desenvolvimento)
O ambiente é 100% containerizado com Docker, garantindo uma instalação rápida e consistente.
**1. Clone o Repositório:**
```
bash
git clone https://github.com/antonyandrade01/clinica-evolution-architecture.git
cd clinica-evolution-architecture
```
**2. Configure o Ambiente:**
Copie o arquivo de exemplo. As senhas padrão já estão configuradas para facilitar.
```
bash
cp .env.example .env
```
**3. Inicie os Serviços:**
Este comando irá construir, baixar e iniciar todos os containers necessários.
```
bash
docker-compose up -d --build
```
**4. Carregue os Dados de Demonstração (Opcional):**
Para popular o sistema com dados de teste, execute o comando abaixo para restaurar o backup padrão.
```
bash
docker exec -i clinica_mariadb_db mariadb -u evolution -p'#!Ev0_Lm90=4M4' clinica_evolution < backup.sql
```
**5. Acesse as Interfaces:**
* **Aplicação Principal:** 👉 **[http://localhost:5000](http://localhost:5000)**
* **Interface Gráfica do Banco (Adminer):** 👉 **[http://localhost:8082](http://localhost:8082)**
* **Servidor ONLYOFFICE:** 👉 [http://localhost:8081](http://localhost:8081)
---
## 🔑 Credenciais de Acesso (Dados de Teste)
| Perfil | E-mail | Senha |
|---------------|-------------------------|------------|
| Administrador | `admin@clinica.com` | `senha123` |
| Recepcionista | `recepcao@clinica.com` | `recep123` |
| Profissional | `maria@clinica.com` | `maria123` |
| Paciente | `joao@exemplo.com` | `joao123` |
---
## 🔧 Manutenção e Operações
### Backup e Restauração do Banco de Dados
- **Criar um Backup:**
```
bash
docker exec clinica_mariadb_db mariadb-dump -u evolution -p'#!Ev0_Lm90=4M4' clinica_evolution > backup_$(date +%d-%m-%Y).sql
```
- **Restaurar um Backup:**
```
bash
docker exec -i clinica_mariadb_db mariadb -u evolution -p'#!Ev0_Lm90=4M4' clinica_evolution < nome_do_arquivo_backup.sql
```
### Comandos Úteis do Docker
| Ação | Comando |
|----------------------------|----------------------------------------------|
| **Parar todos os serviços**| `docker-compose down` |
| **Ver logs da aplicação** | `docker-compose logs -f flask_app` |
| **Reiniciar a aplicação** | `docker-compose restart flask_app` |
---
## 🛠️ Arquitetura e Tecnologias
#### Diagrama da Arquitetura de Containers
| Camada | Tecnologias |
|----------------|-----------------------------------------------------------------------------|
| **Backend** | Python 3, Flask, SQLAlchemy, Flask-SocketIO, Gunicorn |
| **Frontend** | Bootstrap 5, JavaScript, FullCalendar.js, SweetAlert2 |
| **Database** | MariaDB |
| **Infrastructure** | Docker, Docker Compose |
| **Integrations** | ONLYOFFICE Docs, Redis, RabbitMQ, Adminer |
---
### Otimizações e Padrões de DevOps Implementados
Além da arquitetura base, este projeto incorpora padrões profissionais de DevOps para garantir segurança, eficiência e automação:
* **🚀 Imagens Otimizadas com Multi-Stage Builds:** A imagem Docker da aplicação Flask é construída usando um processo de múltiplos estágios. Isso separa as dependências de build das de runtime, resultando em uma imagem final menor e mais rápida.
* **🛡️ Segurança com Usuário Não-Root:** A aplicação no contêiner é executada por um usuário dedicado (`appuser`), em vez de rodar como `root`. Esta é uma prática de segurança implementada para mitigar riscos em caso de uma vulnerabilidade.
* **⚙️ Backups Automatizados com Ofelia:** Um serviço dedicado (`Ofelia`) foi adicionado para orquestrar backups automáticos e agendados da base de dados e dos volumes de dados, utilizando `rclone` para enviar os arquivos para um armazenamento em nuvem (Google Drive), incluindo uma política de retenção inteligente.
* **▶️ Inicialização Robusta com Entrypoint:** Um script de `entrypoint.sh` garante que tarefas essenciais, como a aplicação de migrações do banco de dados (`flask db upgrade`) e o ajuste de permissões de volumes, sejam executadas antes que a aplicação principal seja iniciada, evitando erros e garantindo a consistência do ambiente.
* **🔄 Integração Contínua com GitHub Actions:** Um pipeline de CI automatizado constrói e publica as imagens Docker, tanto do backend (Flask) quanto do frontend (Next.js), em paralelo a cada push na branch main. O processo utiliza o GitHub Secrets para uma autenticação segura com o Docker Hub e etiqueta cada imagem com a tag latest e o SHA do commit, garantindo versionamento e rastreabilidade.
* **🤖 Revisão de Código Assistida por IA com Gemini:** Para acelerar o ciclo de feedback e garantir a alta qualidade do código, o projeto utiliza a IA do Google Gemini integrada via GitHub Actions. A automação opera em três frentes:
1. **Revisor de Pull Requests:** A IA analisa cada PR, postando comentários e sugestões de melhoria diretamente no código.
2. **Análise de Pushes:** Cada push para a branch `main` passa por uma análise de segurança e qualidade, com o resumo registrado nos logs.
3. **Assistente Sob Demanda:** Desenvolvedores podem chamar a IA em issues ou comentários (`@gemini-cli`) para pedir explicações, sugestões de refatoração ou testes.
Click to view the ci.yml workflow
```yaml
# .github/workflows/ci.yml
name: CI - Build e Push das Imagens Docker
on:
push:
branches: [ "main" ]
workflow_dispatch:
jobs:
build-and-push-backend:
runs-on: ubuntu-latest
steps:
- name: Checkout do repositório
uses: actions/checkout@v4
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login no Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build e Push da imagem do Backend
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile.flask
push: true
tags: antonyandrade/clinica-evolution-backend:latest, antonyandrade/clinica-evolution-backend:${{ github.sha }}
build-and-push-frontend:
runs-on: ubuntu-latest
steps:
- name: Checkout do repositório
uses: actions/checkout@v4
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login no Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build e Push da imagem do Frontend
uses: docker/build-push-action@v5
with:
context: ./frontend
file: ./frontend/Dockerfile.frontend
push: true
tags: antonyandrade/clinica-evolution-frontend:latest, antonyandrade/clinica-evolution-frontend:${{ github.sha }}
```
Clique para ver o Dockerfile.flask otimizado
```dockerfile
# --- Estágio de Build ---
FROM python:3.13.5-alpine3.22 AS builder
# Define o diretório de trabalho
WORKDIR /app
# Instala dependências do sistema
RUN apk add --no-cache gcc musl-dev linux-headers
# Ambiente virtual para isolar as dependências da aplicação
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Instala as dependências no ambiente virtual
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copia o restante do código da aplicação
COPY . .
# --- Estágio de Runtime ---
FROM python:3.13.5-alpine3.22 AS runtime
# Cria um usuário não-root e um grupo
RUN apk add --no-cache su-exec curl && \
addgroup -S appgroup && \
adduser -S appuser -G appgroup
# Define o diretório de trabalho
WORKDIR /app
COPY --from=builder /opt/venv /opt/venv
# Copia o código da aplicação do estágio de build
COPY --from=builder --chown=appuser:appgroup /app /app
# Copia o script de entrypoint para dentro da imagem
COPY ./docker/entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
# Define as variáveis de ambiente para usar o ambiente virtual
ENV PATH="/opt/venv/bin:$PATH"
ENV PYTHONUNBUFFERED=1
EXPOSE 5000
CMD ["gunicorn", "--workers", "2", "--worker-class", "eventlet", "--bind", "0.0.0.0:5000", "app:app"]
```
---
## 👤 Contato
Criado por **Antony Andrade** - Vamos nos conectar!