587 lines
12 KiB
Markdown
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**
|