Nexus e uma plataforma moderna de gestao de atendimentos e operacoes internas. A proposta e centralizar pessoas, chamados e solucoes em uma base corporativa com API REST, autenticacao JWT, RBAC, banco PostgreSQL, frontend responsivo, Docker Compose e Nginx como reverse proxy.
Slogan: Conectando pessoas, chamados e solucoes.
Demonstrar uma arquitetura full stack pronta para evoluir em ambiente corporativo, cobrindo backend com FastAPI, persistencia relacional, migrations, autenticacao, permissoes por perfil, frontend React/TypeScript, conteinerizacao e configuracao basica de deploy.
- Frontend: React, Vite, TypeScript
- Backend: Python, FastAPI
- Banco de dados: PostgreSQL 16
- ORM: SQLAlchemy
- Migrations: Alembic
- Autenticacao: JWT
- Permissoes: RBAC por perfil
- Infraestrutura: Docker Compose
- Proxy reverso: Nginx
central-chamados/
frontend/ Aplicacao React + Vite
backend/ API FastAPI organizada em camadas
nginx/ Reverse proxy de entrada
docker-compose.yml
.env.example
Fluxo em Docker:
Usuario -> Nginx :80
Nginx / -> frontend:80
Nginx /api -> backend:8000
Backend -> postgres:5432
O backend usa o hostname postgres para acessar o banco dentro da rede interna do Docker Compose.
ADMIN: visualiza todos os chamados, gerencia usuarios, gerencia categorias e altera qualquer chamado.TECNICO: visualiza chamados atribuidos e disponiveis, assume chamados sem responsavel, altera status, conclui chamados e comenta.SOLICITANTE: cria chamados, visualiza apenas os proprios chamados, acompanha andamento, edita dados principais e comenta.
Status internos da API:
ABERTOEM_ANDAMENTOAGUARDANDO_SOLICITANTEAGUARDANDO_TERCEIROSCONCLUIDOCANCELADO
Exibicao no frontend:
- Aberto
- Em andamento
- Aguardando solicitante
- Aguardando terceiros
- Concluido
- Cancelado
Mudancas de status sao registradas no historico de auditoria do chamado.
- Copie o arquivo de ambiente:
cp .env.example .env-
Ajuste
SECRET_KEYe senhas se desejar. Em producao, definaENVIRONMENT=productione use umaSECRET_KEYlonga e aleatoria. -
Suba a stack:
docker compose up -d --buildSe seu ambiente usa o binario legado, rode:
docker-compose up -d --build- Acesse:
- Frontend:
http://localhost - Swagger:
http://localhost/docs - Health API:
http://localhost/api/health - Health DB:
http://localhost/api/health/db
Os dados abaixo vem do .env.example, existem apenas para ambiente local/demo e devem ser alterados antes do primeiro start em qualquer ambiente compartilhado:
- E-mail:
admin@example.com - Senha:
Admin@123456
O seed tambem cria as categorias iniciais: SISTEMA, INFRAESTRUTURA, REDE, BANCO_DE_DADOS, ACESSO, IMPRESSORA, HARDWARE, SOFTWARE e OUTROS.
Para o novo fluxo de atendimento, tambem sao criados setores iniciais e areas/tipos como VPN, IMPRESSORA, ACESSO, HARDWARE, SOFTWARE e OUTROS.
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reloadEm Windows PowerShell:
cd backend
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reloadPara execucao local fora do Docker, ajuste DATABASE_URL apontando para seu PostgreSQL local.
cd frontend
npm install
npm run devConfigure VITE_API_URL se a API nao estiver publicada em /api.
| Variavel | Descricao |
|---|---|
POSTGRES_DB |
Nome do banco PostgreSQL |
POSTGRES_USER |
Usuario do banco |
POSTGRES_PASSWORD |
Senha do banco |
DATABASE_URL |
URL SQLAlchemy usada pelo backend |
ENVIRONMENT |
Ambiente da aplicacao. Use production para habilitar validacoes mais rigidas de seguranca |
SECRET_KEY |
Chave de assinatura JWT |
ACCESS_TOKEN_EXPIRE_MINUTES |
Duracao do token JWT |
BACKEND_CORS_ORIGINS |
Origins permitidas no CORS |
INITIAL_ADMIN_NAME |
Nome do admin inicial |
INITIAL_ADMIN_EMAIL |
E-mail do admin inicial |
INITIAL_ADMIN_PASSWORD |
Senha do admin inicial |
UPLOAD_DIR |
Diretorio local onde anexos de chamados sao armazenados |
MAX_ATTACHMENT_SIZE_BYTES |
Tamanho maximo por anexo |
VITE_API_URL |
URL base da API no frontend |
NGINX_PORT |
Porta exposta pelo Nginx |
POST /api/auth/loginPOST /api/auth/registerGET /api/auth/meGET /api/usersPOST /api/usersGET /api/categoriesPOST /api/categoriesGET /api/sectorsPOST /api/sectorsPUT /api/sectors/{id}DELETE /api/sectors/{id}GET /api/support-areasPOST /api/support-areasPUT /api/support-areas/{id}DELETE /api/support-areas/{id}GET /api/support-typesPOST /api/support-typesPUT /api/support-types/{id}DELETE /api/support-types/{id}GET /api/ticketsPOST /api/ticketsGET /api/tickets/{id}PUT /api/tickets/{id}POST /api/tickets/{id}/commentsPOST /api/tickets/{id}/attachmentsGET /api/tickets/{id}/attachments/{attachment_id}GET /api/dashboard/metricsGET /api/healthGET /api/health/db
- Login com JWT.
- Cadastro publico de solicitantes.
- CRUD administrativo de usuarios, categorias legadas, setores, areas de suporte e tipos de suporte vinculados a area.
- CRUD de chamados com busca textual, paginacao e filtros por status, setor, area, tipo, prioridade, responsavel, solicitante e periodo.
- Criacao de chamados por ADMIN e SOLICITANTE. TECNICO nao cria chamados.
- Novo fluxo de abertura com solicitante automatico, setor, area, tipo dependente da area, detalhamento e prioridade.
- Anexos iniciais de imagem/video em armazenamento local, com metadados no banco e download protegido por permissao do chamado.
- Atribuicao de tecnico ativo por administradores e assuncao de chamados disponiveis por tecnicos.
- Acoes rapidas de atendimento: iniciar, aguardar solicitante, aguardar terceiros, concluir e cancelar.
- Edicao de titulo, descricao, setor, area, tipo e prioridade conforme perfil.
- Comentarios em chamados.
- Historico/auditoria de alteracoes, incluindo mudancas de status.
- Dashboard com total, abertos, em andamento, aguardando, concluidos, sem responsavel e distribuicoes por setor, area, tipo e prioridade.
- Protecao de rotas no frontend por perfil.
- Docker Compose com
frontend,backend,postgresenginx. - Volume persistente
postgres_data:/var/lib/postgresql/data. - Volume persistente
ticket_uploads:/app/uploadspara anexos.
python3 -m compileall backend/app
cd frontend
npm run buildRotas frontend principais:
/login//chamados/chamados/novo/chamados/:id/usuarios/admin/atendimento/categorias
Secao reservada para imagens do Nexus:
- Login
- Dashboard
- Lista de chamados
- Detalhe do chamado
- Administracao
- SLA por prioridade, categoria e tempo de espera.
- Armazenamento externo de anexos e politicas avancadas de retencao.
- Notificacoes por e-mail e eventos em tempo real.
- Relatorios exportaveis em CSV/PDF.
- Base de conhecimento integrada aos chamados.
- Testes automatizados de API e frontend.
- Pipeline CI/CD.
- Configuracao de dominio, HTTPS e renovacao automatica de certificados.