diff --git a/RELEASE.md b/RELEASE.md index 30a12a9..4e2d36c 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -21,6 +21,29 @@ - [ ] TLS terminando no proxy reverso, com `Api__RedirecionarHttps` coerente - [ ] Administrador inicial criado e a senha do `.env` trocada pelo endpoint de usuários +## Exposição de portas — pendente até a primeira publicação + +O `docker-compose.yml` de hoje serve a desenvolvimento local, onde publicar porta na máquina não expõe +nada. **Num host acessível pela rede, três coisas precisam mudar antes de subir**, e nenhuma delas está +feita: + +- [ ] **`api` deixa de ser publicada.** O nginx do contêiner `web` já a alcança pela rede interna + (`location /api/` e `location /hangfire`). Publicada, a API atende HTTP puro direto da internet + com `Api__RedirecionarHttps: "false"` — o token de sessão e a senha do certificado no upload + viajariam em texto claro para quem falasse com ela sem passar pelo proxy. +- [ ] **`postgres` preso ao loopback** (`127.0.0.1:5432:5432`), não removido: o `dotnet ef` e os + clientes de banco continuam funcionando por túnel SSH. Único ponto público deve ser o `web`. +- [ ] **`ASPNETCORE_ENVIRONMENT` definido explicitamente.** O padrão do compose é `Development`, e com + ele o Swagger sobe público — o mapa inteiro da API, rotas administrativas incluídas. + +> **O Docker fura o firewall.** Ele insere as próprias regras na cadeia `DOCKER` do iptables, avaliadas +> **antes** do UFW: um `ufw deny 5432` **não** bloqueia uma porta publicada pelo Docker. Prender ao +> `127.0.0.1` no próprio compose é o que funciona, porque aí o socket nem chega a abrir na interface +> externa. Conferir com `ufw status` dá falsa segurança; confira com `ss -tlnp` ou de outra máquina. + +Nenhuma dessas mudanças perde dado: todas recriam contêiner, e `pgdata` e `miniodata` são volumes +nomeados. Ainda assim, tire o dump antes — o custo é um comando. + ## Verificação funcional - [ ] Login, e `Operador` recebendo 403 nas rotas administrativas