本地K8s部署Supabase实时连接失败:URL或密钥配置是否正确?
解决Supabase Realtime WebSocket 404错误
一、确认端口转发的目标服务
K8s部署的Supabase中,Realtime是独立服务(通常Deployment名称为supabase-realtime),默认监听4000端口。你需要确保端口转发是将本地52102端口映射到Realtime服务的4000端口,而非Supabase API网关或其他服务。
正确的端口转发命令示例:
kubectl port-forward deployment/supabase-realtime 52102:4000
二、验证WebSocket URL正确性
- 检查端点路径有效性:
- 官方本地部署的Realtime默认WebSocket端点为
ws://localhost:4000/socket,你可以通过HTTP方式访问http://localhost:52102/socket/info测试。若返回JSON响应,说明路径正确;若返回404,需确认路径是否被Supabase Chart配置修改。 - 部分版本的Supabase Realtime端点可能为
/realtime/v1,可尝试将URL改为ws://localhost:52102/realtime/v1重试。
- 官方本地部署的Realtime默认WebSocket端点为
- 协议匹配:端口转发为HTTP时用
ws://,HTTPS时用wss://。
三、确认Realtime服务配置状态
- 检查Realtime服务的核心环境变量:
确保kubectl exec deployment/supabase-realtime -- env | grep REALTIME_REALTIME_ENABLED设置为true,且REALTIME_JWT_SECRET与Supabase的service key一致。 - 验证服务是否正常启动:
查看日志中是否存在类似"Realtime server started"的启动成功标识。kubectl logs deployment/supabase-realtime
四、密钥一致性验证
你使用service key的方式是正确的,但需确保该密钥属于本地部署的Supabase实例。可通过以下命令获取实例的service key并对比:
kubectl get secret supabase-secrets -o jsonpath='{.data.SUPABASE_SERVICE_ROLE_KEY}' | base64 -d
五、代码补全提示
当前代码中callback1和_on_subscribe函数未定义,即使WebSocket连接成功,后续也会报错。示例实现如下:
async def callback1(payload): print("收到PostgreSQL变更:", payload) def _on_subscribe(status, error): if status == RealtimeSubscribeStates.SUBSCRIBED: print("订阅成功") else: print(f"订阅失败: {error}")
内容的提问来源于stack exchange,提问作者TANANUN HENGSAWAT
相关产品推荐
相关产品推荐

