# 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 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]