核心组件与软件选择
在开始部署之前,我们需要明确系统的核心构成,一个典型的视频监控系统通常包含以下几个关键部分:操作系统、Web 服务器、数据库、后端监控引擎以及前端用户界面,在 CentOS 7 的生态中,我们可以选择不同的软件组合,但以下是一种成熟且广受推荐的方案。
- 操作系统:CentOS 7
- Web 服务器:Apache (httpd),稳定且配置简单。
- 数据库:MariaDB,MySQL 的一个分支,与 CentOS 7 兼容性极佳。
- 监控引擎:ZoneMinder,一个功能强大、开源且历史悠久的监控软件,支持广泛的摄像头类型和高级功能。
市面上也存在其他优秀的开源监控软件,Shinobi,Shinobi 采用 Node.js 构建,界面更现代化,资源占用相对较小,为了帮助您做出选择,下表对两者进行了简要对比:
特性 | ZoneMinder | Shinobi |
---|---|---|
技术栈 | Perl, PHP, MySQL | Node.js, FFmpeg, MariaDB/PostgreSQL |
易用性 | 界面传统,但功能布局清晰,文档丰富 | 界面现代,交互友好,对新手更直观 |
资源占用 | 相对较高,尤其是在处理多路高清流时 | 相对轻量,对硬件要求稍低 |
功能丰富度 | 非常全面,包括复杂的区域检测、时间表等 | 核心功能齐全,插件生态正在发展 |
社区与文档 | 社区庞大,历史悠久,问题解决方案多 | 社区活跃,发展迅速,文档持续更新 |
本文将以 ZoneMinder 为例进行部署,其成熟的架构和丰富的文档使其成为构建稳定监控系统的首选。
环境准备与软件安装
部署 ZoneMinder 的第一步是准备好其运行所依赖的基础环境。
系统更新
确保您的 CentOS 7 系统是最新状态,以修复已知的安全漏洞和软件缺陷。
sudo yum update -y
安装 EPEL 仓库
许多 ZoneMinder 的依赖软件包都包含在 EPEL (Extra Packages for Enterprise Linux) 仓库中。
sudo yum install epel-release -y
安装 LAMP 栈
安装 Apache、MariaDB 和 PHP。
sudo yum install httpd mariadb-server mariadb php php-mysqlnd php-gd php-xml php-mbstring -y
启动并设置服务自启
将 Apache 和 MariaDB 服务启动,并配置为开机自启。
sudo systemctl start httpd sudo systemctl enable httpd sudo systemctl start mariadb sudo systemctl enable mariadb
安全化 MariaDB
运行 MySQL 安全安装脚本,设置 root 密码,移除匿名用户,禁止远程 root 登录等。
sudo mysql_secure_installation
根据提示完成设置,建议对所有安全相关问题都回答 ‘Y’ (Yes)。
安装与配置 ZoneMinder
基础环境就绪后,我们开始安装 ZoneMinder。
添加 ZoneMinder 仓库并安装
ZoneMinder 提供了官方的 YUM 仓库,方便安装和更新。
sudo rpm -Uvh https://zmrepo.zoneminder.com/el/7/x86_64/zmrepo-7-0.el7.noarch.rpm sudo yum install zoneminder -y
配置数据库
ZoneMinder 需要一个数据库来存储配置、事件和元数据,登录 MariaDB 并创建。
mysql -u root -p # 输入您设置的 root 密码 CREATE DATABASE zm; CREATE USER 'zmuser'@'localhost' IDENTIFIED BY 'YourStrongPassword'; GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
请将 YourStrongPassword
替换为一个安全的密码。
修改 ZoneMinder 配置
编辑 ZoneMinder 的主配置文件,填入刚才创建的数据库信息。
sudo vi /etc/zm/zm.conf
找到以下行并修改:
ZM_DB_USER=zmuser
ZM_DB_PASS=YourStrongPassword
配置防火墙与 SELinux
CentOS 7 的防火墙和 SELinux 是重要的安全组件,需要正确配置以允许 ZoneMinder 工作。
# 开放 HTTP 和 HTTPS 服务 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload # 允许 Apache 和 ZoneMinder 进程进行网络连接 sudo setsebool -P httpd_can_network_connect 1 sudo setsebool -P httpd_can_network_relay 1
启动 ZoneMinder 服务
sudo systemctl start zoneminder sudo systemctl enable zoneminder
Web 界面配置与摄像头添加
您可以通过浏览器访问 ZoneMinder 的 Web 控制台了,在浏览器地址栏输入 http://<your_server_ip>/zm
。
首次登录时,使用默认的管理员账户(用户名:admin,密码:admin),登录后,强烈建议立即修改密码。
添加摄像头是系统的核心操作:
- 点击左侧菜单的 “添加” (Add)。
- 在 “通用” (General) 选项卡中,为摄像头命名(前门摄像头),选择 “监控源类型”。
- 在 “源” (Source) 选项卡中,配置摄像头的连接方式。
- 对于 IP 摄像头:选择 “远程” (Remote),并在 “源路径” 中填入 RTSP 或 HTTP 流地址,RTSP 地址通常格式为
rtsp://username:password@camera_ip:port/stream_path
。 - 对于本地 USB 摄像头:选择 “本地” (Local),并选择正确的设备路径,如
/dev/video0
。
- 对于 IP 摄像头:选择 “远程” (Remote),并在 “源路径” 中填入 RTSP 或 HTTP 流地址,RTSP 地址通常格式为
- 保存后,ZoneMinder 会自动尝试连接,在监控列表中,您应该能看到摄像头的状态变为 “已连接” (Running),并显示实时画面。
相关问答 FAQs
Q1: 我已经按照步骤操作,但无法访问 ZoneMinder 的 Web 页面,或者页面显示空白,该怎么办?
A1: 这是一个常见问题,通常由防火墙、SELinux 或服务状态引起,请按以下顺序排查:
- 检查防火墙:确认您已正确开放了 HTTP (80) 端口,运行
sudo firewall-cmd --list-all
查看已开放的 Services。 - 检查 SELinux:运行
getenforce
命令,如果输出是Enforcing
,请确保已执行sudo setsebool -P httpd_can_network_connect 1
命令,临时关闭 SELinux (setenforce 0
) 测试,如果问题解决,则确认为 SELinux 策略问题。 - 检查服务状态:运行
sudo systemctl status httpd
和sudo systemctl status zoneminder
,确保两个服务都处于active (running)
状态,如果服务未运行,使用journalctl -u service_name
查看日志以定位错误原因。 - 检查 PHP 错误日志:查看 Apache 的错误日志 (
/var/log/httpd/error_log
),其中可能包含 PHP 的致命错误信息,例如权限问题或缺少必要的 PHP 模块。
Q2: 我的摄像头在 ZoneMinder 中显示“未连接”状态,但我知道它本身是正常的,我该如何调试?
A2: 这个问题通常指向 ZoneMinder 与摄像头之间的通信故障,请尝试以下步骤:
- 网络连通性:从 CentOS 服务器上
ping <camera_ip>
,确保网络是通的。 - 验证流地址:在服务器上使用
ffplay
或vlc
命令行工具直接测试 RTSP 或 HTTP 流地址。ffplay rtsp://user:pass@ip:port/stream
,如果在这里无法播放,说明流地址、用户名或密码有误。 - 检查摄像头凭证:在 ZoneMinder 的监控源配置中,仔细核对用户名和密码是否正确,注意大小写和特殊字符。
- 调整 ZoneMinder 源参数:在 “源” 选项卡中,可以尝试调整 “捕获方法” (Capture Method),对于 RTSP 流,通常选择
rtsp
或ffmpeg
方法,对于某些摄像头,可能需要在 “选项” 中指定特定的编码格式或容器格式。 - 查看日志:ZoneMinder 的日志 (
/var/log/zoneminder/zm.log
) 是最强大的调试工具,当监控点尝试连接时,日志会输出详细的错误信息,例如认证失败、网络超时或解码错误,根据日志信息进行针对性修复。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复