ZoneMinder 视频监控安全系统
ZoneMinder 通常与 Apache 一起运行,但在本简短教程中,我们使用 Lighttpd。
基础安装
ZoneMinder 可以在 community 仓库中找到,请按照这里的说明启用它。
然后,将 zoneminder 的软件包添加到我们的系统中。
apk add zoneminder mariadb mysql-client lighttpd php-fpm php-pdo php-pdo_mysql php-intl php-session php-ctype
注意:您需要调整上述内容以使用适当的 php 版本。例如,在 alpine 3.17 中使用 php 8.1,因此您需要输入 php81-fpm。在 alpine 3.20 中使用 php 8.3,因此您需要输入 php83-fpm。您可以通过输入 apk search php 并筛选结果来查找您的发行版对应的 php 版本。此版本后缀应添加到每个 php 软件包中。
数据库
初始化 MySQL 数据库
rc-service mariadb setup
启动数据库
rc-service mariadb start
按照 MySQL 设置的指示设置 MySQL 的 root 密码
/usr/bin/mysqladmin -u root password 'your_secure_root_mysql_password'
您可以使用以下命令以当前 root 用户身份登录 MySQL:
mysql
创建 ZoneMinder MySQL 数据库和用户
mysql> create database zm;
mysql> CREATE USER zmuser@localhost IDENTIFIED BY 'your_zm_password_as_set_in_config';
mysql> grant ALL on zm.* to zmuser@localhost;
Web 服务器
我们正在运行 lighttpd
,所以让我们以 lighttpd 用户/组身份运行 php-fpm
。
vi /etc/php8/php-fpm.conf
注意:对于 php 8.1
vi /etc/php81/php-fpm.conf
将此部分添加到文件末尾
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ;user = nobody ;group = nobody user = lighttpd group = lighttpd
在 lighttpd.conf
中启用 php cgi fpm 配置
vi /etc/lighttpd/lighttpd.conf
下移到 server modules 部分,取消注释 mod_alias
(cgi-bin 需要)和 mod_rewrite
(api 需要)。它应该看起来像这样:
# {{{ modules # At the very least, mod_access and mod_accesslog should be enabled. # All other modules should only be loaded if necessary. # NOTE: the order of modules is important. server.modules = ( "mod_rewrite", # "mod_redirect", "mod_alias", "mod_access", # "mod_cml", # "mod_trigger_b4_dl", # "mod_auth", # "mod_status", # "mod_setenv", # "mod_proxy", # "mod_simple_vhost", # "mod_evhost", # "mod_userdir", # "mod_deflate", # "mod_ssi", # "mod_usertrack", # "mod_expire", # "mod_secdownload", # "mod_rrdtool", # "mod_webdav", "mod_accesslog" ) # }}}
下移到 includes 部分,它应该看起来像这样:
# {{{ includes include "mime-types.conf" # uncomment for cgi support include "mod_cgi.conf" # uncomment for php/fastcgi support # include "mod_fastcgi.conf" # uncomment for php/fastcgi fpm support include "mod_fastcgi_fpm.conf" # }}}
为了使视频流在 1.36 版本中工作,您需要将以下内容添加到 /etc/lighttpd/lighttpd.conf 中:
server.stream-response-body = 1
在 lighttpd.conf 中,对于 API,我们将希望将任何 api+ 请求重定向到 cakephp。因此,添加:
url.rewrite = ( "^/zm/api(.+)$" => "/zm/api/index.php" )
编辑 lighttpd cgi 配置,并通过添加到 cgi.assign 来添加旧式 cgi 支持
vi /etc/lighttpd/mod_cgi.conf
应该看起来像这样:
cgi.assign = ( "" => "", ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" )
还要将以下内容添加到 mod_cgi.conf 中的 alias.url,使其看起来像这样:
alias.url = ( "/cgi-bin/" => var.basedir + "/cgi-bin/", "/zm/api" => "/usr/share/webapps/zoneminder/htdocs/api/app/webroot/", "/zm/" => "/usr/share/webapps/zoneminder/htdocs/" )
删除 /var/www/localhost/htdocs 中的符号链接(我们将使用别名,而不是符号链接)。
unlink /var/www/localhost/htdocs/zm
启动 php-fpm
rc-service php-fpm8 start
注意: 对于 php-fpm81,使用以下命令
rc-service php-fpm81 start
启动 lighttpd
rc-service lighttpd start
Zoneminder
设置 MySQL 主机名、用户名、密码。
将 ZoneMinder 用户 (ZM_WEB_USER
) 和组 (ZM_WEB_GROUP
) 更改为 lighttpd
并将 ZM_SERVER_HOST
设置为您的 ZoneMinder 主机名/IP 地址
vi /etc/zm/zm.conf
应该看起来像这样:
# Username and group that web daemon (httpd/apache) runs as ZM_WEB_USER=lighttpd ZM_WEB_GROUP=lighttpd ZM_PATH_DATA=/usr/share/zoneminder
# ZoneMinder database type: so far only mysql is supported ZM_DB_TYPE=mysql # ZoneMinder database hostname or ip address ZM_DB_HOST=localhost # ZoneMinder database name ZM_DB_NAME=zm # ZoneMinder database user ZM_DB_USER=zmuser # ZoneMinder database password ZM_DB_PASS=your_zm_password_as_set_in_config # Host of this machine ZM_SERVER_HOST=yourserver
将 zm.conf
的所有权更改为 lighttpd
chown lighttpd.lighttpd /etc/zm/zm.conf
Zoneminder 将在 /var/cache/zoneminder
中创建一个缓存,默认情况下不会创建。创建此目录并允许 lighttpd 访问它。请注意,如果您正在使用无盘安装,则必须 lbu add /var/cache/zoneminder。
mkdir /var/cache/zoneminder chown lighttpd.lighttpd /var/cache/zoneminder
初始化 ZoneMinder 数据库
rc-service zoneminder setup
启动 ZoneMinder
rc-service zoneminder start
成功!
结论
要访问 ZoneMinder,请浏览到 http://yourserver/zm/
要测试 API,运行
curl -X GET http://yourserver/zm/api/host/getVersion.json
(这假设您未使用身份验证。)
要使其在启动时自动启动
rc-update add lighttpd default rc-update add mariadb default rc-update add php-fpm8 default rc-update add zoneminder default
添加使用 Nginx 的注意事项
稍后添加一些关于通过 nginx 运行的注意事项
故障排除
lighttpd 的常规故障排除
您可以通过取消注释 /etc/lighttpd/lighttpd.conf 中的调试选项来启用 lighttpd 的调试功能(在 3.20 版本中是):
debug.log-request-header = "enable" debug.log-response-header = "enable" debug.log-request-handling = "enable" debug.log-file-not-found = "enable"
注意,自 3.14 版本起,mod_alias 现在已内置到 lighttpd 中,而不是一个模块(.so 文件)。
如需进一步故障排除,请参考 alpine 构建日志(https://pkgs.alpinelinux.org/package/v3.21/main/x86_64/lighttpd 或 https://pkgs.alpinelinux.org/package/v3.21/main/x86_64/zoneminder)或者 lighttpd redmine wiki 和论坛。ZoneMinder 论坛/discord/github 问题跟踪器也可用于处理任何与 ZoneMinder 相关的错误。
/var/log/lighttpd/error.log 中的 PHP 致命错误
有时 php 扩展会丢失。例如,在 3.20 版本中,我必须手动安装 php83-ctype,这在以前的版本中是不需要的。这很令人困惑,因为已经安装了 php82 和 php-fpm83。从 php82 交互式 shell 测试 ctype 会成功,但 ZM 正在使用 php-fpm83,并且来自 index.php 的 phpinfo() 列出了 ctype(您可能会认为已安装),但是 ctype 被列为 'enable=shared',我假设这意味着您必须安装 ctype 的共享库。
ZM 在 3.20 版本中未编译 LibVNC 支持
这是一个缺失的功能,应该在未来的某个时候解决。这意味着源类型:VNC 将无法工作。