小企业信息化系统开发
小微企业用 Jitsi Meet 自建视频会议系统:Docker Compose 部署、JWT 鉴权与 TURN 穿透安全接入
2026年10月22日
用 Docker Compose 自建 Jitsi 会议,JWT 控准入、coturn 解 NAT。
小微企业用 Jitsi Meet 自建视频会议系统:Docker Compose 部署、JWT 鉴权与 TURN 穿透安全接入
摘要:SaaS 会议按人月收费且数据在外。本文用 Docker Compose 一键部署 Jitsi Meet,配置 JWT 登录鉴权与 coturn 穿透,再用 Nginx 反代暴露到公网,适合 20 人以内团队私有化。
一、为什么自建视频会议
三方会议工具月费随人数线性增长,且会议内容、录屏都落在别人服务器。对客诉沟通、内部周会这类敏感场景,自建能把媒体流留在自己机房,按需扩容,边际成本趋近于零。
二、Jitsi 由哪些组件构成
Jitsi 不是单进程,而是四件套:① prosody(XMPP 信令服);② jicofo(会议聚焦器,分配资源);③ jitsi-videobridge(SFU,转发媒体);④ web(前端)。还要配 coturn 做 TURN 中继,否则跨 NAT 无法连通。
三、Docker Compose 一键部署
建 .env 写入域名与密钥,docker-compose.yml 引用官方镜像。关键变量:
# .env
PUBLIC_URL=https://meet.example.com
JICOFO_AUTH_PASSWORD=xxxx
JVB_AUTH_PASSWORD=xxxx
JWT_APP_ID=mycompany
JWT_APP_SECRET=一串长随机串
ENABLE_AUTH=1
ENABLE_GUESTS=0
启动:docker compose up -d。首次访问应能看到建会页面,但此时任何人可进——必须加鉴权。
四、开启 JWT 鉴权
自建场景不建议开放匿名。修改 prosody 配置启用 token 模块:
VirtualHost "meet.example.com"
modules_enabled = { "token_verification"; }
authentication = "token"
app_id = "mycompany"
app_secret = "一串长随机串"
业务系统用后端按 HS256 签发 JWT(sub 为会议名、aud 为 mycompany),前端带着 token 进会。这样只有登录员工能建会,外部访客可走单独生成的临时链接。注意 JVB 与 jicofo 之间的内部认证仍需 JICOFO_AUTH_PASSWORD,别和 JWT 混淆。
五、跨 NAT 打通:coturn 配置
员工在家用宽带,若不做 TURN,P2P/SFU 会被运营商 NAT 挡住。在 coturn 容器暴露 3478(UDP/TCP)与 5349(TLS),配置:
listening-port=3478
tls-listening-port=5349
realm=meet.example.com
user=turnuser:turnpass
cert=/certs/fullchain.pem
web 的环境变量里设 TURN_USES_TLS=true、TURN_SERVERS=meet.example.com:5349,让前端优先走加密中继。
六、Nginx 反代 + HTTPS 暴露
公网只暴露 443。Nginx 反代 / 到 web:80,并单独转发 /xmpp-websocket 到 prosody:5280 的 websocket;colibri 的 UDP 端口(默认 10000)需直接映射到宿主机,供媒体传输。证书用 Let's Encrypt:
location /xmpp-websocket {
proxy_pass http://prosody:5280/xmpp-websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
七、容量与排错
单台 4 核 8G 的 SFU 约支撑 15–20 人 720p 会议;超过则横向加 jitsi-videobridge 实例并配 jicofo 自动调度。常见故障:能建会但“黑屏无画面”多因 UDP 10000 未放行;“一直在连接”多为 TURN 证书或 realm 不匹配。先看浏览器 F12 的 colibri 日志,再查防火墙入站规则。
小结
Jitsi 自建门槛不高:Compose 起四件套、JWT 控准入、coturn 解 NAT、Nginx 收口到 443。20 人内团队半天可上线,月成本只剩一台小服务器,数据全程私有。