199 lines
6.6 KiB
YAML
199 lines
6.6 KiB
YAML
|
|
# ================================================
|
||
|
|
# Jitsi Meet 视频会议服务
|
||
|
|
#
|
||
|
|
# 使用方式:
|
||
|
|
# docker compose up -d
|
||
|
|
#
|
||
|
|
# 环境变量配置:
|
||
|
|
# 复制 .env.example 为 .env 并修改
|
||
|
|
# ================================================
|
||
|
|
|
||
|
|
services:
|
||
|
|
# ====================== Jitsi Web ======================
|
||
|
|
jitsi-web:
|
||
|
|
image: jitsi/web:${JITSI_IMAGE_TAG:-stable-9584}
|
||
|
|
container_name: urban-lifeline-jitsi-web
|
||
|
|
restart: unless-stopped
|
||
|
|
networks:
|
||
|
|
- urban-lifeline
|
||
|
|
ports:
|
||
|
|
- "${JITSI_WEB_HTTP_PORT:-8280}:80"
|
||
|
|
- "${JITSI_WEB_HTTPS_PORT:-8443}:443"
|
||
|
|
environment:
|
||
|
|
TZ: ${TZ:-Asia/Shanghai}
|
||
|
|
PUBLIC_URL: ${JITSI_PUBLIC_URL:-https://meet.example.com}
|
||
|
|
ENABLE_HTTPS: ${JITSI_ENABLE_HTTPS:-0}
|
||
|
|
ENABLE_HTTP_REDIRECT: 0
|
||
|
|
DISABLE_HTTPS: ${JITSI_DISABLE_HTTPS:-1}
|
||
|
|
# 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_COMPONENT_SECRET: ${JICOFO_COMPONENT_SECRET:-jicofo-secret}
|
||
|
|
JICOFO_AUTH_USER: focus
|
||
|
|
JVB_AUTH_USER: jvb
|
||
|
|
JVB_AUTH_PASSWORD: ${JVB_AUTH_PASSWORD:-jvb-password}
|
||
|
|
# JWT 认证
|
||
|
|
ENABLE_AUTH: ${JITSI_ENABLE_AUTH:-1}
|
||
|
|
ENABLE_GUESTS: ${JITSI_ENABLE_GUESTS:-0}
|
||
|
|
AUTH_TYPE: jwt
|
||
|
|
JWT_APP_ID: ${JWT_APP_ID:-urbanLifeline}
|
||
|
|
JWT_APP_SECRET: ${JWT_APP_SECRET:-your-jwt-secret-key-change-in-production}
|
||
|
|
JWT_ACCEPTED_ISSUERS: ${JWT_APP_ID:-urbanLifeline}
|
||
|
|
JWT_ACCEPTED_AUDIENCES: jitsi
|
||
|
|
JWT_ALLOW_EMPTY: 0
|
||
|
|
JWT_AUTH_TYPE: token
|
||
|
|
JWT_TOKEN_AUTH_MODULE: token_verification
|
||
|
|
# 功能开关
|
||
|
|
ENABLE_RECORDING: ${JITSI_ENABLE_RECORDING:-0}
|
||
|
|
ENABLE_TRANSCRIPTIONS: 0
|
||
|
|
ENABLE_SUBDOMAINS: 0
|
||
|
|
ENABLE_XMPP_WEBSOCKET: 1
|
||
|
|
ENABLE_SCTP: 1
|
||
|
|
volumes:
|
||
|
|
- ${DATA_ROOT:-../volumes}/jitsi/web:/config
|
||
|
|
- ${DATA_ROOT:-../volumes}/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
|
||
|
|
|
||
|
|
# ====================== Jitsi Prosody (XMPP) ======================
|
||
|
|
jitsi-prosody:
|
||
|
|
image: jitsi/prosody:${JITSI_IMAGE_TAG:-stable-9584}
|
||
|
|
container_name: urban-lifeline-jitsi-prosody
|
||
|
|
restart: unless-stopped
|
||
|
|
networks:
|
||
|
|
- urban-lifeline
|
||
|
|
expose:
|
||
|
|
- "5222"
|
||
|
|
- "5347"
|
||
|
|
- "5280"
|
||
|
|
environment:
|
||
|
|
TZ: ${TZ:-Asia/Shanghai}
|
||
|
|
PUBLIC_URL: ${JITSI_PUBLIC_URL:-https://meet.example.com}
|
||
|
|
# 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_COMPONENT_SECRET: ${JICOFO_COMPONENT_SECRET:-jicofo-secret}
|
||
|
|
JICOFO_AUTH_USER: focus
|
||
|
|
JICOFO_AUTH_PASSWORD: ${JICOFO_AUTH_PASSWORD:-focus-password}
|
||
|
|
JVB_AUTH_USER: jvb
|
||
|
|
JVB_AUTH_PASSWORD: ${JVB_AUTH_PASSWORD:-jvb-password}
|
||
|
|
# JWT 认证
|
||
|
|
ENABLE_AUTH: ${JITSI_ENABLE_AUTH:-1}
|
||
|
|
ENABLE_GUESTS: ${JITSI_ENABLE_GUESTS:-0}
|
||
|
|
AUTH_TYPE: jwt
|
||
|
|
JWT_APP_ID: ${JWT_APP_ID:-urbanLifeline}
|
||
|
|
JWT_APP_SECRET: ${JWT_APP_SECRET:-your-jwt-secret-key-change-in-production}
|
||
|
|
JWT_ACCEPTED_ISSUERS: ${JWT_APP_ID:-urbanLifeline}
|
||
|
|
JWT_ACCEPTED_AUDIENCES: jitsi
|
||
|
|
JWT_ALLOW_EMPTY: 0
|
||
|
|
JWT_AUTH_TYPE: token
|
||
|
|
JWT_TOKEN_AUTH_MODULE: token_verification
|
||
|
|
JWT_DISABLE_AUTO_MODERATOR: true
|
||
|
|
LOG_LEVEL: ${JITSI_LOG_LEVEL:-info}
|
||
|
|
volumes:
|
||
|
|
- ${DATA_ROOT:-../volumes}/jitsi/prosody/config:/config
|
||
|
|
- ${DATA_ROOT:-../volumes}/jitsi/prosody/prosody-plugins-custom:/prosody-plugins-custom
|
||
|
|
healthcheck:
|
||
|
|
test: ["CMD", "prosodyctl", "status"]
|
||
|
|
interval: 30s
|
||
|
|
timeout: 10s
|
||
|
|
retries: 3
|
||
|
|
start_period: 90s
|
||
|
|
|
||
|
|
# ====================== Jitsi Jicofo (会议焦点) ======================
|
||
|
|
jitsi-jicofo:
|
||
|
|
image: jitsi/jicofo:${JITSI_IMAGE_TAG:-stable-9584}
|
||
|
|
container_name: urban-lifeline-jitsi-jicofo
|
||
|
|
restart: unless-stopped
|
||
|
|
networks:
|
||
|
|
- urban-lifeline
|
||
|
|
environment:
|
||
|
|
TZ: ${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_COMPONENT_SECRET: ${JICOFO_COMPONENT_SECRET:-jicofo-secret}
|
||
|
|
JICOFO_AUTH_USER: focus
|
||
|
|
JICOFO_AUTH_PASSWORD: ${JICOFO_AUTH_PASSWORD:-focus-password}
|
||
|
|
AUTH_TYPE: jwt
|
||
|
|
JVB_BREWERY_MUC: jvbbrewery
|
||
|
|
# 功能配置
|
||
|
|
JICOFO_ENABLE_HEALTH_CHECKS: true
|
||
|
|
JICOFO_ENABLE_AUTO_OWNER: false
|
||
|
|
JICOFO_ENABLE_AUTO_LOGIN: false
|
||
|
|
JICOFO_CONFERENCE_INITIAL_OWNER: ""
|
||
|
|
volumes:
|
||
|
|
- ${DATA_ROOT:-../volumes}/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
|
||
|
|
|
||
|
|
# ====================== Jitsi JVB (视频桥接) ======================
|
||
|
|
jitsi-jvb:
|
||
|
|
image: jitsi/jvb:${JITSI_IMAGE_TAG:-stable-9584}
|
||
|
|
container_name: urban-lifeline-jitsi-jvb
|
||
|
|
restart: unless-stopped
|
||
|
|
networks:
|
||
|
|
- urban-lifeline
|
||
|
|
ports:
|
||
|
|
- "${JVB_PORT:-10000}:10000/udp"
|
||
|
|
- "${JVB_TCP_PORT:-4443}:4443/tcp"
|
||
|
|
environment:
|
||
|
|
TZ: ${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_AUTH_USER: jvb
|
||
|
|
JVB_AUTH_PASSWORD: ${JVB_AUTH_PASSWORD:-jvb-password}
|
||
|
|
JVB_BREWERY_MUC: jvbbrewery
|
||
|
|
# 网络配置
|
||
|
|
JVB_PORT: ${JVB_PORT:-10000}
|
||
|
|
JVB_STUN_SERVERS: ${JVB_STUN_SERVERS:-stun.l.google.com:19302,stun1.l.google.com:19302}
|
||
|
|
DOCKER_HOST_ADDRESS: ${JVB_HOST_ADDRESS}
|
||
|
|
JVB_ADVERTISE_IPS: ${JVB_HOST_ADDRESS}
|
||
|
|
JVB_ENABLE_APIS: rest,colibri
|
||
|
|
JVB_TCP_HARVESTER_DISABLED: "false"
|
||
|
|
JVB_TCP_PORT: ${JVB_TCP_PORT:-4443}
|
||
|
|
JVB_TCP_MAPPED_PORT: ${JVB_TCP_PORT:-4443}
|
||
|
|
volumes:
|
||
|
|
- ${DATA_ROOT:-../volumes}/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
|
||
|
|
|
||
|
|
networks:
|
||
|
|
urban-lifeline:
|
||
|
|
name: urban-lifeline
|