Pular para conteúdo

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.

  1. Confirme a porta na VM: sudo ss -tlnp | grep dotnet (deve mostrar 127.0.0.1:5000).
  2. No PowerShell do seu PC, deixe a janela aberta:
ssh -L 8080:127.0.0.1:5000 servidor
  1. No navegador do seu PC:
    • Hangfire: http://localhost:8080/hangfire
    • Swagger: http://localhost:8080/swagger (se estiver habilitado, veja abaixo)
  2. Para fechar: Ctrl+C ou exit na 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 responde Bad local forwarding specification. Use o número.
  • Colocar localhost e 127.0.0.1 juntos: 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.