Deploy
SPA estática. Não há processo Node em produção: o dist/ é servido por Nginx (imagem Docker) ou qualquer CDN/host estático desde que as rotas caiam em index.html.
Ambientes
| Ambiente | Front | APIs (típico) | Como configura |
|---|---|---|---|
| Dev local | Vite | proxy → localhost ou hosts GEV | .env |
| CI | npm run build | não sobe app | GitHub Actions |
| Produção | imagem nginx:alpine | .env.production / build-args | rebuild |
Valores atuais em .env.production:
VITE_API_BASE_URL=https://centralcrmapixyz.gevtech.com.brVITE_GOVERNANCE_API_BASE_URL=https://defaultcrmapi.gevtech.com.br
Pipeline CI/CD
Workflow: .github/workflows/ci.yml
push/PR → main|develop
job test-and-quality
Node 20 → npm ci → lint → test:coverage → Sonar (continue-on-error)
job build (needs test)
npm ci → npm run build
Não há step de publish/deploy neste YAML. O artefato de produção é o dist/ ou a imagem Docker construída à parte (registry interno).
Secrets GitHub:
SONAR_TOKENSONAR_HOST_URL
Não colocar JWT nem .env de produção nos secrets do front além do necessário para Sonar e, se no futuro houver deploy, URLs públicas VITE_*.
Imagem Docker
docker build --build-arg VITE_API_BASE_URL=https://... \
--build-arg VITE_GOVERNANCE_API_BASE_URL=https://... \
-t centralcrm-front .
O Dockerfile atual só declara ARG VITE_API_BASE_URL. Se precisar da API Default diferente do default compilado, estenda o Dockerfile com ARG VITE_GOVERNANCE_API_BASE_URL e VITE_SESSION_VAULT_SECRET antes de npm run build, ou injete um .env.production no stage builder (sem copiar .env secretos para a imagem final — o stage Nginx só copia dist/).
Compose: docker-compose.yml mapeia 3000:80.
Nginx (nginx.conf):
try_files $uri $uri/ /index.html(SPA)- gzip
- cache longo em js/css/imagens
Não faz proxy /api em produção nesta config. O browser chama os hosts absolutos VITE_*. Se quiser same-origin em prod, o ingress (Caddy/Nginx na frente) deve encaminhar /api e /socket.io.
Estratégia de rollback
- O front é stateless: reverter a imagem/tag anterior (ou o
dist/no bucket) restaura a UI - APIs são independentes: rollback do front não desfaz dados
- Se um
VITE_*apontou para API errada, o único fix é rebuild + redeploy - Sessões no localStorage: mudar
VITE_SESSION_VAULT_SECRETforça re-login (esperado) - Cache de assets: filenames hash do Vite;
index.htmlnão deve ter cache agressivo (hoje o nginx cacheia só estáticos por extensão)
Checklist de release
- CI verde em
main - Changelog atualizado
-
VITE_SESSION_VAULT_SECRETdefinido no build de produção - Theme tokens / CORS das APIs já aceitam a origem do front
- Smoke: login, painel, um diretório, um PATCH inócuo em QA