jisti-meet服务开启
This commit is contained in:
@@ -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配置项(自定义配置)
|
||||
|
||||
@@ -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. 视图权限关联
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user