Skip to content

fix(proxy): app não perde a rede do NPM numa atualização - #733

Open
satomiflavio wants to merge 1 commit into
melgarafael:mainfrom
satomiflavio:fix/proxy-npm-sobrevive-atualizacao
Open

fix(proxy): app não perde a rede do NPM numa atualização#733
satomiflavio wants to merge 1 commit into
melgarafael:mainfrom
satomiflavio:fix/proxy-npm-sobrevive-atualizacao

Conversation

@satomiflavio

Copy link
Copy Markdown

Problema

Instalações que ficam atrás de um Nginx Proxy Manager (em vez do Caddy do
próprio kit ou de um Traefik) precisam plugar o contêiner app na rede do
NPM manualmente (docker network connect). Isso se perde na primeira
atualização: update.sh recria o app, a conexão manual some, e o domínio
volta a responder 502 — mesmo com o contêiner healthy (o healthcheck é um
probe TCP interno, não sabe nada de roteamento). Aconteceu numa instalação
real em 2026-09-11.

Correção

  • docker-compose.npm.yml (novo): fixa o app na rede/IP que o Proxy Host
    do NPM espera, do mesmo jeito que docker-compose.traefik.yml já faz para
    o Traefik; desliga o Caddy por profile.
  • REVERSE_PROXY=npm entra como terceiro valor de primeira classe em
    dc()/dc_files() (install.sh e _common.sh).
  • garantir_rede_do_proxy ganha a guarda para NPM: se a rede sumiu (ex.:
    docker network prune), a atualização para com uma mensagem explicando o
    que fazer, em vez de travar no erro opaco do Docker.
  • Teste novo em hostgator-setup-kit/test-validators.sh (já plugado em
    pnpm test:shell), cobrindo o caso de rede ausente e o de nunca recriar o
    Caddy por engano.

Prova

Simulei uma atualização real (docker compose -f docker-compose.prod.yml -f docker-compose.npm.yml up -d --force-recreate app) numa instalação com essa
configuração. Depois de recriado, o contêiner permaneceu automaticamente na
rede do NPM, no mesmo IP que o Proxy Host espera — sem nenhuma reconexão
manual — e ficou healthy.

Fragmento de release em .changes/proxy-npm-sobrevive-atualizacao.md
(capacidade_nova).


🤖 Generated with Claude Code

https://claude.ai/code/session_01TuEmS372yStRXYvvaGFqpY

Incidente real em 2026-09-11: uma instalação atrás de Nginx Proxy Manager
tinha a rede do `app` plugada à mão (`docker network connect`). A primeira
recriação do contêiner (deploy, `update.sh`) perdeu essa conexão e o domínio
voltou a responder 502, com o app `healthy` — o healthcheck é TCP interno e
não sabe nada de roteamento.

docker-compose.npm.yml (novo) faz pro NPM o que docker-compose.traefik.yml já
fazia pro Traefik: fixa o `app` na rede/IP que o Proxy Host espera e desliga
o Caddy por profile. docker-compose.yml (WAHA local) entra na mesma rede
compartilhada, já que nesta VPS o dashboard do WAHA também sai pelo NPM.

Faltava o fio até o kit: REVERSE_PROXY=npm agora é um terceiro valor de
primeira classe em dc()/dc_files() (install.sh e _common.sh, gêmeas), com
guarda de rede ausente em garantir_rede_do_proxy (mesmo cuidado que o Traefik
já tinha) e sem o bug de reativar o Caddy por engano que o force-recreate por
nome já causava pro Traefik — sem isso REVERSE_PROXY=npm silenciosamente
caía no branch do Caddy em ambos os pontos, reproduzindo o incidente na
primeira atualização.

Testado com sabotagem: revertida a mudança em _common.sh/update.sh, 4 dos 8
casos novos de test-validators.sh caíram nos pontos exatos (dc_files, guarda
de rede, integração de rede sumida, guarda do Caddy), confirmando que os
testes vigiam o comportamento e não só a presença do símbolo. Suíte restaurada
e verde (bash hostgator-setup-kit/test-validators.sh + os 6 demais scripts de
tests/shell/, que compõem pnpm test:shell).

Configuração inicial (REVERSE_PROXY=npm, PROXY_NETWORK_NAME, PROXY_NETWORK_APP_IP)
continua manual — NPM não fala por labels como o Traefik — documentada no
cabeçalho de docker-compose.npm.yml.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016Ja8SghdefMR1UqtT3TePw
@vercel

vercel Bot commented Sep 12, 2026

Copy link
Copy Markdown

Someone is attempting to deploy a commit to the rafael-maudibrasil's projects Team on Vercel.

A member of the Team first needs to authorize it.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: 652abef32519142a3f76c0dd40abf981afdd57e6

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 7 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: 652abef32519142a3f76c0dd40abf981afdd57e6

PR taxonomy review recommended (neutral)

Detected 1 PR taxonomy bucket(s): CI/CD Recommendation.

Scanned 7 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Runtime config changes may ship without example or template updates
  • 0 CI or workflow path(s) changed

Paths:

  • docker-compose.npm.yml
  • docker-compose.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: 652abef32519142a3f76c0dd40abf981afdd57e6

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 7 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: 652abef32519142a3f76c0dd40abf981afdd57e6

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 7 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@github-actions

Copy link
Copy Markdown

Recebido, @satomiflavio — obrigado por isto.

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. A
    main faz deploy de produção e a Vercel se recusa a construir código de fora, o que está
    certo. Ele não entra no gate de merge.
  • No primeiro PR de quem nunca contribuiu aqui, os workflows ficam parados esperando
    liberação
    — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum
    (nem o gh pr checks mostra os que estão nesse estado). Quem tria libera; você não precisa
    fazer nada.

Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só
lendo o diff — e responde aqui em até um dia útil, com a medição junto, nunca com um "acho
que".

Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem
depois é pessoa.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant