LiveKit 自部署指南:4 核 8G 服务器如何跑起实时音视频 SFU
LiveKit 自部署指南:4 核 8G 服务器如何跑起实时音视频 SFU
LiveKit 是一个开源的实时音视频 SFU 服务器,这篇自部署指南面向想在自己的服务器上跑多人音视频房间的你。你不需要理解 WebRTC 原理,只需要 4 个端口和一对密钥就能让它跑起来。下面先判断机器够不够,再走部署路线,最后 5 分钟验证。
先判断:你的环境能不能跑
LiveKit 服务端是一个 Go 单二进制,开销不大,但媒体转发对上行带宽很敏感。对照这张表检查你的机器:
| 项目 | 最低配置 | 推荐配置(生产) |
|---|---|---|
| CPU | 4 核 | 8 核及以上 |
| 内存 | 8 GB | 16 GB 及以上 |
| 上行带宽 | 10 Mbps | 100 Mbps 及以上 |
| 操作系统 | Linux x86_64 或 arm64,主流发行版 | 同左,Docker 或二进制安装 |
| 端口 | TCP 7880 + UDP 50000–60000 | 同左,另加 TCP 7881(UDP 不通时的回退) |
算一笔账:一路 1080p 视频上行大约 2–4 Mbps,4 核 8G 的机器大致能扛百级纯语音用户或十几路视频会议。带宽不够就别硬上,先扩带宽再谈部署。
部署路线:从 0 到可用
环境准备
服务器只需要三组端口可达:TCP 7880(信令与 RoomService API)、UDP 50000–60000(媒体流)、TCP 7881(可选,UDP 被墙时的回退通道)。仓库根目录的 config-sample.yaml 是完整配置模板,每个参数都有注释,直接拿它当基准改。
这一步最容易踩的坑:只放行了 TCP 7880,忘了 UDP 端口段,结果信令连上了、媒体一直不到。
核心部署
最省事的路径是 Docker 起容器:
docker run -it -p 7880:7880 -p 50000-60000:50000-60000/udp \
livekit/livekit-server --dev
--dev 会用内置占位密钥(devkey/secret)直接启动,仅适合验证。想自己编译的话,入口在 cmd/server/,前置要求 Go 1.23 以上,仓库根目录执行 ./bootstrap.sh && mage 即可产出二进制。
这一步最容易踩的坑:图省事带着 --dev 占位密钥直接上了生产,任何人猜到这组密钥都能签发房间令牌。
关键配置项
生产配置只改三处,都在 config-sample.yaml 里:
- keys 段:换成你自己生成的 API Key 与 Secret,样本里的 key1/secret1 只是示例;
- rtc.use_external_ip: true:云主机自动探测公网 IP,客户端才能连进来;
- prometheus_port: 6789:暴露 /metrics 端点,接监控用。
另外建议设 room.empty_timeout 和 departure_timeout(默认 300 秒和 20 秒),让空房间自动清理。SFU 转发核心逻辑在 pkg/sfu/,后续想调性能从这里入手。
这一步最容易踩的坑:把配置文件里现成的示例密钥原样带走,忘了生成真正的密钥对。
部署后 5 分钟验证
最小验证动作:生成一个令牌,让一个测试用户进房间。
lk token create --api-key devkey --api-secret secret \
--join --room my-first-room --identity user1 --valid-for 24h
把令牌填入任意接了 LiveKit JS SDK 的网页应用,能看到画面和声音就算通过。不想开浏览器,也可以用 lk room join --url ws://localhost:7880 --publish-demo my-first-room 直接向房间灌一段演示视频。
三个高频问题及定位思路:
- 连接超时、ICE 失败:九成是 UDP 端口段没放行。先查云安全组和本机防火墙,UDP 确实打不通就启用
rtc.tcp_port回退。 - 内网通、外网不通:云主机在 NAT 后面且
use_external_ip没开,或探测到的公网 IP 不对,用node_ip显式指定。 - 高并发时 CPU 异常高:默认按端口段逐端口监听,核数少的机器可改用
rtc.udp_port复用模式,减少监听 fd 数量。
开发环境 vs 生产环境
| 维度 | 开发环境 | 生产环境 |
|---|---|---|
| 认证 | --dev 内置 devkey/secret | 自签 API Key + Secret |
| 加密 | ws:// 明文 | 7880 端口放负载均衡之后,终结 TLS |
| 资源 | 小规格虚机 | 8 核 16G 及以上,专用媒体服务器 |
| 监控 | 控制台日志 | prometheus 6789 端口 + Grafana 面板,仓库自带 deploy/grafana/livekit-server-overview.json |
| 分发 | 单节点,房间状态在内存 | 配 Redis 多节点分发,任意节点客户端可进同一房间 |
| 备份 | 不关心,重启即丢 | 定期备份密钥对与配置文件,Redis 持久化 |
谁适合用它
- 如果你是验证语音通话功能的独立开发者,一条
--dev命令就能起本地实例,零成本跑通 SDK 联调。 - 如果你想把网课或会议的数据握在自己手里,自部署意味着不用按云端流量计费,媒体流不出你的机房。
- 如果你在搭 AI 语音助手,LiveKit 的 Agents 生态直接接在这个服务器上,AI 可以当成一个能进房的"成员"。
- 如果你需要私有化部署过合规审查,单台 4 核 8G 就能覆盖初期规模,后续再横向加节点。
部署 LiveKit 真正难的不是装服务,而是带宽和端口这两件事。它们通过了,剩下就是一个单二进制的事。现在就可以做:对着开头的表格核对你的端口段,把 --dev 实例跑起来,看到输出里的 API Key 那两行,服务器就算活了。
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐

所有评论(0)