name: kong-edge-functions-debug
description: Debug 401 errors in Kong + Supabase Edge Functions on VPS Docker
tags: [supabase, kong, edge-runtime, vps, docker]
created: 2025-06-01
Kong + Edge Functions Debug — Supabase Stack em VPS
Contexto
Debugar 401 em /functions/v1/ num stack Supabase (Kong + Edge Runtime) em VPS Docker.
Sintomas e Diagnóstico
Sintoma: 401 vem do Edge Runtime, NÃO do Kong
Como distinguir:
- - Resposta Kong:
{"error":"No authorization"}(60ms, vem do Kong) - - Resposta Edge Runtime:
{"error":"Unauthorized"}(mais lento, ~200ms+) - - Não usar
kong reloadpara mudanças grandes — usardocker compose down/up - - Não hardcodar IPs de container — usar nomes do Docker network (
functions,auth, etc.) - - O arquivo
/tmp/kong.ymldentro do container Kong NÃO é persistente — é recriado a cada start viacommand:do docker-compose.yml
Teste dentro do container Kong:
`bash
docker exec deploy-vps-kong-1 sh -c 'wget -O- -q "http://172.23.0.9:9000/unctions/v1/manage-users"'
`
Se retorna 401 do Edge Runtime → Kong está proxyando corretamente, problema é no código.
Se retorna 401 do Kong → Kong não consegue reachar o upstream, verificar nginx-kong.conf.
Padrão: JWT com sub vazio causa 401 no Edge
Muitos Edge Functions Supabase verificam decoded.sub. Se o JWT usado tem sub: "" ou está mal-formatado, a função retorna 401 antes de qualquer lógica.
`typescript
// Exemplo de verificação que causa 401 silencioso
const decoded = jwt.decode(authHeader.replace("Bearer ", ""));
if (!decoded || !decoded.sub) {
return new Response(JSON.stringify({ error: "Unauthorized" }), { status: 401 });
}
`
Como identificar: Decodificar o JWT em jwt.io ou no console do navegador.
Padrão: Container do Edge Runtime em restart loop
Se o container deploy-vps-functions-1不停地 restart:
1. Verificar se /home/deno/functions/main/ existe DENTRO do container:
`bash
docker exec deploy-vps-functions-1 ls /home/deno/functions/main/
`
2. Se não existir, o --main-service flag do deno start pode falhar silenciosamente
3. Copiar o código para o caminho correto:
`bash
docker cp supabase/functions/manage-users/index.ts deploy-vps-functions-1:/home/deno/functions/main/index.ts
`
Padrão: Kong não gera upstream no nginx.conf
O Kong em modo declarative registra o service no Admin API mas o nginx-kong.conf não gera o upstream block correspondente.
Sintoma: curl localhost:8001/services/ mostra o service mas nginx -T não mostra o upstream.
Solução: Restart completo do container Kong:
`bash
docker compose down && docker compose up -d
`
Reload (kong reload) não regenera todos os blocks.
Padrão: YAML corrompido no docker-compose.yml
O Kong em modo declarative recebe config via command: -c /tmp/kong.yml. Se o YAML tem problemas de indentação ou tipos inválidos (ex: depends_on dentro de command:), o Kong falha silenciosamente ou reinicia.
Verificar:
`bash
docker exec deploy-vps-kong-1 cat /tmp/kong.yml | python3 -m json.tool
`
Checklist de Debug
1. docker ps — todos os containers up?
2. docker logs deploy-vps-functions-1 --tail 20 — Edge Runtime healthy?
3. docker exec deploy-vps-kong-1 sh -c 'wget -O- -q "http://functions:9000/"' — Kong reacha Edge?
4. curl -s "https://rochasalesseguros.com.br/functions/v1/" — resposta do Kong ou do Edge?
5. Decodificar JWT sendo enviado — tem sub?