LiveKit部署实战:一份配置从跑通到生产
2026/9/6 20:00:43 网站建设 项目流程

LiveKit部署实战:一份配置从跑通到生产

【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址: https://gitcode.com/GitHub_Trending/li/livekit

要给一个 200 人规模的在线课堂挑实时音视频底座,LiveKit部署基本是你落地时要先跑通的一环。它把信令、媒体转发(SFU)、房间状态收进同一个 Go 服务,你不用自己拼 SFU 加 Redis 的分布式拼图。下文不讲参数手册,只回答三个问题:它解决什么、最短怎么跑起来、生产要踩哪些坑。

🔧 架构速览:先记住三层关系

把 LiveKit 想成一部「电话交换台」,客户端先走信令握手,再走媒体流,状态交给 Redis 共享。

如果只让你记住三件事,就是下面这三个配置维度,后文都围绕它们展开:

  1. 网络端口rtc的 UDP 端口范围(媒体)加 TCP 回退端口。
  2. 密钥 keys:JWT 鉴权,不配服务端起不来。
  3. Redis 状态外置:配了就自动进入分布式模式,是横向扩容的开关。

📌 跑通最小可用配置

下面是能直接启动的最短配置,端口和密钥各留一行,其余走默认值。

port: 7880 rtc: port_range_start: 50000 port_range_end: 60000 tcp_port: 7881 keys: my_key: my_secret logging: level: info

逐行说明为什么是这个值:

参数不配会怎样 / 配了之后效果
port: 7880不配默认也是 7880,承载信令与 RoomService API
port_range_start/end媒体 RTP 走这段 UDP,不配默认 50000-60000;改了要同步改防火墙
tcp_port: 7881UDP 被墙时的 ICE/TCP 回退,必须直接暴露、不能挂 TLS
keys不配则启动校验直接失败,客户端 token 靠它签名

启动后用一条命令确认就绪,预期返回OK

./livekit-server --config config.yaml # 启动服务 curl -s http://localhost:7880/ # 预期输出: OK ./livekit-server --config config.yaml ports # 列出实际占用的 TCP/UDP 端口

port会同时移动信令和 API 的监听口;改 UDP 范围只影响媒体、不动信令。仓库根目录的config-sample.yaml注释了全部高级项,需要时再查。

⚙️ 生产部署:按规模递进

单机加固:开发 vs 生产对比

开发模式(--dev)会悄悄帮你做两件事:日志切 debug、只绑回环地址,还会在你没给密钥时塞进devkey/secret占位对。这些在生产都是雷。关键差异如下:

维度开发生产
密钥占位devkey/secret必须换成真实密钥对,建议走generate-keys生成
监听127.0.0.1绑真实网卡,前置 LB 并启用 TLS
日志debug 全量infosample: true采样,避免日志风暴
指标不开prometheus.port,否则无法扩缩容
运行身份当前用户建议非 root,--cap-drop ALL最小化权限

多节点与容器化:端口怎么暴露、状态放哪

端口解决后,下一个要处理的是网络暴露模型。三类端口归属完全不同:

端口协议暴露范围
7880TCP对外,挂 LB + TLS
7881TCP对公网裸暴露,禁止 TLS/LB
50000-60000UDP对公网裸暴露,防火墙放行入站
6789TCP仅集群内,给 Prometheus 抓

把有状态的 Redis 从进程里剥离,是横向扩容的前提。容器化片段如下,它同时回答了端口暴露与状态外置两件事:

services: redis: image: redis:7-alpine livekit: image: livekit/livekit-server command: --config /config.yaml volumes: - ./config.yaml:/config.yaml ports: - "7880:7880" - "7881:7881" - "50000-60000:50000-60000/udp" environment: - LIVEKIT_REDIS_ADDRESS=redis:6379 deploy: replicas: 2 restart: unless-stopped

这段里replicas解决的是上面第三点「横向扩容」,redis服务解决的是状态外置。弹性伸缩的触发条件建议盯节点指标:单节点 CPU 或轨道数逼近上限(默认每核约 400 轨道)时加副本,而不是按连接数盲目扩。

可观测性闭环:指标、告警、采样

开 Prometheus 并开启日志采样,指标、日志、告警才闭得了环:

prometheus: port: 6789 # username: metrics # password: <strong-password> logging: level: info json: true sample: true

告警阈值建议(结合 Grafana 面板):

指标关注点建议阈值
房间/参与者数容量水位接近节点limit上限
节点 CPU 使用率单核热点持续 >70%
信号/信令 RTT信令健康持续偏高触发回退
sample日志采样防日志风暴生产必开

⚠️ 部署前必看的 5 个高频问题

  1. UDP 范围没放行:客户端能连信令却黑屏,媒体包进不来。解法:防火墙对port_range_start-end开放入站 UDP。
  2. 7881 被挂了 TLS:ICE/TCP 回退直接失效。解法:该端口裸暴露,不加证书。
  3. 云主机内网 IP 外发错候选:AWS/GCP 上客户端连不上。解法:开rtc.use_external_ip: true走 STUN 发现公网 IP。
  4. 密钥写进镜像:泄露后无法单独轮换。解法:密钥与 secret 走 Secret/环境变量注入,不烤进镜像。
  5. Redis 挂了全集群掉线:状态没外置就扛不住。解法:配 Redis(含哨兵),多节点共享房间状态。

回到开头那个 200 人的课堂:到这里,这套 LiveKit部署单机就能扛下全量课堂,节点不够时横向加副本即可,不必重写架构。

【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址: https://gitcode.com/GitHub_Trending/li/livekit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询