From 1a3659177c8ace23e8d63e49eeffe98fe093838c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Fri, 5 Dec 2025 17:14:30 +0800 Subject: [PATCH] feat: upgrade to JDK 17 and add wvpcode submodule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Upgrade Dockerfile from JDK 11 to JDK 17 (eclipse-temurin) - Add wvpcode as git submodule for independent source management - Remove unused be.teletask.onvif-java submodule - Add documentation for docker-compose and build process 🤖 Generated with Claude Code --- .gitmodules | 6 +-- docker/wvp/Dockerfile | 4 +- reademe/docker-compose.md | 99 +++++++++++++++++++++++++++++++++++++++ reademe/polaris-wvp.md | 88 ++++++++++++++++++++++++++++++++++ wvpcode | 1 + 5 files changed, 193 insertions(+), 5 deletions(-) create mode 100644 reademe/docker-compose.md create mode 100644 reademe/polaris-wvp.md create mode 160000 wvpcode diff --git a/.gitmodules b/.gitmodules index 94f5d68..00f3861 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "be.teletask.onvif-java"] - path = be.teletask.onvif-java - url = https://gitee.com/pan648540858/be.teletask.onvif-java.git +[submodule "wvpcode"] + path = wvpcode + url = http://th.local.t-aaron.com:13000/THENG/stream-wvp.git diff --git a/docker/wvp/Dockerfile b/docker/wvp/Dockerfile index e66b4cd..74c3968 100644 --- a/docker/wvp/Dockerfile +++ b/docker/wvp/Dockerfile @@ -1,4 +1,4 @@ -FROM ringcentral/jdk:11 AS builder +FROM eclipse-temurin:17-jdk AS builder EXPOSE 18978/tcp EXPOSE 8116/tcp @@ -59,7 +59,7 @@ WORKDIR /build/target RUN mv wvp-pro-*.jar wvp.jar -FROM ringcentral/jdk:11 +FROM eclipse-temurin:17-jre RUN mkdir -p /opt/wvp WORKDIR /opt/wvp COPY --from=builder /build/target /opt/wvp diff --git a/reademe/docker-compose.md b/reademe/docker-compose.md new file mode 100644 index 0000000..2003795 --- /dev/null +++ b/reademe/docker-compose.md @@ -0,0 +1,99 @@ +整体架构 +这是一个基于 WVP-PRO(视频平台)+ ZLMediaKit(流媒体服务器)的视频监控系统,包含 5 个服务容器。 +服务详解 +1. polaris-redis (缓存服务) +镜像: redis:latest +重启策略: unless-stopped - 除非手动停止,否则总是重启 +健康检查: 每 15 秒执行 redis-cli incr ping,超时 5 秒,重试 10 次 +数据持久化: +配置文件: ./redis/conf/redis.conf +数据目录: ./volumes/redis/data/ +启用 AOF 持久化 (--appendonly yes) +网络: 仅内部网络 media-net,端口 6379 未暴露到宿主机(安全考虑) + +2. polaris-mysql (数据库服务) +镜像: mysql:8 +数据库配置: +数据库名: wvp +root 密码: root ⚠️ 生产环境应修改 +业务用户: wvp_user / wvp_password +初始化: 自动执行 ../数据库/2.7.4/初始化-mysql-2.7.4.sql +优化参数: +innodb-buffer-pool-size=80M - 内存池大小(较小,适合低配环境) +character-set-server=utf8mb4 - 支持中文和 emoji +lower-case-table-names=1 - 表名不区分大小写- default-time-zone=+8:00 - 东八区时区 +健康检查: TCP 连接测试 3306 端口 + +3. polaris-media (流媒体服务器) +镜像: zlmediakit/zlmediakit:master +核心功能: 处理视频流的接收和分发 +端口映射 (支持环境变量配置): +10935 (RTMP) - 用于收流,TCP/UDP 双协议 +5540 (RTSP) - 用于收流,TCP/UDP 双协议 +10000 (RTP) - 用于收流,TCP/UDP 双协议 +HTTP/HTTPS 播流端口已注释(由 nginx 代理) +数据卷: +录像存储: ./volumes/video +日志: ./logs/media +配置: ./media/config.ini +启动参数: -c /conf/config.ini -l 0 (日志级别 0) + +4. polaris-wvp (WVP 视频平台核心) +构建方式: 从 ./docker/wvp/Dockerfile 构建 +端口: +18978 - WVP Web 管理端口 +8116 (默认) - SIP 信令端口,TCP/UDP +依赖服务: redis、mysql、media(启动顺序) +关键环境变量: +Stream_IP - 流媒体访问 IP(外部访问地址) +SDP_IP - SDP 协商使用的 IP +ZLM_HOOK_HOST: polaris-wvp - ZLM 回调 WVP 的地址 +ZLM_HOST: polaris-media - WVP 访问 ZLM 的地址 +ZLM_SERCERT - ZLM 密钥 ⚠️ 生产环境应修改- SIP 配置: SIP_ShowIP, SIP_Port, SIP_Domain, SIP_Id, SIP_Password- 录像配置: RecordSip, RecordPushLive + +5. polaris-nginx (反向代理) +构建方式: 从 ./docker/nginx/Dockerfile 构建 +端口: 8080 (默认) - 对外提供 Web 服务 +依赖: polaris-wvp +功能: +代理 WVP 管理界面 +代理流媒体播放地址(替代直接暴露 ZLM 端口) +配置: 使用模板 ./nginx/templates/ +网络架构 +media-net (bridge 网络) +├── polaris-redis (内部) +├── polaris-mysql (内部) +├── polaris-media (暴露流媒体端口) +├── polaris-wvp (暴露 18978 和 SIP 端口) +└── polaris-nginx (暴露 8080 Web 端口) + +环境变量配置 +需要在 .env 文件或启动时配置: 必需变量: +Stream_IP - 流媒体服务器外网 IP +SDP_IP - SDP 协商 IP +SIP_ShowIP - SIP 显示 IP +SIP_Domain - SIP 域 +SIP_Id - SIP 服务器 ID +SIP_Password - SIP 密码 + +可选变量 (有默认值): +WebHttp=8080 - Web 端口 +MediaRtmp=10935 - RTMP 端口 +MediaRtsp=5540 - RTSP 端口 +MediaRtp=10000 - RTP 端口 +SIP_Port=8116 - SIP 端口 + +安全建议 +⚠️ 修改默认密码: +MySQL root 密码 (第 36 行) +ZLM 密钥 (第 110 行) +⚠️ 生产环境不要暴露数据库端口 (第 40-41 行已注释,保持) +⚠️ 流媒体 HTTP/HTTPS 端口通过 nginx 代理 (第 62-63 行已注释,正确) +考虑使用 Docker secrets 管理敏感信息 + +数据持久化 +所有重要数据都已挂载到宿主机: +Redis 数据: ./volumes/redis/data/ +MySQL 数据: ./volumes/mysql/data/ +视频录像: ./volumes/video/ +日志文件: ./logs/ \ No newline at end of file diff --git a/reademe/polaris-wvp.md b/reademe/polaris-wvp.md new file mode 100644 index 0000000..727247c --- /dev/null +++ b/reademe/polaris-wvp.md @@ -0,0 +1,88 @@ +polaris-wvp 构建流程详解 +这是一个多阶段构建(Multi-stage Build)的 Dockerfile,分为两个阶段: + +第一阶段:Builder(构建阶段) +基础镜像 +FROM ringcentral/jdk:11 AS builder +使用 ringcentral/jdk:11 作为构建基础镜像 +命名为 builder 阶段,供后续引用 +端口声明 +EXPOSE 18978/tcp # WVP Web 管理端口 +EXPOSE 8116/tcp # SIP 信令端口(TCP) +EXPOSE 8116/udp # SIP 信令端口(UDP) +EXPOSE 8080/tcp # HTTP 端口 +安装 Maven +RUN apt-get update && \ + apt-get install -y maven && \ + rm -rf /var/lib/apt/lists/* +更新软件包列表 +安装 Maven 构建工具 +清理缓存减小镜像体积 +编译 Java 项目 +COPY . /build # 复制整个项目到 /build +WORKDIR /build # 切换工作目录 +RUN ls && mvn clean package -Dmaven.test.skip=true # Maven 打包,跳过测试 +WORKDIR /build/target # 进入 target 目录 +RUN mv wvp-pro-*.jar wvp.jar # 重命名 jar 包 +关键点: +COPY . /build 会复制 docker-compose.yml 中 context: .. 指定的整个项目根目录 +-Dmaven.test.skip=true 跳过单元测试,加快构建速度 +将生成的 wvp-pro-*.jar 统一重命名为 wvp.jar + + +第二阶段:Runtime(运行阶段) +基础镜像 +FROM ringcentral/jdk:11 +重新使用干净的 JDK 11 镜像 +不包含 Maven 等构建工具,镜像更小 +准备运行环境 +RUN mkdir -p /opt/wvp # 创建应用目录 +WORKDIR /opt/wvp # 设置工作目录 +COPY --from=builder /build/target /opt/wvp # 从 builder 阶段复制编译产物 +COPY ./docker/wvp/wvp /opt/wvp # 复制配置文件 +关键点: +--from=builder 从第一阶段复制文件,实现多阶段构建 +复制 ./docker/wvp/wvp 目录(包含配置文件) +启动命令 +ENTRYPOINT ["java", "-Xms512m", # 初始堆内存 512MB + "-Xmx1024m", # 最大堆内存 1GB + "-XX:+HeapDumpOnOutOfMemoryError", # OOM 时生成堆转储 + "-XX:HeapDumpPath=/opt/ylcx/", # 堆转储文件路径 + "-jar", "wvp.jar", # 运行 jar 包 + "--spring.config.location=/opt/ylcx/wvp/application.yml" # 指定配置文件 +] +JVM 参数说明: +-Xms512m / -Xmx1024m:适合中小型部署 +HeapDumpOnOutOfMemoryError:便于排查内存问题 +Spring Boot 配置文件路径:/opt/ylcx/wvp/application.yml +构建上下文 +在 docker-compose.yml:84-86 中: +build: + context: .. # 项目根目录 + dockerfile: ./docker/wvp/Dockerfile # Dockerfile 路径 +目录结构: +stream-deploy/ ← context 根目录 +├── src/ ← Java 源码 +├── pom.xml ← Maven 配置 +├── docker/ +│ ├── docker-compose.yml +│ └── wvp/ +│ ├── Dockerfile ← 当前文件 +│ └── wvp/ ← 配置文件目录 +│ └── application.yml +└── ... +多阶段构建的优势 +镜像体积小:最终镜像不包含 Maven、源码等构建工具 +安全性高:运行环境不包含编译工具链 +构建效率:利用 Docker 缓存层加速重复构建 +配置文件挂载 +在 docker-compose.yml 中: +volumes: + - ./wvp/wvp/:/opt/ylcx/wvp/ # 挂载配置文件 + - ./logs/wvp:/opt/wvp/logs/ # 挂载日志目录 +实际配置文件路径:./docker/wvp/wvp/application.yml +注释掉的旧方案 +第 71-84 行的注释代码是旧的构建方案: +从 Gitee 克隆 WVP-GB28181-pro 源码 +在容器内编译 +现在改为在宿主机或 builder 阶段编译,更高效 \ No newline at end of file diff --git a/wvpcode b/wvpcode new file mode 160000 index 0000000..fca8e74 --- /dev/null +++ b/wvpcode @@ -0,0 +1 @@ +Subproject commit fca8e742063459a3acbcef189eba2f118b7069a1