编程 StreamHub:给 LiveKit SFU 套一层管理面,单域名自托管,一条 compose 起全套

2026-10-09 00:05:29

StreamHub:给 LiveKit SFU 套一层管理面,单域名自托管,一条 compose 起全套

项目信息

StreamHub 是自托管开源媒体服务器,基于 LiveKit,定位是 AntMedia 的 drop-in 替代。它把 LiveKit SFU 包一层管理层,提供多租户 apps、RTMP/WHIP/RTSP 接入、WebRTC+HLS 播放、录制到 per-app S3、可嵌入播放器、签名 webhook、REST API、React 仪表盘,全部在单域名 + 自动 HTTPS 后面。一个 docker compose up 起全套。

相比裸 LiveKit SFU 多出的能力

自己装 LiveKit 裸 SFU,拿到的是 signaling 和媒体转发。StreamHub 在其上加了管理台、多租户 app、录制到 S3、embed SDK、webhook 和 API。

  • 多租户 apps:隔离命名空间,各有 token/配置/S3 bucket。
  • 接入:WebRTC 推流、RTMP、WHIP、RTSP(经 ffmpeg relay)。
  • 播放:WebRTC(亚秒)+ HLS(/hls///index.m3u8);可嵌入播放器 + 浏览器 SDK streamhub-adaptor(AntMedia WebRTCAdaptor 的 shim,基于 livekit-client),地址 /sdk/streamhub-adaptor.global.js。
  • 录制→S3:POST /recording/start -> room-composite MP4 -> 上传到 app 的 S3 -> snapshot + VOD,本地文件清理(已验证 2×H.264 720p -> Wasabi)。
  • 签名 webhook(HMAC)+ MP4 切分 + 截图。
  • REST API(全局 + per-app),Swagger 在 /api/v1/docs,sk_ bearer token 保护。
  • React 仪表盘(Vite + Tailwind),break-glass 管理员 JWT 登录。
  • RBAC + 配额,分阶段安全上线(off -> log -> on)。
  • 网络安全:应用内 IP 允许/屏蔽(CIDR,IPv4+IPv6)+ fail2ban 式自动封禁(坏登录、重放 magic link、无效 token),loopback/私网地址永不被锁。
  • 插件(自动发现):face-blur(deface) 实时人脸马赛克叠加、YOLO 目标检测;插件可拥有自己的 worker 进程。
  • per-app MQTT 事件 + 高延迟告警。
  • 会话管理、Meet 风格多方会议样例。
  • GPU/NVENC-ready 镜像:core 镜像带 ffmpeg;取消注释 gpus: all(需 nvidia-container-toolkit)启用 NVENC 转码与 CUDA CV 推理。

架构与端口

https://streamhub.example.com (Caddy, auto-TLS, 1 cert)
/rtc -> LiveKit signaling (wss/WebRTC)
/*    -> streamhub-core (NestJS): REST API + React SPA + HLS + browser SDK
WebRTC 媒体(UDP 7882)和 RTMP(1935) 直连服务器 IP
livekit-server  SFU · signaling 7880 · tcp 7881 · media 7882/udp
livekit/ingress RTMP 1935 · WHIP 8080
livekit/egress  room-composite 录制 ->  -> S3
redis           协调 ingress/egress + BullMQ 任务队列
streamhub-core  API + 提供 SPA + JWT 登录 + SQLite + S3 + jobs

真实域名需先加 DNS A 记录(DNS-only,不要 Cloudflare 代理)并开防火墙:80,443,7880/tcp,7881/tcp,7882/udp,1935/tcp。

安装:install.sh 或 docker compose

要求 Linux 主机 + 公网 IP + Docker + Compose 插件。LiveKit 媒体用 host 网络,所以只面向 Linux,不支持 macOS Docker Desktop。

方式 A:install.sh

curl -fsSL https://www.streamhub.studio/install.sh | sudo bash

面向 Ubuntu Server 24.04/26.04 LTS x64(其他环境会中止),幂等可重跑更新。脚本会装 Docker(+nginx/certbot 做 TLS),clone 到 /opt/streamhub,询问域名 + 管理员密码,写 .env 强随机密钥,构建启动全套,等健康,seed sk_ API token,打印仪表盘 URL/凭据/token 和加入边缘节点的 cluster token。--non-interactive --domain --email 全脚本化;--join --cluster-token --origin-ip 把新机器变成媒体边缘节点。

方式 B:手动 compose

git clone https://github.com/streamhubstudio/streamhub.git
cd streamhub
cp .env.example .env   # 改 STREAMHUB_DOMAIN, ACME_EMAIL, secrets...
docker compose up -d --build
docker compose exec -T core node deploy/seed-token.js "$(grep '^STREAMHUB_API_TOKEN=' .env | cut -d= -f2)"

打开 https:///(仪表盘)、/api/v1/docs(Swagger)、curl http://127.0.0.1:3020/api/v1/health。

Day-2

docker compose logs -f core
docker compose down
git pull && docker compose up -d --build

.env、数据目录与 S3

所有配置在单个 .env(.env.example 全注释)。数据(SQLite DB、per-app 录制/截图/HLS、日志、SDK)在 DATA_DIR,从 STREAMHUB_HOST_DATA_DIR(默认 ./data)bind-mount 进 core 和 egress 两个容器。per-app S3 凭据放 data/secrets.json (chmod 600),从 app 的 config.yaml 引用。

目录与文档

  • docker-compose.yml(core+LiveKit+ingress+egress+redis+Caddy)
  • install.sh
  • deploy/(Dockerfile、Caddyfile、entrypoint、seeder + 裸机 systemd/nginx)
  • streamhub-core/(Node 20 + NestJS)
  • streamhub-web/(React+Vite+Tailwind)
  • streamhub-adaptor/(TS 浏览器 SDK)
  • streamhub-docs/

文档:streamhub-docs/(架构、运维、API、webhook),INSTALL.md 裸机 runbook,SPEC.md 产品规格。

许可与 EE 边界

open-core。本仓库自托管核心(streamhub-core/、streamhub-web/、yolo-worker/、deploy/ 及 Compose)为 AGPL-3.0-only;浏览器 SDK streamhub-adaptor/ 是 MIT,便于嵌入;商业 EE 模块单独授权,不在仓库内。

推荐文章

程序员茄子在线接单