Initial commit
This commit is contained in:
@@ -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]
|
||||
Reference in New Issue
Block a user