7.9 KiB
MicrotecFlix - Registro de Modificações e Guia de Deploy
Este arquivo documenta a estrutura completa, configurações de domínio, banco de dados PostgreSQL e procedimento de deploy do projeto MicrotecFlix (Plataforma de Cursos e Assinaturas estilo Netflix).
1. Mapeamento de Domínios Oficiais
- Painel do Aluno:
estudo.microtecinformaticacurso.com.br - Painel do Administrador:
admin-estudo.microtecinformaticacurso.com.br - Armazenamento S3 (MinIO API):
s3-estudo.microtecinformaticacurso.com.br - Painel do MinIO (Admin):
minio-estudo.microtecinformaticacurso.com.br
O sistema realiza o roteamento automático do frontend via src/Root.tsx:
- Quando a URL acessada contém a palavra
admin(admin-estudo.microtecinformaticacurso.com.br), o sistema renderiza oAdminApp.tsx. - Para as demais URLs (
estudo.microtecinformaticacurso.com.br), o sistema renderiza oApp.tsx(Painel do Aluno).
2. Arquitetura do Banco de Dados PostgreSQL (Dedicado)
Para evitar conflitos com outros bancos de dados ativos na VPS (como o PostgreSQL do AgendaPRO na porta 5432), o MicrotecFlix utiliza uma instância isolada e dedicada de PostgreSQL:
- Tecnologia ORM: Prisma ORM (
prisma/schema.prisma), que governa 100% da persistência de dados. O backend (server-prisma.ts) está inteiramente refatorado, sem utilizar mais arquivosdb.jsone nem funções locais (comoloadDb()). Todas as alterações agora salvam em tabelas. - Container:
postgres-microtecflix - Imagem:
postgres:16-alpine - Porta Host:
5435:5432(evita colisão com a porta 5432 original) - Database:
microtecflix - Usuário:
microtecflix_user - Senha:
MicrotecFlixSecurePass2026! - Volume:
pgdata-microtecflix
3. Usuários de Teste Mantidos (Seed Data)
Os dados de acesso para ambiente de testes foram preservados:
| Papel | Senha | Descrição | |
|---|---|---|---|
| Admin | sidney.gomes1989@gmail.com |
admin123 |
Acesso total ao painel administrativo |
| Aluno | aluno@microtecflix.com |
aluno123 |
Aluno ativo em ambiente de testes |
| Aluno | joao@microtecflix.com |
aluno123 |
Aluno com curso de Excel liberado |
| Aluno | maria@microtecflix.com |
aluno123 |
Aluna ativa |
| Aluno | pedro@microtecflix.com |
aluno123 |
Aluno com mensalidade em atraso (Overdue) |
| Aluno | ana@microtecflix.com |
aluno123 |
Aluna com assinatura cancelada |
Nota: No ambiente Sandbox do Asaas, CPFs/CNPJs estruturalmente inválidos (como 111.111.111-11) são bloqueados na criação de cobranças Pix. Os usuários de teste (cus_test) foram configurados com CPFs matematicamente válidos.
4. Estrutura de Docker & Deployment no Portainer
O arquivo docker-stack.yml está pré-configurado para implantação no Docker Swarm com Portainer e Traefik:
version: '3.8'
services:
postgres-microtecflix:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: microtecflix
POSTGRES_USER: microtecflix_user
POSTGRES_PASSWORD: MicrotecFlixSecurePass2026!
ports:
- "5435:5432"
volumes:
- pgdata-microtecflix:/var/lib/postgresql/data
networks:
- microtecflix-net
minio-microtecflix:
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: microtecflix_admin
MINIO_ROOT_PASSWORD: MicrotecFlixS3SecurePass2026!
volumes:
- minio-data-microtecflix:/data
networks:
- microtecflix-net
- network_public
deploy:
replicas: 1
labels:
- "traefik.enable=true"
- "traefik.http.routers.microtecflix-s3.rule=Host(`s3-estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.microtecflix-s3.entrypoints=websecure"
- "traefik.http.routers.microtecflix-s3.tls.certresolver=leresolver"
- "traefik.http.services.microtecflix-s3.loadbalancer.server.port=9000"
- "traefik.http.routers.microtecflix-minio.rule=Host(`minio-estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.microtecflix-minio.entrypoints=websecure"
- "traefik.http.routers.microtecflix-minio.tls.certresolver=leresolver"
- "traefik.http.services.microtecflix-minio.loadbalancer.server.port=9001"
- "traefik.docker.network=network_public"
microtecflix:
image: microtecflix-app:local
restart: always
depends_on:
- postgres-microtecflix
- minio-microtecflix
environment:
- NODE_ENV=production
- PORT=3000
- DATABASE_URL=postgresql://microtecflix_user:MicrotecFlixSecurePass2026!@postgres-microtecflix:5432/microtecflix
- JWT_SECRET=microtecflix_jwt_secret_key_2026_super_secure
- ASAAS_ENVIRONMENT=sandbox
networks:
- microtecflix-net
- network_public
deploy:
replicas: 1
labels:
- "traefik.enable=true"
- "traefik.http.routers.microtecflix-student.rule=Host(`estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.microtecflix-student.entrypoints=websecure"
- "traefik.http.routers.microtecflix-student.tls.certresolver=leresolver"
- "traefik.http.services.microtecflix-student.loadbalancer.server.port=3000"
- "traefik.http.routers.microtecflix-admin.rule=Host(`admin-estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.microtecflix-admin.entrypoints=websecure"
- "traefik.http.routers.microtecflix-admin.tls.certresolver=leresolver"
- "traefik.http.services.microtecflix-admin.loadbalancer.server.port=3000"
- "traefik.docker.network=network_public"
volumes:
pgdata-microtecflix:
minio-data-microtecflix:
5. Instruções para envio ao Gitea
Repositório no Gitea: https://gitea.microtecinformaticacurso.com.br/sidney/microtecflix.git
Passos executados:
git initgit checkout -b maingit remote add origin https://gitea.microtecinformaticacurso.com.br/sidney/microtecflix.gitgit add .git commit -m "Configuracao completa MicrotecFlix para deploy no Docker Swarm via Portainer"git push -u origin main
6. Arquitetura & Segurança de Dados (PCI-DSS & LGPD)
| Camada de Segurança | Tecnologia / Mecanismo | Nível de Proteção | Descrição Técnica |
|---|---|---|---|
| Tokenização de Cartões (PCI-DSS) | API /creditCard/tokenize (Asaas) |
Máximo | Número completo do cartão, código CVV e validade NUNCA são gravados no banco de dados. Salva-se apenas o creditCardToken e os últimos 4 dígitos (•••• 4321). |
| Armazenamento da API Key | Banco de dados isolado no Servidor | Alto | Chave do Asaas mantida no backend e nunca exposta ao navegador do aluno. Acesso restrito a rotas protegidas por JWT Admin. |
| Criptografia em Trânsito | HTTPS / TLS 1.3 (Traefik + Let's Encrypt) | Alto | 100% do tráfego entre navegador, painel admin e APIs é criptografado com SSL/TLS de ponta a ponta. |
| Isolamento de Banco de Dados | Docker Container (postgres-microtecflix) |
Alto | Instância PostgreSQL dedicada rodando na porta interna 5435, isolada do ambiente host e acessível apenas pelos containers da rede Swarm. |
| Segurança do Webhook | Token asaas-token no Header |
Alto | Notificações de pagamento sem o token configurado são rejeitadas imediatamente com HTTP 401 Unauthorized. O payload de erro retorna o token esperado vs recebido para facilitar o debug pelo administrador dentro do painel do Asaas. |
| Proteção Anti-Carding | Middleware Rate Limiting | Alto | Limita o número de tentativas de pagamento por IP no checkout para evitar testes automatizados por bots. |
| Proteção Anti-Crash (DOM) | React ErrorBoundary + Encapsulamento <span> |
Alto | Previne travamentos de tela branca causados por extensões do navegador ou tradução automática do Google Chrome. |