8fcb5aac66a6cfb82d952a78075d024221bbb2ca
Course Plat
Plataforma de gerenciamento de cursos, turmas, alunos e professores.
Stack
- Frontend: Next.js 15, React, Tailwind CSS
- Backend: Next.js API Routes, Server Actions
- Database: MongoDB
- Storage: MinIO (S3-compatible) ou Local
- Auth: NextAuth.js
Quick Start (Desenvolvimento)
1. Clone e instale dependências
git clone <repo-url>
cd course-plat
npm install
2. Configure variáveis de ambiente
cp .env.example .env.local
Edite .env.local com suas configurações:
# Mínimo para desenvolvimento:
NODE_ENV=development
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=qualquer-segredo-aqui-min-32-caracteres
MONGODB_URI=mongodb://localhost:27017/course-plat
3. Inicie os serviços com Docker
# MongoDB + MinIO
docker compose up -d
# Verifique que os containers estão rodando
docker ps
4. Inicie a aplicação
npm run dev
Acesse: http://localhost:3000
Serviços Docker
| Serviço | Porta | Descrição |
|---|---|---|
| App | 3000 | Aplicação Next.js |
| MongoDB | 27017 | Banco de dados |
| Mongo Express | 8081 | UI do MongoDB (opcional) |
| MinIO API | 9000 | Storage S3-compatible |
| MinIO Console | 9001 | UI do MinIO |
Estrutura de Projetos
course-plat/
├── src/app/ # App Router Next.js
│ ├── (auth)/ # Rotas de autenticação
│ ├── (protected)/ # Rotas protegidas
│ ├── api/ # API Routes
│ └── lib/ # Utilitários e helpers
├── docker/ # Configurações Docker
│ ├── minio/ # MinIO setup
│ └── production/ # Configurações de produção
├── storage/ # Armazenamento local (se usado)
└── .env.local # Variáveis de ambiente (não commitar)
Deploy em Produção
Veja DEPLOYMENT.md para instruções completas.
Resumo rápido:
# 1. Configurar ambiente
cp .env.example .env.production
nano .env.production # preencher variáveis
# 2. Buildar imagem
docker build -f docker/production/Dockerfile -t course-plat:latest .
# 3. Iniciar serviços
docker compose -f docker/production/docker-compose.yml up -d
# 4. Configurar backup (crontab)
0 2 * * * cd /var/www/course-plat && ./docker/production/backup-all.sh
Variáveis de Ambiente
Veja .env.example para todas as variáveis disponíveis.
Principais:
| Variável | Descrição | Default |
|---|---|---|
NODE_ENV |
Ambiente | development |
NEXTAUTH_URL |
URL da app | http://localhost:3000 |
NEXTAUTH_SECRET |
Segredo auth | (obrigatório) |
MONGODB_URI |
String conexão MongoDB | (obrigatório) |
STORAGE_TYPE |
s3 ou local |
s3 |
S3_ENDPOINT |
Endpoint MinIO/S3 | http://localhost:9000 |
S3_BUCKET |
Nome do bucket | course-plat |
Storage de Arquivos
Sistema Híbrido
A aplicação suporta dois tipos de armazenamento:
1. S3/MinIO (recomendado)
- Arquivos armazenados em bucket privado
- Acesso via proxy da aplicação (
/api/files/...) - Controle de permissões por turma/classe
2. Local
- Arquivos em disco (
./storage/uploads) - Útil para desenvolvimento ou servidores pequenos
URLs de Arquivos
| Onde | Formato |
|---|---|
| Banco de dados | proxy://pasta/arquivo.pdf |
| Frontend | /api/files/pasta/arquivo.pdf |
Use getFileUrl(url) de @/app/lib/utils/storage/fileUrl para converter.
Comandos Úteis
# Desenvolvimento
npm run dev # Inicia dev server
npm run build # Build para produção
npm run start # Inicia produção server
# Docker
docker compose up -d # Inicia serviços
docker compose down # Para serviços
docker compose logs -f # Ver logs
# MongoDB (via Docker)
docker exec -it course-plat-mongodb mongosh
docker exec course-plat-mongodb mongodump --archive > backup.gz
# MinIO (via Docker)
docker exec -it course-plat-minio mc alias set local http://localhost:9000 minioadmin minioadmin
docker exec course-plat-minio mc ls local/course-plat
Backup
MongoDB
# Script de backup
./docker/production/backup-mongodb.sh
# Manual
docker exec course-plat-mongodb mongodump --gzip --archive > backup.gz
MinIO
# Script de backup
./docker/minio/backup-minio.sh
Troubleshooting
MongoDB não conecta
# Verificar se container está rodando
docker ps | grep mongo
# Ver logs
docker logs course-plat-mongodb
MinIO Access Denied
# Verificar política do bucket
docker exec course-plat-minio mc anonymous get local/course-plat
# Bucket deve ser "none" (privado)
docker exec course-plat-minio mc anonymous set none local/course-plat
Arquivos antigos não funcionam
Verifique se getFileUrl() está sendo usado para converter URLs. Arquivos antigos com URLs diretas do MinIO precisam ser convertidas para o proxy.
Documentação Adicional
- DEPLOYMENT.md - Deploy em produção
- docker/minio/README.md - Setup do MinIO
Licença
[Adicionar licença]
Languages
JavaScript
96.5%
CSS
2.6%
Shell
0.8%