在Docker Swarm里运行ZoneMinder

分别使用ZoneMinder和Docker有些时日了,最近把两者结合起来,在容器里运行ZoneMinder。为了日后迁移方便,又把ZoneMinder程序容器放在Docker Swarm里管理,ZoneMinder使用的文件存放在NFS服务器上。

下面是启动服务的命令示例:

export ZM_NFS_SERVER=192.168.1.2 
export EVENT_NFS_SERVER=192.168.1.3
docker stack deploy -c zm-stack.yml -c zm-stack.prod.yml zm

配置文件参见https://github.com/wlcasper/zmdocker

另外zm-stack.override.yml也提供了映射本地目录的配置,既可用于本地开发测试,又可作为NFS服务器宕机时的临时替代方案。

ZoneMinder安装配置

本文简单介绍视频监控软件ZoneMinder的安装和配置。

首先安装LAMP,参见How to Install a LAMP Stack on Ubuntu 18.04

然后安装ZoneMinder 1.32.x

接下来访问http://192.168.2.3/zm/配置摄像头。以下是我的四个摄像头的配置:

Source PathMethod
Foscam R4rtsp://192.168.2.18:88/videoSubTCP
Amcrest IP2M-841rtsp://192.168.2.19:554/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=OnvifTCP
ZModo ZH-IXA15-WACrtsp://192.168.2.17:10554/udp/av0_0UDP

以上三个摄像头的Source Type均为Ffmpeg,Video Writer除了ZModo为X264 Encode外,其余两个均为H264 Camera Passthrough。

第四个摄像头D-Link DCS-932L比较特殊,没有找到rtsp方式,所以Source Type选为Remote,Protocol为HTTP,Method为Simple,Host Name为192.168.2.148,Port为80,Path为/video.cgi。

设置好后建议启用访问控制 (Options -> System -> OPT_USE_AUTH)。默认用户名密码为admin:admin。建议登录后修改密码 (Options -> Users)。

我用的一台老DELL Dimension 5150做服务器,CPU为奔腾4,内存为1.5GB。另外挂载了一块2TB西数紫盘在/var/cache/zoneminder/,用来存储视频和图片,两周时间占用空间约为450GB,耗电50度左右。

由于电脑计算能力有限,所以没有启动motion detection,只是作为一个集中存储视频的地方。另外还需要登录ZModo摄像头(非ZoneMinder)网页控制页面(仅限IE),修改为10fps(默认为25fps),不然电脑太老跟不上。如果不是所有时间都需要录制(比如我选择白天存储三个摄像头的录像,晚上只有两个),可以定时自动切换,设置方法参见这里。简单说就是设置两个状态Daytime和Nighttime,然后创建cron任务分别在不同时间运行

/usr/bin/zmpkg.pl Daytime

/usr/bin/zmpkg.pl Nighttime