孙亮亮
返回 小企业信息化系统开发

小企业信息化系统开发

小微企业用 Jitsi Meet 自建视频会议系统:Docker Compose 部署、JWT 鉴权与 TURN 穿透安全接入

2026年10月22日

用 Docker Compose 自建 Jitsi 会议,JWT 控准入、coturn 解 NAT。

Jitsi Meet视频会议自建Docker ComposeJWT

小微企业用 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 人内团队半天可上线,月成本只剩一台小服务器,数据全程私有。

本模块其他文章

小微企业内部系统统一登录实战:Authelia 单点登录、MFA 与反向代理访问控制小微企业用 Paperless-ngx 搭建智能文档归档系统:发票合同 OCR 识别、标签检索与权限管理小微企业用 PostgREST 把 PostgreSQL 直接变成 REST API:只读接口、行级权限与内部数据对接小微企业用 Uptime Kuma 自建服务监控与宕机告警:网站、接口、SSL 证书与心跳检测小微企业用 Gitea 自建内网代码与文档版本管理:Git 服务、Issues 跟踪与 Webhook 自动部署小微企业用 FreeScout 自建客服工单系统:邮件转工单、SLA 与协作回复实战小微企业用 Odoo 搭建一体化 ERP:进销存、CRM 与财务模块落地实战小微企业用 Nextcloud 自建企业网盘:文件同步、权限分级与异地容灾小微企业用 Metabase 做业务数据分析:连接数据库、可视化图表与定时报表小微企业内部知识库搭建实战:用 Wiki.js 实现文档协作、权限分级与全文检索小微企业用 Appsmith 搭建零代码内部管理后台:数据看板、工单与权限小微企业用 n8n 搭建业务自动化工作流:表单收集到消息通知实战小微企业用 Docker + NocoDB 搭建轻量业务数据库:零代码管理客户与订单小企业进销存轻量化落地:用 SQL + 轻量 Web 替代 Excel 的实操路径小企业业务系统数据备份实战:从每日自动备份到异地容灾小企业自建系统的权限设计实战:从“谁都能改”到 RBAC 与数据范围隔离小企业库存管理怎么起步:从 Excel 到轻量进销存的平滑迁移从 Excel 进销存到一套能演进的系统小企业 CRM:买现成还是自己搭?
小微企业用 Jitsi Meet 自建视频会议系统:Docker Compose 部署、JWT 鉴权与 TURN 穿透安全接入 · 孙亮亮