Files
urbanLifeline/docs/Jitsi-Meet-Docker部署指南.md
2025-12-26 18:55:54 +08:00

8.8 KiB
Raw Blame History

🎥 Jitsi Meet Docker 部署与使用指南

📋 架构说明

本项目已将Jitsi Meet完整集成到Docker Compose中包含以下4个服务

服务 容器名 端口 说明
jitsi-web urban-lifeline-jitsi-web 8280 (HTTP)
8443 (HTTPS)
Web前端服务
jitsi-prosody urban-lifeline-jitsi-prosody 5222/5347/5280 (内部) XMPP信令服务器
jitsi-jicofo urban-lifeline-jitsi-jicofo 无需暴露 会议控制服务
jitsi-jvb urban-lifeline-jitsi-jvb 10000/udp
4443/tcp
视频桥接服务

数据持久化目录

F:\Project\urbanLifeline\.data\docker\jitsi\
├── web/                # Web配置
├── prosody/           # XMPP配置
├── jicofo/            # Jicofo配置
├── jvb/               # JVB配置
└── transcripts/       # 转录文件

🚀 快速开始

步骤1启动Jitsi Meet服务

# 进入Docker Compose目录
cd F:\Project\urbanLifeline\urbanLifelineServ\.bin\docker\urbanlifeline

# 启动Jitsi Meet仅启动jitsi相关服务
docker-compose up -d jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb

# 查看服务状态
docker-compose ps

# 查看日志(排查问题用)
docker-compose logs -f jitsi-web

预期输出

NAME                              STATUS          PORTS
urban-lifeline-jitsi-web          Up (healthy)    0.0.0.0:8280->80/tcp, 0.0.0.0:8443->443/tcp
urban-lifeline-jitsi-prosody      Up (healthy)    5222/tcp, 5347/tcp, 5280/tcp
urban-lifeline-jitsi-jicofo       Up (healthy)
urban-lifeline-jitsi-jvb          Up (healthy)    0.0.0.0:10000->10000/udp, 0.0.0.0:4443->4443/tcp

步骤2验证Jitsi Meet运行

在浏览器打开:

如果能看到Jitsi Meet界面说明部署成功


🔧 配置说明

1. JWT认证配置已配置

Docker配置docker-compose.yml

jitsi-web:
  environment:
    JWT_APP_ID: urbanLifeline                        # 应用ID
    JWT_APP_SECRET: your-secret-key-change-in-production  # JWT密钥

Java后端配置application-dev.yml

jitsi:
  app:
    id: urbanLifeline                                # 必须与Docker一致
    secret: your-secret-key-change-in-production     # 必须与Docker一致
  server:
    url: http://localhost:8280                       # Jitsi服务地址
  token:
    expiration: 7200000                              # Token有效期2小时

⚠️ 重要

  • JWT_APP_IDJWT_APP_SECRET 在Docker和Java后端必须完全一致
  • 生产环境请修改 JWT_APP_SECRET 为强随机字符串
  • 建议使用密钥管理工具如Vault管理密钥

2. 修改JWT密钥生产环境必须

方法A修改Docker配置

# 1. 编辑 docker-compose.yml
# 将所有 JWT_APP_SECRET 改为你的密钥
JWT_APP_SECRET: "A8sF9dK2mP5nX7qW3tY6uZ1vB4cE0hG"

# 2. 同步修改 application-dev.yml
jitsi:
  app:
    secret: "A8sF9dK2mP5nX7qW3tY6uZ1vB4cE0hG"

# 3. 重启服务
docker-compose restart jitsi-web jitsi-prosody

方法B使用环境变量推荐生产环境

# 创建 .env 文件
echo "JITSI_JWT_SECRET=your-strong-secret-key" > .env

# 修改 docker-compose.yml 使用环境变量
JWT_APP_SECRET: ${JITSI_JWT_SECRET}

🧪 测试JWT验证

1. 测试无Token访问应被拒绝

在浏览器打开:http://localhost:8280/test-room

预期结果:显示"会议需要密码"或"需要登录"

2. 测试带JWT Token访问应成功

使用你的Java后端创建会议后端会自动生成JWT Token并返回iframe URL

# 调用创建会议接口
POST http://localhost:8180/urban-lifeline/workcase/chat/meeting/create
Content-Type: application/json

{
  "roomId": "test-room-123",
  "workcaseId": "WC001",
  "meetingName": "测试会议",
  "maxParticipants": 10
}

# 响应包含带JWT的URL
{
  "code": 0,
  "data": {
    "meetingId": "xxx",
    "iframeUrl": "http://localhost:8280/workcase_WC001_1234567890?jwt=eyJhbGc..."
  }
}

在浏览器打开响应中的 iframeUrl,应该能正常进入会议。


📊 服务管理命令

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f jitsi-web          # Web服务日志
docker-compose logs -f jitsi-prosody      # XMPP日志
docker-compose logs -f jitsi-jicofo       # Jicofo日志
docker-compose logs -f jitsi-jvb          # JVB日志

# 重启服务
docker-compose restart jitsi-web

# 停止服务
docker-compose stop jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb

# 删除服务(保留数据)
docker-compose down

# 删除服务和数据
docker-compose down -v
rm -rf F:\Project\urbanLifeline\.data\docker\jitsi

🔍 常见问题排查

问题1服务启动失败

症状

docker-compose ps
# 显示 Exit (1) 或 Restarting

解决方案

# 查看详细日志
docker-compose logs jitsi-web

# 检查端口占用
netstat -ano | findstr "8280"

# 删除容器重新启动
docker-compose down
docker-compose up -d jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb

问题2JWT验证失败

症状:进入会议后立即被踢出,或显示"认证失败"

原因JWT密钥不匹配

解决方案

# 1. 检查Docker配置
docker-compose exec jitsi-prosody cat /config/prosody.cfg.lua | grep jwt

# 2. 检查Java配置
# 确保 application-dev.yml 中的 jitsi.app.secret 与Docker一致

# 3. 重启服务
docker-compose restart jitsi-prosody

问题3视频无法连接

症状:音频正常,但视频黑屏或连接失败

原因UDP端口10000被防火墙阻止

解决方案

# Windows防火墙添加规则
netsh advfirewall firewall add rule name="Jitsi JVB UDP" dir=in action=allow protocol=UDP localport=10000

# 或关闭防火墙测试(不推荐生产环境)

问题4健康检查失败

症状

docker-compose ps
# 显示 (unhealthy)

解决方案

# 检查健康检查端点
curl http://localhost:8280/
curl http://localhost:8888/about/health  # Jicofo
curl http://localhost:8080/about/health  # JVB

# 增加启动等待时间
# 编辑 docker-compose.yml修改 start_period: 120s

🌐 公网部署(可选)

如果需要从公网访问,需要额外配置:

1. 配置域名和SSL

jitsi-web:
  environment:
    PUBLIC_URL: https://your-domain.com
    ENABLE_LETSENCRYPT: 1
    LETSENCRYPT_DOMAIN: your-domain.com
    LETSENCRYPT_EMAIL: your-email@example.com
    DISABLE_HTTPS: 0

2. 配置JVB公网IP

jitsi-jvb:
  environment:
    DOCKER_HOST_ADDRESS: your-public-ip

3. 开放防火墙端口

  • TCP 443: HTTPS访问
  • UDP 10000: WebRTC媒体流
  • TCP 4443: WebRTC Fallback可选

🎯 集成到项目

你的Java后端已经完全配置好可以直接使用

前端Vue调用示例

import { createVideoMeeting } from '@/api/workcase/meeting'

// 创建会议
const res = await createVideoMeeting({
  roomId: 'room-123',
  workcaseId: 'WC001',
  meetingName: '技术支持会议',
  maxParticipants: 10
})

// 在iframe中显示
const iframeUrl = res.data.iframeUrl

前端UniApp调用示例

import { workcaseChatAPI } from '@/api/workcase'

// 创建会议
const res = await workcaseChatAPI.createVideoMeeting({
  roomId: roomId.value,
  workcaseId: workcaseId.value,
  meetingName: '工单技术支持',
  maxParticipants: 10
})

// 跳转到会议页面
uni.navigateTo({
  url: `/pages/meeting/MeetingView/MeetingView?meetingUrl=${encodeURIComponent(res.data.iframeUrl)}`
})

📈 性能优化(可选)

1. 限制CPU和内存

jitsi-jvb:
  deploy:
    resources:
      limits:
        cpus: '2'
        memory: 2G
      reservations:
        cpus: '1'
        memory: 1G

2. 配置视频质量

编辑 .data/docker/jitsi/web/config/config.js

var config = {
    resolution: 720,
    constraints: {
        video: {
            height: { ideal: 720, max: 720, min: 180 }
        }
    }
};

检查清单

启动前确认:

  • Docker Desktop已安装并运行
  • 端口8280、8443、10000未被占用
  • application-dev.yml配置正确
  • JWT密钥在Docker和Java后端一致

启动后确认:


🆘 获取帮助

如遇问题,收集以下信息:

  1. Docker服务状态docker-compose ps
  2. 服务日志:docker-compose logs jitsi-web
  3. 健康检查:curl http://localhost:8280/
  4. Java后端日志中的JWT Token生成情况

祝部署顺利! 🚀