启动服务(中间件)
大约 5 分钟quickstartcode
注意事项
- 本文档仅用于快速构建开发环境,生产环境请严格按照安全等级构建,切勿使用默认密码
- 更多具体中间件服务生产的环境配置请参考对应中间件的官方文档
一、 数据存储中间件运行
1. docker启动mysql8并挂载文件(关闭大小写敏感)
注意事项
- 服务启动成功后打开数据库,创建数据库名
bladex_iot(字符集采用utf8mb4) - 导入
BladeX-Links工程根目录下/doc/sql文件夹的SQL脚本(顺序为:bladex.mysql.sys.create.sql->bladex.mysql.iot.create.sql->bladex.mysql.iot.ext.create.sql)
docker run \
--name mysql8 -d -p 3306:3306 \
-v /docker/data/mysql8/data:/var/lib/mysql \
-v /docker/data/mysql8/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=设定你的密码 \
--privileged=true \
mysql:8.4.10 \
--lower_case_table_names=12. docker启动redis(注意生产环境必须关闭端口映射并且设置密码)
docker run --name redis -d -p 6379:6379 redis:7.2.53. docker启动tdengine并挂载数据(默认的时序库,更详细文档请看:https://docs.taosdata.com/get-started/docker/)
docker run -d \
--name tdengine \
-p 6030-6049:6030-6049 \
-p 6030-6049:6030-6049/udp \
-p 6060:6060 \
-v /docker/data/tdengine/data:/var/lib/taos \
-v /docker/data/tdengine/log:/var/log/taos \
tdengine/tdengine:3.3.6.134. docker启动influxdb并挂载数据(按需启动)
docker run -d \
--name influxdb \
-p 8086:8086 \
-v /docker/data/influxdb:/var/lib/influxdb \
-e INFLUXDB_DB=links \
-e INFLUXDB_HTTP_AUTH_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin \
-e INFLUXDB_ADMIN_PASSWORD=links \
influxdb:1.8.105. docker启动influxdb2并挂载数据(按需启动)(启动后访问ip:8086,控制台创建账号密码与库,并申请token进行配置)
docker run -d \
--name influxdb2 \
-p 8086:8086 \
-v /docker/data/influxdb:/var/lib/influxdb \
influxdb6. docker启动iotdb并挂载数据(按需启动)
docker run -d \
--name iotdb \
-p 6667:6667 \
-p 42424:42424 \
-p 5555:5555 \
-v /docker/data/iotdb/data:/iotdb/data \
-v /docker/data/iotdb/logs:/iotdb/logs \
apache/iotdb7. docker启动minio并挂载数据(采用阿里云等云平台oss则无需执行)
docker run --name minio -d -p 9000:9000 \
-e "MINIO_ACCESS_KEY=bladexadmin" \
-e "MINIO_SECRET_KEY=bladexadmin" \
-v /docker/data/minio/data:/data \
minio/minio:RELEASE.2021-04-22T15-44-28Z.hotfix.56647434e server /data --address '0.0.0.0:9000'二、国标监控中间件运行
国标视频监控(GB/T 28181)分两个面协同:信令面(SIP 注册 / 点播 / 控制)由 blade-server 承担,媒体面(RTP 收流、转封装 FLV / HLS / WebRTC、录制、截图)由 ZLMediaKit 承担,两者通过 ZLM 的 HTTP API + Webhook 联动。数据流向:设备把 SIP 信令注册到 blade-server、把 RTP 视频流推给 ZLM,浏览器再从 ZLM 拉流播放。
注意事项
- 信令面地址(
sip.host)指向blade-server,媒体面地址(zlm.*)指向 ZLM 节点,两者是不同地址,切勿混填。 - 需先备好 MySQL / Redis 并导入 SQL,再启动 ZLM 与 blade-server。
1. docker启动ZLMediaKit(媒体服务)
官方镜像会随机生成 API 密钥且默认不开 Hook,须先改好 config.ini 再挂载启动。可从 BladeX-Links/script/docker/zlm/config.ini 取模板,仅需改动三处:
[api]
secret=<zlm-api-secret> # 与平台 vms.gb28181.zlm.secret 一致
[general]
mediaServerId=blade-zlm-1 # 与平台 vms.gb28181.zlm.node-id 一致
[hook]
enable=1
# 四个回调均指向 blade-server,末尾 ?secret= 与平台 vms.gb28181.zlm.hook-secret 一致
on_stream_changed=http://<blade-server-host>:80/blade-iot/vms/webhook/on_stream_changed?secret=<zlm-hook-secret>
on_stream_none_reader=http://<blade-server-host>:80/blade-iot/vms/webhook/on_stream_none_reader?secret=<zlm-hook-secret>
on_publish=http://<blade-server-host>:80/blade-iot/vms/webhook/on_publish?secret=<zlm-hook-secret>
on_server_keepalive=http://<blade-server-host>:80/blade-iot/vms/webhook/on_server_keepalive?secret=<zlm-hook-secret>改好后挂载启动(-v 用本地绝对路径):
docker run -id --name zlmediakit \
-p 1935:1935 -p 8800:80 -p 8443:443 -p 8554:554 \
-p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp \
-v /path/to/config.ini:/opt/media/conf/config.ini \
zlmediakit/zlmediakit:master_py提示
8800:80把 ZLM HTTP API 映射到宿主机8800(容器内仍是80),对应平台http-port: 8800、internal-http-port: 0。- ZLM 原生 Hook body 不带 secret,平台从回调 URL 的
?secret=取值校验,每个回调 URL 末尾必须带?secret=,否则回调被拒、流注册不上。 - 采用
script/docker下的 docker-compose 部署时已内置links-zlm服务(内网172.30.0.70:80),平台直连即可,无需单独启动。
2. 配置平台国标参数(application-dev.yml)
blade-server 的 vms.gb28181 分 sip(信令面)与 zlm(媒体面)两组,核心项如下:
vms:
enabled: true # 模块总开关,false 则不监听 SIP、不加载 ZLM
gb28181:
sip:
host: 192.168.31.254 # 对外信令 IP = blade-server 可达地址
port: 5060 # SIP 监听端口(国标默认 5060)
server-id: 34020000002000000001 # 本平台 20 位国标编号(设备端「上级 SIP 服务器编号」)
domain: '3402000000' # SIP 域(编号前 10 位)
password: <sip-password> # 设备注册鉴权口令,须与设备端一致
register-mode: AUTO # AUTO 自动接入 / MANUAL 白名单
zlm:
node-id: blade-zlm-1 # 须与 config.ini [general] mediaServerId 一致
host: 192.168.31.254 # 平台访问 ZLM REST API 的地址
http-port: 8800 # ZLM HTTP API 端口(NAT 部署填对外映射端口)
secret: <zlm-api-secret> # 须与 config.ini [api] secret 一致
hook-secret: <zlm-hook-secret> # 须与 config.ini 各 hook URL 的 ?secret= 一致
rtp-port: 10000 # RTP 单端口收流(须与 ZLM [rtp_proxy] port 一致)
tcp-mode: true # RTP 是否 TCP 被动收流,NAT 场景建议 true
# sdp-ip / public-host:dev 可省(跳过强制校验);生产必填为设备 / 浏览器可达地址两侧密钥与节点标识须严格呼应,任一不一致都会导致回调被拒或节点判离线:
平台 application-*.yml | ZLM config.ini | 方向 / 用途 |
|---|---|---|
zlm.node-id | [general] mediaServerId | 节点身份匹配(保活命中) |
zlm.secret | [api] secret | 平台 → ZLM:REST 调用鉴权 |
zlm.hook-secret | 各 hook URL 的 ?secret= | ZLM → 平台:回调鉴权 |
3. 设备与平台接入配置
平台侧 server-id / domain / password 即设备接入的关键字段,设备端国标配置需逐字对齐:
平台侧(vms.gb28181.sip) | 设备侧国标配置 |
|---|---|
server-id | 上级 SIP 服务器编号 |
domain | 上级 SIP 域 |
host / port | 服务器地址 / 端口 |
password | 注册密码 |
平台运行后,也可在【视频中心】>【国标平台】页在线管理与查看这些接入信息;设备侧字段对照与 20 位国标编号规则详见 国标平台配置。
4. 联动验证
启动 blade-server 后,按序确认信令面与媒体面已打通:
- 媒体节点在线:进入【视频中心】>【媒体节点】,ZLM 节点显示在线,即
on_server_keepalive回调正常(依赖node-id与mediaServerId一致、hook-secret正确)。 - 设备注册:设备按上表填好国标参数后,在【视频中心】>【国标设备】出现并在线,即信令面(SIP 注册)通。
- 点播出图:进入【视频监控】选通道播放,画面正常,即媒体面(设备 RTP 推流 → ZLM 转封装 → 浏览器拉流)全链路贯通。
