Pular para o conteúdo principal

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

AmbienteFrontAPIs (típico)Como configura
Dev localViteproxy → localhost ou hosts GEV.env
CInpm run buildnão sobe appGitHub Actions
Produçãoimagem nginx:alpine.env.production / build-argsrebuild

Valores atuais em .env.production:

  • VITE_API_BASE_URL=https://centralcrmapixyz.gevtech.com.br
  • VITE_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_TOKEN
  • SONAR_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

  1. O front é stateless: reverter a imagem/tag anterior (ou o dist/ no bucket) restaura a UI
  2. APIs são independentes: rollback do front não desfaz dados
  3. Se um VITE_* apontou para API errada, o único fix é rebuild + redeploy
  4. Sessões no localStorage: mudar VITE_SESSION_VAULT_SECRET força re-login (esperado)
  5. Cache de assets: filenames hash do Vite; index.html nã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_SECRET definido 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