Um sistema completo para gestão de alunos, turmas, professores, responsáveis, mensalidades, biblioteca e eventos de uma escola infantil.
O diagrama abaixo ilustra a arquitetura geral do Sistema de Gerenciamento Escolar Infantil, detalhando a interação entre os principais componentes da solução:
Frontend: Desenvolvido em React + Vite, responsável pela interface com o usuário.
Nginx: Atua como proxy reverso, direcionando as requisições do frontend para o backend.
Backend: Implementado em Node.js/Express, responsável pelas regras de negócio e comunicação com o banco de dados.
Banco de Dados: Utiliza PostgreSQL para armazenamento persistente das informações.
Infraestrutura: Orquestrada via Docker e Docker Compose, garantindo portabilidade e facilidade de implantação.
A imagem a seguir representa visualmente essa arquitetura:
O DER abaixo mostra a estrutura do banco de dados do sistema, com todas as tabelas e relacionamentos:
📋 Documentação completa do banco: Docs/README.md
Este projeto visa facilitar o controle acadêmico, financeiro e administrativo de escolas infantis, centralizando informações de alunos, professores, turmas, responsáveis, mensalidades, biblioteca, eventos e mais. O sistema é composto por backend (Node.js/Express), frontend (React + TypeScript + Vite), banco de dados PostgreSQL e infraestrutura Docker.
- Backend: Node.js, Express, PostgreSQL, node-pg-migrate
- Frontend: React, TypeScript, Vite, Sass
- Banco de Dados: PostgreSQL
- Infraestrutura: Docker, Docker Compose, Nginx
- Scripts: PowerShell (
start-tudo.ps1
)
Após clonar o projeto, copie os arquivos de exemplo de variáveis de ambiente e renomeie para .env
conforme necessário:
- Para o frontend:
- Copie
frontend/.env.example
parafrontend/.env
- Copie
- Para o backend (opcional, se usar dotenv):
- Copie
APP/.env.example
paraAPP/.env
- Copie
Edite os valores conforme sua necessidade. Esses arquivos não são enviados para o repositório por segurança.
- Docker e Docker Compose (Download Docker Desktop)
- Windows PowerShell (recomendado)
- Node.js (apenas se for rodar o frontend fora do Docker)
Primeiro uso: O Windows pode bloquear a execução de scripts .ps1
por segurança. Se isso acontecer, execute este comando uma única vez:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Este comando permite a execução de scripts locais e precisa ser executado apenas uma vez por usuário.
Abra o PowerShell na raiz do projeto e execute:
./start-tudo.ps1
Esse script irá:
- Derrubar containers antigos e volumes
- Subir backend, banco de dados e nginx
- Rodar as migrations e seeds automaticamente
- Subir o frontend (Vite) em uma nova janela
Acesse o frontend em: http://localhost:5173 Acesse a API backend em: http://localhost:3000
# (1) Construa as imagens Docker
./docker-compose build
# (2) Suba os containers
./docker-compose up -d --build
# (3) Rode as migrations
./docker-compose exec backend node run-migrations.js
# (4) Rode os seeds
./docker-compose exec backend node run-seeds.js
# (5) Suba o frontend
cd frontend
npm install
npm run dev
- Acesse o frontend em http://localhost:5173 para utilizar o sistema via interface web.
- Acesse a API REST em http://localhost:3000 para integração ou testes com ferramentas como Postman.
- Exemplos de endpoints:
Para fazer backup dos dados do banco:
./backup-database.ps1
Este script:
- Cria um backup com timestamp no diretório
backups/
- Verifica se o banco está rodando
- Lista os backups mais recentes
- Exemplo:
backup_escola_20241215_143022.sql
Para restaurar um backup específico:
./restore-backup.ps1 backup_escola_20241215_143022.sql
Para backup periódico (recomendado para produção):
./backup-automatico.ps1
Este script:
- Pode ser agendado via Agendador de Tarefas do Windows
- Mantém apenas os 10 backups mais recentes
- Não exibe confirmações (ideal para automação)
backups/
├── backup_escola_20241215_143022.sql # Backup manual
├── backup_escola_automatico_20241215_120000.sql # Backup automático
└── ...
# Fazer backup agora
.\backup-database.ps1
# Testar o sistema
.\test-backup.ps1
# Restaurar backup específico
.\restore-backup.ps1 backup_escola_20250701_130512.sql
# Configurar backup automático diário
# Ver arquivo BACKUP-AUTOMATICO-SETUP.md
Em caso de perda total dos dados:
- Se você tem backups: Use o script de restore
- Se não tem backups: O sistema recriará a estrutura básica com dados de exemplo através das migrations e seeds
Responsável | Pasta/Arquivo | Descrição/Tarefas principais |
---|---|---|
Ryan e Kaua | APP/ | Backend: APIs, migrations, seeds, config do banco |
Ryan | Dockerfile, Dockerfile.db | Docker backend e banco |
Ryan | docker-compose.yml | Configuração dos serviços Docker |
Ryan | nginx.conf | Configuração do Nginx |
Ryan | start-tudo.ps1 | Script de automação do ambiente |
Ryan | backup-database.ps1 | Script de backup manual do banco |
Ryan | restore-backup.ps1 | Script de restauração de backup |
Ryan | backup-automatico.ps1 | Script de backup automático/agendado |
Kaua | frontend/ | Frontend: Telas, componentes, integração com backend |
Kaua | frontend/package.json | Dependências e scripts do frontend |
Kaua | frontend/.env.example | Variáveis de ambiente do frontend |
Ambos | README.md | Documentação geral do projeto |
Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
# Verificar status dos containers
docker-compose ps
# Se não estiverem rodando, subir novamente
docker-compose up -d
# Configurar política de execução (uma vez por usuário)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Se alguma porta estiver ocupada, altere no docker-compose.yml
:
- Frontend: porta 5173 → 5174
- Backend: porta 3000 → 3001
- Banco: porta 5432 → 5433
# Reiniciar o banco do zero
docker-compose down -v
docker-compose up -d
# Aguardar alguns segundos e rodar novamente
.\start-tudo.ps1
- Verificar se o banco está rodando:
docker-compose ps
- Aguardar alguns segundos após subir o banco
- Tentar novamente o backup
# Ver logs do banco
docker-compose logs db
# Ver logs do backend
docker-compose logs backend
# Ver logs em tempo real
docker-compose logs -f
- O banco de dados é criado via migrations, não pelo banco.sql diretamente.
- Os dados iniciais são inseridos automaticamente via seeds.
- O frontend consome a API do backend para exibir e cadastrar dados.
-
Instalou as dependências do backend
- Entrou na pasta
APP
e rodou:cd APP npm install npm install node-pg-migrate
- Isso garantiu que todas as bibliotecas do backend, incluindo o
node-pg-migrate
, estivessem instaladas.
- Entrou na pasta
-
Construiu as imagens Docker
- Na raiz do projeto, rodou:
docker-compose build
- Isso preparou os containers do banco, backend e nginx.
- Na raiz do projeto, rodou:
-
Subiu os containers
- Ainda na raiz, rodou:
docker-compose up -d --build
- Isso iniciou o banco de dados, backend e nginx.
- Ainda na raiz, rodou:
-
Rodou as migrations
- Para criar as tabelas no banco, rodou:
docker-compose exec backend sh -c "cd APP && node run-migrations.js"
- Agora o banco tem todas as tabelas necessárias.
- Para criar as tabelas no banco, rodou:
-
Rodou os seeds
- Para inserir dados iniciais no banco, rodou:
docker-compose exec backend sh -c "cd APP && node run-seeds.js"
- Para inserir dados iniciais no banco, rodou:
-
Subiu o frontend
- Foi até a pasta
frontend
, instalou as dependências e rodou o servidor:cd frontend npm install npm run dev
- O site ficou disponível em http://localhost:5173.
- Foi até a pasta
Resumo:
Você garantiu que todas as dependências estavam instaladas, criou as tabelas do banco, inseriu dados iniciais e subiu o frontend. Agora o sistema está rodando completo!
Se precisar rodar do zero, é só seguir o que está no README.md.