You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

3.9 KiB

Docker Compose 部署

该部署会构建 inspect-nvr 应用镜像,并启动应用与 ZLMediaKit。Java 8、FFmpeg、海康 SDK 与大华 SDK 均位于应用镜像内,宿主机不需要另外安装 Java 或 Maven。业务数据直接连接远程 MySQL,Compose 不启动 MySQL 和 Redis 容器。

1. 准备配置

在 Ubuntu 项目根目录复制环境变量模板:

cp .env.example .env

至少修改 .env 中的 DB_URLDB_USERNAMEDB_PASSWORD 和所有带 change_me 的密钥。远程 MySQL 必须允许 Ubuntu 宿主机所在地址连接。NVR 名称、IP、SDK/RTSP/HTTP 端口及账号密码全部维护在远程库的 basedata_eqpbook_nvr 表,摄像机维护在 ivs_camera,不再使用 HIK_NVR_* 环境变量。ZLM_API_SECRET 会在容器启动时写入临时配置,避免使用 ZLMediaKit 已禁止的公开示例密钥。若浏览器从局域网其他电脑访问,还要把 ZLM_HTTP_BASE_URL 改为 Docker 宿主机可访问的地址,例如:

ZLM_HTTP_BASE_URL=http://192.168.1.20:18081

模板默认使用国内 Maven 镜像源。部署环境在海外时,可按 .env.example 中的注释切回 Maven Central。FFmpeg 与海康、大华 SDK 均使用 x86_64 版本,在 amd64 宿主机上不需要 QEMU 模拟。

2. 构建并启动

docker compose build inspect-nvr
docker compose up -d
docker compose ps
docker compose logs -f inspect-nvr

服务启动后可访问:

  • 应用首页:http://localhost:8081/
  • Swagger UI:http://localhost:8081/swagger-ui/index.html
  • ZLMediaKit HTTP/HLS:http://localhost:18081/

停止服务:

docker compose down

Compose 使用命名卷保存 HLS、应用日志、SDK 日志和抓图数据,普通 docker compose down 不会删除这些数据。

Compose 不占用宿主机的 33066379 端口。应用通过 .env 中的连接参数直接访问远程 MySQL。

3. 数据库说明

远程 MySQL 至少需要包含项目 Mapper 使用的以下表:

  • basedata_eqpbook_nvr
  • ivs_camera

缺表时可参考 deploy/mysql/init/001-basedata-eqpbook-nvr.sqldocs/sql/ivs_camera.sql,但正式库应按现有数据库迁移流程执行,不要由容器自动建表。

basedata_eqpbook_nvr 中可以维护多台 NVR。页面会读取全部启用记录,并按各自 nvr_code# 后缀关联 ivs_camera.nvr_code。每台可操作 NVR 必须配置名称、IP、SDK/RTSP/HTTP 端口及账号密码。可在远程数据库中检查:

SELECT nvr_id, patrol_device_name, nvr_code, nvr_ip,
       sdk_port, rtsp_port, http_port, username, enabled
FROM basedata_eqpbook_nvr
WHERE enabled IS NULL OR enabled <> 0
ORDER BY nvr_id;

当前 Compose 不提供 Redis。项目中少量历史接口仍包含 Redis 缓存调用;不使用这些旧接口时不影响应用启动和当前海康 NVR 页面链路。若后续需要这些接口,应再接入外部 Redis 或移除对应缓存逻辑。

4. CPU 架构限制

Compose 将应用固定为 linux/amd64,并从 lib/hik-linux64lib/dahua-linux64 复制海康 HCNetSDK Linux64 与大华 NetSDK Linux64:

  • x86_64 Ubuntu/Linux 服务器可原生构建和运行,不需要安装 QEMU。
  • x86_64 Windows/macOS 的 Docker Desktop 可直接运行 Linux amd64 容器。
  • ARM64 服务器不能运行当前镜像;如需 ARM64,应使用对应架构的两套厂商 SDK 另行构建镜像,不能混用 .so

5. 常用排查命令

docker compose ps
docker compose logs --tail 200 inspect-nvr
docker compose exec inspect-nvr java -version
docker compose exec inspect-nvr ffmpeg -version
docker compose exec inspect-nvr sh -c 'echo $LD_LIBRARY_PATH'

应用必须能从容器网络访问 NVR 的 SDK、RTSP 和 HTTP 端口。若宿主机能访问设备但容器不能访问,应优先检查 Docker Desktop/服务器路由、防火墙和设备所在网段,而不是修改 Java 配置。