jisti-meet服务开启

This commit is contained in:
2025-12-26 18:55:54 +08:00
parent c2b37503fc
commit 0658b82f39
43 changed files with 3979 additions and 1208 deletions

View File

@@ -121,17 +121,20 @@ CREATE TABLE workcase.tb_video_meeting(
workcase_id VARCHAR(50) NOT NULL, -- 关联工单ID
meeting_name VARCHAR(200) NOT NULL, -- 会议名称
meeting_password VARCHAR(50) DEFAULT NULL, -- 会议密码(可选)
description VARCHAR(500) DEFAULT NULL, -- 会议模式
jwt_token TEXT DEFAULT NULL, -- JWT Token用于身份验证
jitsi_room_name VARCHAR(200) NOT NULL, -- Jitsi房间名格式workcase_{workcase_id}_{timestamp}
jitsi_server_url VARCHAR(500) NOT NULL DEFAULT 'https://meet.jit.si', -- Jitsi服务器地址
status VARCHAR(20) NOT NULL DEFAULT 'scheduled', -- 状态scheduled-已安排 ongoing-进行中 ended-已结束 cancelled-已取消
creator_id VARCHAR(50) NOT NULL, -- 创建者ID
creator_type VARCHAR(20) NOT NULL, -- 创建者类型guest-来客 agent-客服
creator_name VARCHAR(100) NOT NULL, -- 创建者名称
participant_count INTEGER NOT NULL DEFAULT 0, -- 参与人数
max_participants INTEGER DEFAULT 10, -- 最大参与人数
start_time TIMESTAMPTZ DEFAULT NULL, -- 实际开始时间
end_time TIMESTAMPTZ DEFAULT NULL, -- 实际结束时间
start_time TIMESTAMPTZ NOT NULL, -- 定义会议开始时间
end_time TIMESTAMPTZ NOT NULL, -- 定义会议结束时间
advance INTEGER DEFAULT 5, -- 提前入会时间(分钟)
actual_start_time TIMESTAMPTZ DEFAULT NULL, -- 真正会议开始时间
actual_end_time TIMESTAMPTZ DEFAULT NULL, -- 真正会议结束时间
duration_seconds INTEGER DEFAULT 0, -- 会议时长(秒)
iframe_url TEXT DEFAULT NULL, -- iframe嵌入URL生成后存储
config JSONB DEFAULT NULL, -- Jitsi配置项自定义配置

View File

@@ -47,7 +47,8 @@ INSERT INTO sys.tb_sys_module (
('MODULE-0008', 'module_agent', '智能体', '智能体管理', 'system', NULL, now(), false),
('MODULE-0005', 'module_knowledge', '知识库', '知识文档管理', 'system', NULL, now(), false),
('MODULE-0006', 'module_bidding', '招投标', '招投标业务管理', 'system', NULL, now(), false),
('MODULE-0007', 'module_workcase', '智能客服', '客服工单管理', 'system', NULL, now(), false);
('MODULE-0007', 'module_workcase', '智能客服', '客服工单管理', 'system', NULL, now(), false),
('MODULE-0009', 'module_meeting', '视频会议', 'Jitsi Meet视频会议管理', 'system', NULL, now(), false);
-- =============================
-- 4. 初始化系统权限
@@ -161,7 +162,14 @@ INSERT INTO sys.tb_sys_permission (
('PERM-0722', 'perm_workcase_ticket_update', '工单更新', 'workcase:ticket:update', '更新工单', 'module_workcase', true, 'system', NULL, now(), false),
('PERM-0723', 'perm_workcase_ticket_view', '工单查看', 'workcase:ticket:view', '查看工单详情和列表', 'module_workcase', true, 'system', NULL, now(), false),
('PERM-0724', 'perm_workcase_ticket_process', '工单处理', 'workcase:ticket:process', '工单处理过程管理', 'module_workcase', true, 'system', NULL, now(), false),
('PERM-0725', 'perm_workcase_ticket_device', '工单设备', 'workcase:ticket:device', '工单设备管理', 'module_workcase', true, 'system', NULL, now(), false);
('PERM-0725', 'perm_workcase_ticket_device', '工单设备', 'workcase:ticket:device', '工单设备管理', 'module_workcase', true, 'system', NULL, now(), false),
-- 视频会议模块权限Jitsi Meet
('PERM-0730', 'perm_meeting_create', '创建会议', 'meeting:create:own', '创建视频会议', 'module_meeting', true, 'system', NULL, now(), false),
('PERM-0731', 'perm_meeting_join', '加入会议', 'meeting:join:any', '加入视频会议', 'module_meeting', true, 'system', NULL, now(), false),
('PERM-0732', 'perm_meeting_url', '获取会议链接', 'meeting:url:any', '获取会议加入链接', 'module_meeting', true, 'system', NULL, now(), false),
('PERM-0733', 'perm_meeting_token', '获取会议令牌', 'meeting:token:any', '获取会议参与令牌', 'module_meeting', true, 'system', NULL, now(), false);
-- =============================
-- 5. 初始化视图(菜单)
-- =============================
@@ -332,7 +340,12 @@ INSERT INTO sys.tb_sys_role_permission (
('RP-U-0013', 'role_user', 'perm_file_upload', 'system', NULL, now(), false),
('RP-U-0014', 'role_user', 'perm_file_download', 'system', NULL, now(), false),
('RP-U-0015', 'role_user', 'perm_message_view', 'system', NULL, now(), false),
('RP-U-0016', 'role_user', 'perm_config_view', 'system', NULL, now(), false);
('RP-U-0016', 'role_user', 'perm_config_view', 'system', NULL, now(), false),
--- 视频会议权限
('RP-U-0050', 'role_user', 'perm_meeting_create', 'system', NULL, now(), false),
('RP-U-0051', 'role_user', 'perm_meeting_join', 'system', NULL, now(), false),
('RP-U-0052', 'role_user', 'perm_meeting_url', 'system', NULL, now(), false),
('RP-U-0053', 'role_user', 'perm_meeting_token', 'system', NULL, now(), false);
-- 访客权限(基础菜单 + workcase聊天和工单全部接口权限
INSERT INTO sys.tb_sys_role_permission (
@@ -366,7 +379,12 @@ INSERT INTO sys.tb_sys_role_permission (
('RP-G-0042', 'role_guest', 'perm_workcase_ticket_update', 'system', NULL, now(), false),
('RP-G-0043', 'role_guest', 'perm_workcase_ticket_view', 'system', NULL, now(), false),
('RP-G-0044', 'role_guest', 'perm_workcase_ticket_process', 'system', NULL, now(), false),
('RP-G-0045', 'role_guest', 'perm_workcase_ticket_device', 'system', NULL, now(), false);
('RP-G-0045', 'role_guest', 'perm_workcase_ticket_device', 'system', NULL, now(), false),
--- 视频会议权限
('RP-G-0050', 'role_guest', 'perm_meeting_create', 'system', NULL, now(), false),
('RP-G-0051', 'role_guest', 'perm_meeting_join', 'system', NULL, now(), false),
('RP-G-0052', 'role_guest', 'perm_meeting_url', 'system', NULL, now(), false),
('RP-G-0053', 'role_guest', 'perm_meeting_token', 'system', NULL, now(), false);
-- =============================
-- 7. 视图权限关联

View File

@@ -74,24 +74,249 @@ services:
# 管理员账户配置
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin123
# Console 地址配置
MINIO_CONSOLE_ADDRESS: ":9001"
MINIO_ADDRESS: ":9000"
# 时区设置
TZ: Asia/Shanghai
volumes:
# 数据持久化到主机目录
- ../../../.data/docker/minio/data:/data
- ../../../.data/docker/minio/config:/root/.minio
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
start_period: 30s
# ====================== Jitsi Meet 视频会议服务 ======================
jitsi-web:
image: jitsi/web:stable-9584
container_name: urban-lifeline-jitsi-web
restart: unless-stopped
networks:
- urban-lifeline
ports:
- "8280:80" # 保留原 HTTP 端口
- "8443:443" # 保留原 HTTPS 端口(仅保留映射,实际禁用 HTTPS
environment:
# 基础配置(局域网访问)
TZ: Asia/Shanghai
PUBLIC_URL: http://192.168.0.253:8280
# 核心修复:解决 WebSocket 协议/URL 错误(局域网 IP
BOSH_URL_BASE: http://jitsi-prosody:5280
WEBSOCKET_URL: ws://192.168.0.253:8280/xmpp-websocket
# XMPP 配置(完全保留原设置)
XMPP_DOMAIN: meet.jitsi
XMPP_AUTH_DOMAIN: auth.meet.jitsi
XMPP_BOSH_URL_BASE: http://jitsi-prosody:5280
XMPP_MUC_DOMAIN: muc.meet.jitsi
XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
XMPP_GUEST_DOMAIN: guest.meet.jitsi
# Jicofo 配置(完全保留原设置)
JICOFO_COMPONENT_SECRET: jicofo-secret
JICOFO_AUTH_USER: focus
# JVB 配置(完全保留原设置)
JVB_AUTH_USER: jvb
JVB_AUTH_PASSWORD: jvb-password
# JWT 认证配置(完全保留原设置)
ENABLE_AUTH: 1
ENABLE_GUESTS: 1
AUTH_TYPE: jwt
JWT_APP_ID: urbanLifeline
JWT_APP_SECRET: urbanLifelinejitsi
JWT_ACCEPTED_ISSUERS: urbanLifeline
JWT_ACCEPTED_AUDIENCES: jitsi
JWT_ASAP_KEYSERVER: https://192.168.0.253:8280/
JWT_ALLOW_EMPTY: 0
JWT_AUTH_TYPE: token
JWT_TOKEN_AUTH_MODULE: token_verification
# 界面/功能配置(完全保留原设置)
ENABLE_RECORDING: 0
ENABLE_TRANSCRIPTIONS: 0
ENABLE_SUBDOMAINS: 0
ENABLE_XMPP_WEBSOCKET: 1
ENABLE_SCTP: 1
DISABLE_HTTPS: 1
# 日志/HTTPS 配置
ENABLE_LETSENCRYPT: 0
LETSENCRYPT_DOMAIN: 192.168.0.253
volumes:
- ../../../.data/docker/jitsi/web:/config
- ../../../.data/docker/jitsi/web/crontabs:/var/spool/cron/crontabs
- ../../../.data/docker/jitsi/transcripts:/usr/share/jitsi-meet/transcripts
depends_on:
- jitsi-prosody
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# XMPP 服务Prosody- 完全保留原配置
jitsi-prosody:
image: jitsi/prosody:stable-9584
container_name: urban-lifeline-jitsi-prosody
restart: unless-stopped
networks:
- urban-lifeline
expose:
- "5222" # XMPP客户端连接内部
- "5347" # XMPP组件连接内部
- "5280" # BOSH/WebSocket内部
environment:
TZ: Asia/Shanghai
# XMPP域配置完全保留
XMPP_DOMAIN: meet.jitsi
XMPP_AUTH_DOMAIN: auth.meet.jitsi
XMPP_MUC_DOMAIN: muc.meet.jitsi
XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
XMPP_GUEST_DOMAIN: guest.meet.jitsi
# Jicofo组件密钥完全保留
JICOFO_COMPONENT_SECRET: jicofo-secret
JICOFO_AUTH_USER: focus
JICOFO_AUTH_PASSWORD: focus-password
# JVB认证完全保留
JVB_AUTH_USER: jvb
JVB_AUTH_PASSWORD: jvb-password
# JWT认证完全保留
ENABLE_AUTH: 1
ENABLE_GUESTS: 1
AUTH_TYPE: jwt
JWT_APP_ID: urbanLifeline
JWT_APP_SECRET: urbanLifelinejitsi
JWT_ACCEPTED_ISSUERS: urbanLifeline
JWT_ACCEPTED_AUDIENCES: jitsi
JWT_ALLOW_EMPTY: 0
JWT_AUTH_TYPE: token
JWT_TOKEN_AUTH_MODULE: token_verification
# 日志配置(完全保留)
LOG_LEVEL: info
# 公共URL局域网访问
PUBLIC_URL: http://192.168.0.253:8280
volumes:
- ../../../.data/docker/jitsi/prosody/config:/config
- ../../../.data/docker/jitsi/prosody/prosody-plugins-custom:/prosody-plugins-custom
healthcheck:
test: ["CMD", "prosodyctl", "status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s
# 会议焦点控制器Jicofo- 完全保留原配置
jitsi-jicofo:
image: jitsi/jicofo:stable-9584
container_name: urban-lifeline-jitsi-jicofo
restart: unless-stopped
networks:
- urban-lifeline
environment:
TZ: Asia/Shanghai
# XMPP配置完全保留
XMPP_DOMAIN: meet.jitsi
XMPP_AUTH_DOMAIN: auth.meet.jitsi
XMPP_MUC_DOMAIN: muc.meet.jitsi
XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
XMPP_SERVER: jitsi-prosody
# Jicofo认证完全保留
JICOFO_COMPONENT_SECRET: jicofo-secret
JICOFO_AUTH_USER: focus
JICOFO_AUTH_PASSWORD: focus-password
# JWT配置完全保留
AUTH_TYPE: jwt
# JVB配置完全保留
JVB_BREWERY_MUC: jvbbrewery
# 日志级别(完全保留)
JICOFO_ENABLE_HEALTH_CHECKS: "true"
volumes:
- ../../../.data/docker/jitsi/jicofo:/config
depends_on:
- jitsi-prosody
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8888/about/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s
# 视频桥接服务JVB- 仅修复 WebSocket 相关保留IP/端口
jitsi-jvb:
image: jitsi/jvb:stable-9584
container_name: urban-lifeline-jitsi-jvb
restart: unless-stopped
networks:
- urban-lifeline
ports:
- "10000:10000/udp" # 保留原 UDP 端口
- "4443:4443/tcp" # 保留原 TCP 端口
environment:
TZ: Asia/Shanghai
# XMPP配置完全保留
XMPP_DOMAIN: meet.jitsi
XMPP_AUTH_DOMAIN: auth.meet.jitsi
XMPP_INTERNAL_MUC_DOMAIN: internal-muc.meet.jitsi
XMPP_SERVER: jitsi-prosody
# JVB认证完全保留
JVB_AUTH_USER: jvb
JVB_AUTH_PASSWORD: jvb-password
# JVB配置完全保留
JVB_BREWERY_MUC: jvbbrewery
JVB_PORT: 10000
JVB_STUN_SERVERS: stun.l.google.com:19302,stun1.l.google.com:19302
# 本地IP配置局域网IP - 关键配置!)
DOCKER_HOST_ADDRESS: 192.168.0.253
JVB_ADVERTISE_IPS: 192.168.0.253
# 启用统计(完全保留)
JVB_ENABLE_APIS: rest,colibri
# 性能优化(完全保留)
JVB_TCP_HARVESTER_DISABLED: "false"
JVB_TCP_PORT: 4443
JVB_TCP_MAPPED_PORT: 4443
volumes:
- ../../../.data/docker/jitsi/jvb:/config
depends_on:
- jitsi-prosody
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/about/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s