feat: upgrade to JDK 17 and add wvpcode submodule
- 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
This commit is contained in:
parent
62e3f3e391
commit
1a3659177c
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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/
|
||||
|
|
@ -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 阶段编译,更高效
|
||||
|
|
@ -0,0 +1 @@
|
|||
Subproject commit fca8e742063459a3acbcef189eba2f118b7069a1
|
||||
Loading…
Reference in New Issue