Initial commit

This commit is contained in:
Rafael Dias Martins
2026-08-31 14:10:20 -03:00
commit 8fcb5aac66
454 changed files with 60207 additions and 0 deletions
+213
View File
@@ -0,0 +1,213 @@
# 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
```bash
git clone <repo-url>
cd course-plat
npm install
```
### 2. Configure variáveis de ambiente
```bash
cp .env.example .env.local
```
Edite `.env.local` com suas configurações:
```bash
# 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
```bash
# MongoDB + MinIO
docker compose up -d
# Verifique que os containers estão rodando
docker ps
```
### 4. Inicie a aplicação
```bash
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](./DEPLOYMENT.md) para instruções completas.
Resumo rápido:
```bash
# 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
```bash
# 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
```bash
# Script de backup
./docker/production/backup-mongodb.sh
# Manual
docker exec course-plat-mongodb mongodump --gzip --archive > backup.gz
```
### MinIO
```bash
# Script de backup
./docker/minio/backup-minio.sh
```
## Troubleshooting
### MongoDB não conecta
```bash
# Verificar se container está rodando
docker ps | grep mongo
# Ver logs
docker logs course-plat-mongodb
```
### MinIO Access Denied
```bash
# 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](./DEPLOYMENT.md) - Deploy em produção
- [docker/minio/README.md](./docker/minio/README.md) - Setup do MinIO
## Licença
[Adicionar licença]