ZoneMinder 视频监控安全系统

来自 Alpine Linux

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/lighttpdhttps://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 将无法工作。