Acesso administrativo (Hangfire, Swagger, banco)¶
Algumas ferramentas existem na API, mas não podem ficar abertas para a internet: o painel do Hangfire (mostra e dispara jobs), o Swagger (lista todas as rotas) e o PostgreSQL. A regra é: elas só são acessadas por um túnel SSH a partir do seu PC.
O que está exposto ao público¶
Verificado em 25/10/2026, de fora da rede:
| Caminho | Resultado | Significa |
|---|---|---|
https://braggo.com.br/api/swagger/index.html |
404 | Swagger não exposto |
https://braggo.com.br/api/hangfire |
404 | dashboard do Hangfire não exposto |
https://braggo.com.br/hangfire |
200, mas é a página do Angular | não é o dashboard |
Por que o 200 em /hangfire: o Nginx devolve o index.html do Angular para qualquer caminho que não seja /api/. Para confirmar que é o Angular:
curl -s https://braggo.com.br/hangfire | grep -io "<title>[^<]*"
Deve mostrar o título do app (BraggoFrontEnd), e não o do Hangfire.
Repita esse teste depois de mudanças grandes no Nginx ou no Program.cs. Também confira que a API roda em produção:
sudo systemctl cat braggo-api | grep -i environment # ASPNETCORE_ENVIRONMENT=Production
Túnel SSH para a API (Hangfire e Swagger)¶
A API escuta só em 127.0.0.1:5000 dentro da VM. O túnel traz essa porta para o seu PC.
- Confirme a porta na VM:
sudo ss -tlnp | grep dotnet(deve mostrar127.0.0.1:5000). - No PowerShell do seu PC, deixe a janela aberta:
ssh -L 8080:127.0.0.1:5000 servidor
- No navegador do seu PC:
- Hangfire:
http://localhost:8080/hangfire - Swagger:
http://localhost:8080/swagger(se estiver habilitado, veja abaixo)
- Hangfire:
- Para fechar:
Ctrl+Couexitna janela do SSH.
O formato é -L PORTA_NO_PC:DESTINO:PORTA_NA_VM. Dois erros comuns:
- Deixar um texto no lugar da porta (
localhost:PORTA): o ssh respondeBad local forwarding specification. Use o número. - Colocar
localhoste127.0.0.1juntos: o destino é um só.
Se a porta 8080 do seu PC estiver ocupada, troque o primeiro número (8081, por exemplo). Esse túnel acessa a API direto, sem passar pelo Nginx, então não tem o prefixo /api.
Túnel SSH para o PostgreSQL¶
Para olhar o banco com uma ferramenta gráfica (DBeaver, pgAdmin) ou aplicar migrations:
ssh -N -L 5433:localhost:5432 servidor
Conecte em localhost:5433 com o usuário do banco. O -N só abre o túnel, sem terminal. Feche com Ctrl+C.
Se o Swagger ou o Hangfire derem 404 pelo túnel¶
Aí não é o túnel: o código da API desliga essas rotas em produção. Para o Swagger, uma forma segura é liberar por configuração, só quando você precisar:
if (app.Environment.IsDevelopment() || app.Configuration.GetValue<bool>("Swagger:Enabled"))
{
app.UseSwagger();
app.UseSwaggerUI();
}
Quando precisar, ponha Swagger__Enabled=true no /etc/braggo-api.env, reinicie a API, use pelo túnel e remova a linha depois. Isto é uma sugestão: só vale depois de conferir como o seu Program.cs está hoje.
O dashboard do Hangfire só funciona em produção se estiver mapeado no código com um filtro de autorização. Por padrão ele só aceita requisições locais, e pelo túnel a requisição chega como local.
Regras¶
- Nunca abra a porta 5000 ou a 5432 no firewall ou no roteador.
- Nunca publique Swagger ou Hangfire em uma rota pública "só por um tempinho".
- Se um dia precisar de acesso de fora de casa, o caminho seguro é colocar o acesso atrás do Cloudflare Access (login no painel da Cloudflare), nunca abrir direto.