214 lines
5.2 KiB
Markdown
214 lines
5.2 KiB
Markdown
# 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]
|