Especificação — serviço de deploy multiservidor¶
Estado implementado (2026-07-20):
deploy-agent/entregaPOST /v1/deployasync (202) +GET /v1/deploy/{id}, pipelinesync→recreate→stabilize→verify, lock, auditoria. CI DEV usa gate#publish+ poll. Ambientes:deveqas. HMAC/TLS no agent e publish emfeature/*/feat/= MVP2 / evolução.Doc operacional do pacote: deploy-agent/docs/README.md · Guia: guia-atualizacao-servidor.md.
Este documento define um processo completo, seguro e replicavel para automatizar deploy em servidores de teste (DEV/QAS), usando um microservico Python de deploy acionado por pipeline CI/CD.
Objetivo principal: eliminar operacao manual de git pull, rebuild e restart, com padrao unico para varios servidores.
1) Escopo e Objetivos¶
Objetivos¶
- Automatizar atualizacao de codigo e servicos Docker por requisicao autenticada.
- Permitir deploy por servico especifico ou deploy completo.
- Padronizar o processo para varios servidores de teste.
- Reduzir risco operacional com lock, timeout, auditoria e rollback.
Fora de escopo (neste primeiro ciclo)¶
- Deploy de producao com estrategia blue/green.
- Orquestracao Kubernetes.
- Auto rollback por analise funcional (somente rollback tecnico basico).
2) Arquitetura de Referencia¶
Componentes¶
- CI/CD (GitHub Actions): build/push de imagens e gatilho de deploy.
- Deploy Agent (Python): API HTTP interna para disparar deploy no servidor.
- Host Executor (shell scripts): usa scripts existentes em
ecosif-structure/scripts. - Docker Compose Stack: servicos da plataforma ECOSIF.
- Observabilidade: logs estruturados + healthcheck + metricas basicas.
Fluxo de alto nivel¶
pushemdevelop(ou branch de ambiente).- CI valida build e publica imagens.
- CI chama endpoint do Deploy Agent no(s) servidor(es) de teste.
- Agent valida autenticacao/autorizacao.
- Agent executa pipeline local:
- atualizar git/submodulos;
- atualizar servico alvo (ou todos);
- reiniciar servico(s);
- validar health;
- registrar auditoria.
- Agent retorna status detalhado para o CI.
3) Contrato da API de Deploy¶
Endpoint principal¶
POST /v1/deploy
Request body¶
{
"user": "nome-ou-sistema",
"key": "token-ou-assinatura",
"service": "ecosif-auth",
"branch": "develop",
"environment": "dev" // ou "qas",
"request_id": "uuid-opcional"
}
Regras de negocio¶
user: obrigatorio, usado para auditoria.key: obrigatorio, validado por segredo no servidor.service:- vazio/null => deploy completo;
- preenchido => deploy apenas daquele servico.
branch: opcional, defaultdevelop.environment: opcional, defaultdev.request_id: opcional, se ausente o servidor gera um UUID.
Response¶
{
"request_id": "4b4b7b6e-....",
"status": "success",
"server": "dev-01",
"branch": "develop",
"service": "ecosif-auth",
"steps": [
{"name":"git_update","status":"ok","duration_ms":4212},
{"name":"service_update","status":"ok","duration_ms":80125},
{"name":"restart","status":"ok","duration_ms":15000},
{"name":"healthcheck","status":"ok","duration_ms":3200}
],
"started_at": "2026-05-05T12:00:00Z",
"finished_at": "2026-05-05T12:01:45Z"
}
Codigos HTTP sugeridos¶
200: concluido com sucesso.202: aceito e executando em background (modo async).400: payload invalido.401: autenticacao invalida.403: usuario sem permissao.409: deploy em execucao (lock ativo).422: servico nao permitido.500: erro interno.
4) Seguranca (Obrigatorio para "sem dor")¶
Controles minimos¶
- Endpoint exposto apenas em rede interna/VPN.
- TLS (reverse proxy com certificado).
- Autenticacao por token forte (minimo 32 bytes) ou HMAC.
- Lista de usuarios permitidos (
allowlist). - Lista de servicos permitidos (
allowlistfixa): ecosif-authecosif-masterdataecosif-movimentsecosif-querysecosif-reportsecosif-complianceecosif-angular- (
ecosif-automationsfora — Lambda AWS) - Nunca interpolar
serviceem shell comshell=True. - Timeout por etapa + timeout total.
- Lock de concorrencia para impedir dois deploys simultaneos.
- Logs sem segredos (mascarar token/chave).
Recomendacao de autenticacao¶
- Curto prazo:
X-API-Key+usercomallowlist. - Medio prazo: assinatura HMAC com timestamp e nonce:
- previne replay;
- dispensa envio de segredo no body.
5) Implementacao do Deploy Agent (Python)¶
Stack recomendada (leve)¶
- Python 3.11+
- FastAPI + Uvicorn
- Pydantic para validacao
subprocess.run(..., shell=False)para comandosfilelock(ou lockfile manual)
Estrutura minima de codigo¶
app/main.py- API e middlewaresapp/auth.py- validacao de credenciaisapp/deploy_service.py- orquestracao dos passosapp/executor.py- execucao segura de comandosapp/settings.py- configuracoes por ambienteapp/models.py- request/response schema
Comandos base (usando scripts existentes)¶
- Atualizacao git/submodulos:
bash scripts/update-submodules.sh <branch>- Atualizacao deploy:
- servico especifico:
bash scripts/update.sh --dev --branch <branch> <service>
- completo:
bash scripts/update.sh --dev --branch <branch> --yes
- Reinicio:
- servico especifico:
bash scripts/restart.sh --dev <service>
- completo:
bash scripts/restart.sh --dev
Importante: para automacao sem interacao, o
update.shdeve suportar flag--yes(nao perguntar confirmacao).
6) Processo Operacional (Passo a Passo)¶
Processo de deploy por requisicao¶
- Receber request e validar schema.
- Autenticar
userekey. - Validar
servicena allowlist (se informado). - Adquirir lock global de deploy.
- Registrar auditoria
started. - Executar:
- etapa A: atualizar git/submodulos;
- etapa B: atualizar servico(s);
- etapa C: reiniciar servico(s);
- etapa D: validar healthchecks.
- Registrar auditoria
finishedcom resultado. - Liberar lock.
- Retornar resultado detalhado.
Healthcheck minimo¶
docker compose pssem servico critico em estadoexited/unhealthy.- Endpoints:
/ecosif-auth/actuator/health/ecosif-masterdata/actuator/health/ecosif-moviments/actuator/health/ecosif-querys/actuator/health/ecosif-reports/actuator/health/ecosif-compliance/health
7) Topologia Multiservidor¶
Padrao de replicacao¶
- Instalar o mesmo Deploy Agent em cada servidor:
dev-01,dev-02,qas-01, etc.- Cada servidor com:
SERVER_NAMEENVIRONMENTALLOWED_BRANCHES(ex.:developem DEV,qasem QAS)
Modelos de disparo¶
- Modelo A (recomendado): CI chama cada servidor explicitamente.
- simples, controle total, facil auditoria.
- Modelo B: um orchestrator central chama servidores em lote.
- util quando quantidade de hosts crescer.
Estrategia de rollout¶
- Sequencial por servidor (mais seguro):
- deploy
dev-01; - validar;
- deploy
dev-02; - validar.
- Paralelo (mais rapido) apenas apos maturidade operacional.
8) Integracao CI/CD¶
Gatilho recomendado¶
- Workflow para
develop: - validar/testar;
- build/push imagens;
- chamar Deploy Agent em DEV.
Exemplo de chamada no CI (conceitual)¶
curl -X POST "https://deploy.dev-01.interno/v1/deploy" \
-H "Content-Type: application/json" \
-H "X-API-Key: ${DEPLOY_API_KEY}" \
-d '{
"user": "github-actions",
"service": "",
"branch": "develop",
"environment": "dev" // ou "qas"
}'
Segredos no CI¶
DEPLOY_API_KEY_DEV_01DEPLOY_API_KEY_DEV_02DEPLOY_URL_DEV_01DEPLOY_URL_DEV_02
9) Observabilidade e Auditoria¶
Logs estruturados (JSON)¶
Campos obrigatorios:
timestamprequest_iduserserverenvironmentbranchservicestepstatusduration_mserror_code/error_message(quando falha)
Monitoracao minima¶
- Contador de deploys por status (
success/fail). - Duracao media de deploy.
- Numero de locks por concorrencia.
- Ultimo deploy por servidor.
10) Rollback e Recuperacao¶
Rollback tecnico imediato¶
Quando healthcheck falhar apos deploy:
- Registrar falha.
- Tentar reiniciar stack uma vez.
- Se falhar novamente:
- voltar para tag anterior de imagens (ou commit anterior);
docker compose up -d;- validar healthchecks.
- Emitir alerta.
Politica¶
- Em ambiente de teste, rollback automatico pode ser habilitado apos fase piloto.
- Em fase inicial, usar rollback assistido (manual com comando guiado).
11) Requisitos de Infra¶
Servidor¶
- Linux com Docker + Docker Compose plugin.
- Acesso ao repositorio Git/submodulos.
- Python 3.11+.
- Usuario de sistema dedicado para deploy (
ecosif-deploy). - Permissao restrita ao diretorio do projeto.
Rede¶
- Endpoint acessivel apenas por rede interna/VPN.
- Firewall liberando apenas origem do CI e administradores.
12) Plano de Implantacao em Fases¶
Fase 0 - Preparacao (1 dia)¶
- Ajustar
update.shpara modo nao interativo (--yes). - Definir allowlist de servicos.
- Criar chave de API por servidor.
Fase 1 - Piloto em 1 servidor DEV (1-2 dias)¶
- Subir Deploy Agent com systemd.
- Integrar CI para chamar endpoint de 1 host.
- Validar lock, timeout, logs e healthchecks.
Fase 2 - Expansao para varios DEV (1-2 dias)¶
- Replicar servico nos demais servidores.
- Deploy sequencial via CI.
- Consolidar auditoria.
Fase 3 - Harden e padronizacao (2-4 dias)¶
- HMAC + anti-replay.
- Dashboard de monitoracao.
- Rollback automatico controlado.
- Playbook operacional final.
13) Criterios de Pronto para Uso ("sem dor")¶
Para considerar o servico pronto:
- Deploy por endpoint funciona em todos os servidores alvo.
- Nao ha deploy concorrente (lock validado).
- Todas as falhas retornam erro claro e auditavel.
- Healthcheck pos-deploy obrigatorio.
- Tempo total de deploy dentro de SLO definido.
- Processo de rollback documentado e testado.
- Chaves/segredos nao aparecem em log.
14) Riscos e Mitigacoes¶
- Risco: chamada maliciosa ao endpoint.
- Mitigacao: rede interna + API key/HMAC + allowlist.
- Risco: comando com injecao via
service. - Mitigacao: whitelist estrita +
subprocesssem shell. - Risco: deploy duplo simultaneo.
- Mitigacao: lockfile global.
- Risco: ambiente inconsistente entre servidores.
- Mitigacao: configuracao versionada e checklist unico.
- Risco: deploy sem visibilidade.
- Mitigacao: logs estruturados + request_id + alerta.
15) Decisoes Recomendadas para o Projeto ECOSIF¶
- Usar Deploy Agent Python (FastAPI) por servidor de teste.
- Integrar gatilho de deploy no pipeline
develop. - Reaproveitar scripts existentes em
ecosif-structure/scripts. - Comecar com API key e evoluir para HMAC.
- Rollout sequencial por servidor ate estabilizar.
16) Checklist de Execucao (Resumo)¶
Status implementação DEV (deploy-agent/ + workflow hub): concluído no código.
Itens de rede/TLS e rollback em servidor específico: revalidar por ambiente.
- [x]
update.shcom--yese retorno de erro consistente. - [x] Deploy Agent com auth, lock, timeout e logs.
- [x] systemd service + restart automatico (unit documentada / ops).
- [ ] endpoint protegido por rede e TLS (por servidor).
- [x] CI chamando endpoint com segredo (
deploy-dev-from-root.yml+#publish). - [x] healthchecks e auditoria por request (pipeline async + verify).
- [ ] rollback tecnico validado em teste (por ambiente).
Status deste documento: especificacao implementada de forma faseada em DEV; promover com cautela a QAS/prod.