| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- services:
- ########## 数据库 ##########
- mysql:
- container_name: mysql
- image: mysql:8.4.5
- environment:
- MYSQL_ROOT_PASSWORD: aegis
- MYSQL_ROOT_HOST: '%'
- volumes:
- - mysql_data:/var/lib/mysql
- - ./mysql:/docker-entrypoint-initdb.d
- networks:
- - aegis_network
- command:
- - --lower_case_table_names=1
- - --max_connections=1000
- - --character-set-server=utf8mb4
- - --collation-server=utf8mb4_unicode_ci
- healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
- interval: 30s
- timeout: 10s
- retries: 10
- restart: always
- adminer:
- container_name: adminer
- image: adminer:5.3.0-standalone
- networks:
- - aegis_network
- restart: always
- depends_on:
- mysql:
- condition: service_healthy
- ########## 缓存 ##########
- redis:
- container_name: redis
- image: redis:8.0.2-bookworm
- networks:
- - aegis_network
- healthcheck:
- test: ["CMD", "redis-cli", "ping"]
- interval: 10s
- timeout: 30s
- retries: 50
- start_period: 30s
- restart: always
- redisinsight:
- container_name: redisinsight
- image: redis/redisinsight:2.70
- environment:
- RI_APP_HOST: redis
- RI_APP_PORT: 6379
- networks:
- - aegis_network
- restart: always
- depends_on:
- redis:
- condition: service_healthy
- ########## 视频监控 ##########
- zlmediakit:
- container_name: zlmediakit
- image: zlmediakit/zlmediakit:master
- environment:
- - TZ=Asia/Shanghai
- ports:
- - "554:554/tcp"
- - "554:554/udp"
- - "1935:1935/tcp"
- - "30000-30500:30000-30500/udp"
- networks:
- - aegis_network
- - public_network
- restart: always
- ########## 视频会议 ##########
- prosody:
- container_name: prosody
- image: jitsi/prosody:prosody-13.0.2
- environment:
- - AUTH_TYPE=internal
- - ENABLE_AUTH=0
- - ENABLE_GUESTS=1
- - 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
- - JVB_BREWERY_MUC=jvbbrewery
- - JVB_PORT=10000
- - JICOFO_AUTH_USER=focus
- - JICOFO_AUTH_PASSWORD=jitsi123
- - JVB_AUTH_USER=jvb
- - JVB_AUTH_PASSWORD=jitsi123
- networks:
- - aegis_network
- restart: always
- jvb:
- container_name: jvb
- image: jitsi/jvb:jvb-2.3-262-gd2dc4df00-1
- environment:
- - ENABLE_AUTH=0
- - XMPP_DOMAIN=meet.jitsi
- - XMPP_AUTH_DOMAIN=auth.meet.jitsi
- - XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- - XMPP_SERVER=prosody
- - JVB_BREWERY_MUC=jvbbrewery
- - JVB_PORT=10000
- - JVB_ENABLE_APIS=rest,colibri
- - JVB_AUTH_USER=jvb
- - JVB_AUTH_PASSWORD=jitsi123
- ports:
- - "10000:10000/udp"
- - "10000:10000/tcp"
- volumes:
- - jvb_config:/config
- networks:
- - aegis_network
- restart: always
- depends_on:
- - prosody
- jicofo:
- container_name: jicofo
- image: jitsi/jicofo:jicofo-1.0-1167-1
- environment:
- - ENABLE_AUTH=0
- - XMPP_DOMAIN=meet.jitsi
- - XMPP_AUTH_DOMAIN=auth.meet.jitsi
- - XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- - XMPP_SERVER=prosody
- - JVB_BREWERY_MUC=jvbbrewery
- - JVB_PORT=10000
- - JICOFO_AUTH_USER=focus
- - JICOFO_AUTH_PASSWORD=jitsi123
- networks:
- - aegis_network
- restart: always
- depends_on:
- - prosody
- - jvb
- jitsi-web:
- container_name: jitsi-web
- image: jitsi/web:web-1.0.8954-1
- environment:
- - ENABLE_AUTH=0
- - ENABLE_GUESTS=1
- - ENABLE_RECORDING=1
- - PUBLIC_URL=http://localhost:8443
- - 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
- - XMPP_BOSH_URL_BASE=http://prosody:5280
- - JVB_BREWERY_MUC=jvbbrewery
- - JVB_PORT=10000
- - DEFAULT_LANGUAGE=zh
- ports:
- - "8443:80"
- volumes:
- - jitsi_web_config:/config
- networks:
- - aegis_network
- - public_network
- restart: always
- depends_on:
- - prosody
- - jicofo
- - jvb
- ########## 反向代理 ##########
- nginx:
- container_name: nginx
- image: nginx:1.29.0-alpine3.22
- volumes:
- - ./nginx/aegis.conf:/etc/nginx/conf.d/aegis.conf
- ports:
- - "3306:3306"
- - "6379:6379"
- - "8080:8080"
- networks:
- - aegis_network
- - public_network
- restart: always
- depends_on:
- aegis-ui:
- condition: service_healthy
- ########## 应急指挥 ##########
- aegis-admin:
- container_name: aegis-admin
- build:
- context: ../
- dockerfile: ./deployment/Dockerfile
- target: aegis-admin
- environment:
- JVM_XMS: 512
- JVM_XMX: 1024
- SERVER_PORT: 8080
- SPRING_PROFILE: druid
- # ZLMediaKit 配置(通过环境变量覆盖 zlm.* 配置)
- ZLM_BASE_URL: http://zlmediakit:80 # 根据实际 ZLMediaKit HTTP 端口调整
- ZLM_SECRET: "" # 填写与 ZLMediaKit 配置中 api.secret 一致的值
- ZLM_APP: live
- ZLM_VHOST: __defaultVhost__
- ZLM_ENABLE_HLS: "true"
- ZLM_ENABLE_MP4: "false"
- volumes:
- - aegis_data:/app/upload
- networks:
- - aegis_network
- depends_on:
- mysql:
- condition: service_healthy
- redis:
- condition: service_healthy
- restart: always
- aegis-ui:
- container_name: aegis-ui
- build:
- context: ../
- dockerfile: ./deployment/Dockerfile
- target: aegis-ui
- networks:
- - aegis_network
- healthcheck:
- test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:80 || exit 1"]
- interval: 30s
- timeout: 10s
- retries: 3
- restart: always
- ########## 存储卷 ##########
- volumes:
- mysql_data:
- aegis_data:
- jvb_config:
- jitsi_web_config:
- ########## 存储卷 ##########
- networks:
- aegis_network:
- driver: bridge
- internal: true
- public_network:
- driver: bridge
- internal: false
|