Files
decoda/README.md
2026-06-05 09:05:53 -03:00

587 lines
12 KiB
Markdown

# Decoda - Plataforma Educacional
> Plataforma para ensinar lógica de programação através de jogos educativos e blocos visuais.
## 📋 Índice
- [Sobre o Projeto](#sobre-o-projeto)
- [Arquitetura](#arquitetura)
- [Pré-requisitos](#pré-requisitos)
- [Instalação e Build](#instalação-e-build)
- [Opção 1: Docker Compose (Recomendado)](#opção-1-docker-compose-recomendado)
- [Opção 2: Desenvolvimento Local](#opção-2-desenvolvimento-local)
- [Estrutura do Projeto](#estrutura-do-projeto)
- [Git Flow](#git-flow)
- [Comandos Úteis](#comandos-úteis)
- [Troubleshooting](#troubleshooting)
- [Contribuindo](#contribuindo)
---
## 🎯 Sobre o Projeto
O **Decoda** é uma plataforma educacional que oferece:
- 🎮 **Jogos educativos** interativos para aprender programação
- 📚 **Documentação completa** para educadores e desenvolvedores
- 🧩 **Programação visual** com blocos arrastar-e-soltar (sem necessidade de sintaxe), utilizando Blockly.
- 🆓 **100% gratuito** e sem necessidade de cadastro
### Tecnologias Principais
- **Frontend (App):** React + Vite + Blockly
- **Documentação:** Docusaurus
- **Servidor Web:** Nginx
- **Containerização:** Docker + Docker Compose
---
## Arquitetura
O projeto é dividido em 3 serviços principais:
```
┌─────────────────────────────────────┐
│ Nginx Proxy (porta 80) │
│ │
│ /app/ → App (React/Vite) │
│ /docs/ → Docs (Docusaurus) │
└─────────────────────────────────────┘
```
- **app/** - Aplicação React principal com os jogos
- **docs/** - Documentação educacional e técnica
- **proxy** - Nginx fazendo roteamento entre app e docs
---
## ✅ Pré-requisitos
### Para executar com Docker (Recomendado)
Você precisa apenas de:
- **Docker** (versão 20.10 ou superior)
- **Docker Compose** (versão 2.0 ou superior)
> **💡 Não precisa instalar Node.js, npm ou qualquer outra ferramenta!**
#### Verificar se Docker está instalado
```bash
docker --version
docker compose version
```
Se não tiver instalado, siga os guias oficiais:
- [Instalar Docker](https://docs.docker.com/get-docker/)
- Docker Compose já vem incluído nas versões recentes do Docker
---
## 🚀 Instalação e Build
### Opção 1: Docker Compose (Recomendado)
Esta é a forma mais simples e não requer conhecimento de React ou Node.js.
#### 1. Clone o repositório
```bash
git clone https://git.mtst.tec.br/rui.moraes/plataforma-edu.git
cd plataforma-edu
```
#### 2. Build e execução
Execute um único comando para construir e iniciar tudo:
```bash
docker compose up --build -d
```
**O que esse comando faz:**
- `docker compose up` - Inicia os serviços
- `--build` - Reconstrói as imagens se houver mudanças
- `-d` - Roda em segundo plano (detached mode)
#### 3. Aguarde o build
O primeiro build pode demorar **5-10 minutos** dependendo da sua internet e máquina.
Você verá logs parecidos com:
```
[+] Building 245.3s
=> [app] downloading dependencies...
=> [app] building application...
=> [docs] downloading dependencies...
=> [docs] building documentation...
```
#### 4. Acesse a aplicação
Depois que o build terminar:
- **Aplicação:** http://localhost
- **Documentação:** http://localhost/docs
#### 5. Verificar status
```bash
docker compose ps
```
Você deve ver algo como:
```
NAME STATUS PORTS
plataforma-edu-app-1 Up 2 minutes
plataforma-edu-docs-1 Up 2 minutes
plataforma-edu-proxy-1 Up 2 minutes 0.0.0.0:80->80/tcp
```
#### Build com Google Analytics 4 (GA4)
Para ativar analytics em produção, use argumentos de build:
**Com variáveis de ambiente:**
Crie um arquivo `.env` na raiz do projeto:
```bash
GIT_COMMIT_HASH=abc1234
VITE_ANALYTICS_PROVIDER=ga4
VITE_GA4_ID=G-SEU_ID_GA4
VITE_GA4_DEBUG=false
```
Então execute:
```bash
docker compose build app
docker compose up -d
```
**Ou diretamente via argumentos:**
```bash
docker compose build \
--build-arg GIT_COMMIT_HASH=$(git rev-parse --short HEAD) \
--build-arg VITE_ANALYTICS_PROVIDER=ga4 \
--build-arg VITE_GA4_ID=SEU_ID_AQUI \
app
docker compose up -d
```
**Para desabilitar analytics (desenvolvimento):**
```bash
docker compose build --build-arg VITE_ANALYTICS_PROVIDER=noop app
docker compose up -d
```
> 📊 **Nota:** Obtém seu ID do GA4 em [https://analytics.google.com](https://analytics.google.com) → Administração → Data Streams → Copie o ID de medição (formato: G-XXXXXXXXXX)
Para mais detalhes, veja: [Documentação de Analytics](docs/docs/plataforma/arquitetura/analytics.md)
---
### Opção 2: Desenvolvimento Local
Para desenvolvedores que querem editar o código e ver mudanças em tempo real.
#### Pré-requisitos adicionais
- **Node.js** 20.x ou superior
- **pnpm** (gerenciador de pacotes)
#### Instalar pnpm
```bash
npm install -g pnpm
```
#### Rodar App (React)
```bash
cd app
pnpm install
pnpm run dev
```
A aplicação estará disponível em http://localhost:5173
#### Rodar Documentação (Docusaurus)
Em outro terminal:
```bash
cd docs
pnpm install
pnpm run start
```
A documentação estará disponível em http://localhost:3000
---
## 📁 Estrutura do Projeto
```
plataforma-edu/
├── app/ # Aplicação React principal
│ ├── src/ # Código fonte
│ │ ├── pages/ # Páginas (Home, Educadores, FAQ, etc)
│ │ ├── games/ # Jogos educativos
│ │ ├── components/ # Componentes reutilizáveis
│ │ └── styles/ # Estilos globais
│ ├── public/ # Arquivos estáticos
│ ├── Dockerfile # Build da imagem Docker
│ ├── package.json # Dependências npm
│ └── vite.config.js # Configuração do Vite
├── docs/ # Documentação Docusaurus
│ ├── docs/ # Documentação para desenvolvedores
│ ├── edu/ # Guias para educadores
│ ├── src/ # Componentes customizados
│ ├── Dockerfile # Build da imagem Docker
│ ├── package.json # Dependências npm
│ └── docusaurus.config.js # Configuração
├── docker-compose.yaml # Orquestração dos containers
├── nginx.conf # Configuração do proxy Nginx
└── README.md # Este arquivo
```
---
## 🌳 Git Flow
### Fluxo de Desenvolvimento
```mermaid
gitGraph
commit
branch develop
checkout develop
commit
branch feature/nova-funcionalidade
checkout feature/nova-funcionalidade
commit id: "Implementa funcionalidade A"
commit id: "Ajusta funcionalidade A"
checkout develop
merge feature/nova-funcionalidade
commit id: "Prepara para um novo pacote"
checkout main
merge develop
commit id: "Release v1.0"
```
### Fluxo Simplificado
```
1. Criar Feature
git checkout -b feature/xyz (a partir de develop)
2. Desenvolver e Commitar
git commit -m "feat: descrição"
3. Push e PR para Develop
git push origin feature/xyz
(Abrir PR no GitHub)
4. Code Review + Merge em Develop
Aprovação e merge automático
5. PR de Develop para Main
(Abrir PR: develop → main)
6. Merge em Main
Release pronta para produção
```
### Regras e Configurações
Para informações detalhadas sobre:
- ✅ Como criar branches (a partir de develop)
- ✅ Padrão de commits
- ✅ Regras de PR
- ✅ Deploy em homologação com script
- ✅ Variáveis de ambiente e token GitHub
**👉 Consulte: [README-HOMOLOGACAO.md](README-HOMOLOGACAO.md)**
---
## 🛠️ Comandos Úteis
### Docker Compose
#### Iniciar aplicação
```bash
docker compose up -d
```
#### Parar aplicação
```bash
docker compose down
```
#### Ver logs em tempo real
```bash
# Todos os serviços
docker compose logs -f
# Apenas app
docker compose logs -f app
# Apenas documentação
docker compose logs -f docs
# Apenas proxy
docker compose logs -f proxy
```
#### Rebuild completo (após mudanças no código)
```bash
docker compose up --build -d
```
#### Rebuild apenas um serviço
```bash
docker compose up --build app -d
```
#### Verificar status
```bash
docker compose ps
```
#### Entrar dentro de um container
```bash
# App
docker compose exec app sh
# Docs
docker compose exec docs sh
```
#### Remover tudo (containers, volumes, imagens)
```bash
docker compose down --volumes --rmi all
```
---
## Troubleshooting
### Erro: "port 80 already in use"
**Problema:** Outra aplicação está usando a porta 80.
**Solução:**
```bash
# Linux/Mac - Ver o que está usando a porta 80
sudo lsof -i :80
# Parar o serviço (exemplo com Apache)
sudo systemctl stop apache2
```
Ou edite `docker-compose.yaml` para usar outra porta:
```yaml
proxy:
ports:
- "8080:80" # Mude para 8080 ou qualquer porta livre
```
---
### Erro: "COPY nginx-spa.conf: not found"
**Problema:** Arquivo `nginx-spa.conf` não está no diretório `app/`.
**Solução:**
```bash
# Certifique-se de que o arquivo está na pasta correta
ls app/nginx-spa.conf
# Se não estiver, mova da raiz
mv nginx-spa.conf app/
```
---
### Erro: "Minimum Node.js version not met"
**Problema:** O Dockerfile está usando Node.js 18, mas o projeto requer Node 20.
**Solução:** Os Dockerfiles já foram corrigidos para usar Node 20. Se ainda encontrar este erro:
```bash
# Rebuild forçando recriação das imagens
docker compose build --no-cache
docker compose up -d
```
---
### Build muito lento
**Dicas para acelerar:**
1. **Use cache de build do Docker:**
```bash
# Docker irá reusar layers anteriores
docker compose up --build
```
2. **Aumente recursos do Docker:**
- Docker Desktop → Settings → Resources
- Aumente CPU e Memória
3. **Limpe imagens antigas:**
```bash
docker system prune -a
```
---
### Acesso retorna 403 ao acessar /docs
**Problema:** Configuração incorreta do proxy Nginx.
**Solução:** Verifique se `nginx.conf` tem a barra final no `proxy_pass`:
```nginx
location /docs/ {
proxy_pass http://docs/;
}
```
Se necessário, rebuild:
```bash
docker compose restart proxy
```
---
### Mudanças no código não aparecem
**Problema:** Docker está usando build antigo em cache.
**Solução:**
```bash
# Rebuild sem cache
docker compose build --no-cache app
docker compose up -d
```
---
## 🔄 Fluxo de Deploy em Produção
### 1. Preparação
```bash
# Garantir que está na branch correta
git checkout main
git pull origin main
```
### 2. Build
```bash
# Rebuild completo sem cache
docker compose build --no-cache
```
### 3. Deploy
```bash
# Parar versão antiga
docker compose down
# Iniciar nova versão
docker compose up -d
# Verificar logs
docker compose logs -f
```
### 4. Verificação
```bash
# Checar se todos os containers estão rodando
docker compose ps
# Testar endpoints
curl http://localhost
curl http://localhost/docs
```
---
## 📝 Variáveis de Ambiente
O projeto atualmente não usa variáveis de ambiente complexas, mas se precisar:
Crie um arquivo `.env` na raiz:
```env
# Exemplo
APP_PORT=80
NODE_ENV=production
```
E referencie no `docker-compose.yaml`:
```yaml
services:
app:
env_file:
- .env
```
---
## 🤝 Contribuindo
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/nova-funcionalidade`)
3. Commit suas mudanças (`git commit -m 'Adiciona nova funcionalidade'`)
4. Push para a branch (`git push origin feature/nova-funcionalidade`)
5. Abra um Pull Request
---
## Para Educadores
Se você é educador e quer usar a plataforma, acesse:
- http://localhost/educadores - Guia de como começar
- http://localhost/docs/edu - Documentação pedagógica completa
---
**Desenvolvido com ❤️ para educação em programação**