LiveKit实战指南:从本地5分钟跑通到公网分布式部署

发布时间:2026/9/7 8:34:09
LiveKit实战指南:从本地5分钟跑通到公网分布式部署 LiveKit实战指南从本地5分钟跑通到公网分布式部署【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址: https://gitcode.com/GitHub_Trending/li/livekitLiveKit 是一个用 Go 写的开源 WebRTC 媒体服务器。所谓媒体服务器SFUSelective Forwarding Unit你可以理解为转发站每个人的音视频流先到服务器再由服务器转发给房间里其他人这样 N 个人开会只需要 N 条上行而不是 N×(N-1) 条连接带宽和兼容性都省得多。LiveKit 把转发、信令、JWT 认证、节点间路由这些最麻烦的部分打包进一个二进制你只需要写业务逻辑。适合做视频房间、直播连麦、AI 语音通话的开发者以及要评估自研 vs 自建的架构师。五分钟跑通先让浏览器进一个房间LiveKit 的启动门槛是这几个开源实时项目里最低的——开发模式一条命令不需要配置文件、不需要 Redis。livekit-server --dev这条命令会自动做三件事API 密钥对设为devkey/secret、日志切到 debug、开启/debug/pprof生产环境别用--dev密钥是占位的。服务起来后监听7880信令和7881TCP 回退UDP 用50000-60000。客户端连房间需要一个 JWT 访问令牌里面编码了用户身份和房间权限用 LiveKit 自带的 CLI 生成lk token create \ --api-key devkey --api-secret secret \ --join --room my-first-room --identity user1拿这个 token 进官方的示例应用页面在 README 的 Getting Started 一节有入口输入 token 就能进房、看到自己和测试机器人bot-user1的视频。想验证转发链路通不通用 CLI 模拟一个发布者lk room join --url ws://localhost:7880 \ --api-key devkey --api-secret secret \ --identity bot-user1 --publish-demo my-first-room浏览器里出现机器人的 demo 视频流说明 SFU 转发链路已经通了。5 分钟从启动到看到画面。能力拆解这个服务器到底替你做了什么按功能模块看LiveKit 主要替你扛了四件事每件事对应一组关键参数。媒体转发50000-60000 的 UDP 端口段是命脉SFU 转发媒体走 UDP端口范围由rtc.port_range_start/end控制默认 50000 到 60000。⚠️ 这个范围必须在防火墙上放开入站 UDP否则客户端要么连不上、要么被降级到 TCP。想减少端口占用可以改用rtc.udp_port指定单一 mux 端口官方建议端口数不少于 vCPU 数配置完直接看仓库里的注释示例最清楚配置样例 config-sample.yaml。认证API key 对签发 JWT配置里的keys是一段key: secret映射客户端进房、调 RoomService API 都靠它签 JWT。支持配多组密钥方便轮换。生产环境有个硬约束secret 短于 32 字符会触发安全告警这条校验逻辑在 配置校验源码 里非development模式才生效。多节点协同一行 Redis 配置切换集群模式单机模式下所有房间锁在本地一旦配上redis.addressLiveKit 自动进入全分布式模式——任意客户端连到任意节点都能被路由到同一个房间房间状态、信令消息、节点选择全部走 Redis。没有先单机后改集群的代码改动这是它的分布式设计里最省心的部分。可观测性Prometheus 指标一个端口开启prometheus_port: 6789一行配置服务就在:6789/metrics暴露房间数、参与者数、节点 CPU/内存等指标接你的 Prometheus Grafana 即可。指标定义在 telemetry 模块房间级指标在prometheus/rooms.go。四个模块对应的核心参数速查参数一句话说明rtc.port_range_start/endSFU 转发媒体用的 UDP 端口范围防火墙必须放行keysAPI 密钥对签 JWT 用生产环境 secret 至少 32 字符redis.address配上即进入分布式模式房间跨节点路由prometheus_port开启后在 6789 端口暴露/metricsdevelopment开发模式总开关占位密钥、debug 日志、pprof三种常见部署方式按网络环境选场景一本机或内网体验内网最省事--dev直接跑。想留配置文件就用最小配置development: true keys: devkey: secret rtc: tcp_port: 7881内网环境下use_external_ip保持默认的 false 就行STUN 探测公网 IP 反而没意义。场景二局域网内多人使用的长驻服务把密钥换成真值32 字符以上、日志切到 JSON 方便采集Redis 先不加port: 7880 rtc: port_range_start: 50000 port_range_end: 60000 tcp_port: 7881 keys: mykey: 生成一个32位以上的随机串 logging: level: info json: true prometheus_port: 6789容器化时用-e LIVEKIT_KEYSkey: secret或把 YAML 直接传进LIVEKIT_CONFIG环境变量服务端有--config-body标志接收它比挂载文件更适合 12-factor 式的部署。场景三公网多台机器组成集群跨机器的要点只有两条让每个节点正确报出自己的公网 IP以及所有节点指向同一个 Redis。redis: address: redis-host:6379 password: 密码 rtc: use_external_ip: true # 云主机内网IP映射公网时靠STUN自发现 port_range_start: 50000 port_range_end: 60000 keys: prodkey: 32位以上secret logging: level: info json: true prometheus_port: 6789use_external_ip: true让节点用 STUN 发现自己的公网 IP 并广播给客户端如果 STUN 探出的 IP 不对比如经过了一层 NAT改成显式配rtc.node_ip。K8s 环境里 Pod 的 IP 会漂移通常用node-ip环境变量注入或结合hostNetwork处理 UDP 端口段——UDP 范围端口是 LiveKit 上 K8s 最特殊的地方每个 Pod 都要能暴露这段端口。新手必踩的三个坑各配一条排查命令坑一UDP 端口没放通连接静默劣化。症状是连上但画面卡、或只能走 TCP。WebRTC 有 TCP 回退问题会被能连上掩盖住。排查ss -lun | grep -E 5[0-9]{4}|60000看本地监听再看防火墙/云安全组是否放了 50000-60000 入站 UDP。坑二把 tcp_port 塞进负载均衡或 TLS 后面。rtc.tcp_port是裸 TCP 的 ICE 回退通道服务端注释明确写了它cannot放在 LB 或 TLS 后面只允许裸 80/443 或高位端口直连。放进 Nginx 后回退链路必断。排查curl -v telnet://节点IP:7881应能直接 TCP 握手。坑三没配 keys 服务起不来或者 secret 太短。不配任何keys服务端直接报ErrKeysNotSet退出生产模式下短 secret 会打 error 级告警。排查启动日志里搜secret is too short或者用--dev先确认链路再上正式密钥。 顺带一提所有配置项都能用LIVEKIT_前缀环境变量覆盖配置名大写、点号转下划线如LIVEKIT_REDIS_ADDRESS这套逻辑在 配置加载源码 的GenerateCLIFlags里生成容器部署时基本靠它。什么场景选它什么场景别选先说该用的场景需要多人对音视频、且客户端网络环境复杂公司内网、弱网、移动端频繁切网时自建 P2P 方案很难覆盖的 TURN/ICE 场景LiveKit 的 SFU 拥塞控制 TCP 回退是现成的房间人数超过 3-4 人后 P2P 带宽不现实SFU 是刚需。它的分布式模式不引入额外组件只多一个 Redis从单台到多台的扩展成本很低团队规模小也能运维。不适合的场景只有两个人偶尔通话、或者流量极小且完全可控的 P2P 场景——为这个体量自运维一套 UDP 端口段和 Redis 集群不划算直接用托管的 LiveKit Cloud 或云厂商的 RTC 服务更合适如果你的业务只是单向拉流看直播不互动WebRTC SFU 的复杂度也过剩RTMP/FLV 加 HLS 分发更简单。下一步建议先用--dev模式跑通上面的五分钟流程确认客户端能进房再谈部署形态生产上线前重点核对三件事——UDP 端口段放通、tcp_port未被代理、密钥对已换成 32 位以上的正式值。想深入媒体转发逻辑从 RTC 核心模块 的sfu.go和forwarder.go入手需要录制、导流、AI 参与者这类能力走 LiveKit 生态的 Egress/Ingress/Agents 扩展而不是改服务端。【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址: https://gitcode.com/GitHub_Trending/li/livekit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考