# 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**