ZoneMinder video camera security and surveillance: Difference between revisions
(No longer requires edge; Added missing required packages; Replaced mysql with mariadb as requred; Added DROP privilege as required by setup step; Added required permission change to use lighttpd; Added missing setup step) |
Alpineuser (talk | contribs) (→Related Links: I didn't need to add this link before.) |
||
(24 intermediate revisions by 11 users not shown) | |||
Line 1: | Line 1: | ||
ZoneMinder usually runs with | [https://www.zoneminder.com/ ZoneMinder] usually runs with [[Apache]], but in this short how-to we use [[Lighttpd]]. | ||
==Base Install== | |||
ZoneMinder is found in the community repositories, please enable it by following the instructions [[Repositories#Enabling_the_community_repository|here]] | |||
Then, add the needed packages to our system | |||
apk add zoneminder mariadb mysql-client lighttpd php8-fpm php8-pdo php8-pdo_mysql | |||
Create a | ''Note: In Alpine 3.17, php 8.1 replaces php8.0'' | ||
apk add zoneminder mariadb mysql-client lighttpd php81-fpm php81-pdo php81-pdo_mysql | |||
===Database=== | |||
Initialize [https://www.mysql.com/ MySQL] database | |||
rc-service mariadb setup | |||
Start the database | |||
rc-service mariadb start | |||
Set root password for MySQL as instructed by MySQL setup | |||
/usr/bin/mysqladmin -u root password 'your_secure_root_mysql_password' | |||
You can log into MySQL as current root user with | |||
mysql | |||
Create a ZoneMinder MySQL database and user | |||
mysql> create database zm; | mysql> create database zm; | ||
mysql> CREATE USER | mysql> CREATE USER zmuser@localhost IDENTIFIED BY 'your_zm_password_as_set_in_config'; | ||
mysql> grant ALL on zm.* to zmuser@localhost; | |||
===Web Server=== | |||
We are running <code>lighttpd</code>, so let's run <code>php-fpm</code> as lighttpd user/group | |||
vi /etc/php8/php-fpm.conf | |||
''Note: for php 8.1'' | |||
vi /etc/php81/php-fpm.conf | |||
Add this section to the bottom of the file: | |||
; 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 | |||
Enable the php cgi fpm config in <code>lighttpd.conf</code> | |||
vi /etc/lighttpd/lighttpd.conf | |||
Go down to the server modules section and uncomment <code>mod_alias</code>, which is needed for the cgi-bin, and <code>mod_rewrite</code>, for the api. It should look like: | |||
# {{{ 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" | |||
) | |||
# }}} | |||
Go down to the includes section, it should look like: | |||
# {{{ 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" | |||
# }}} | |||
In order for video streaming to work in 1.36, you'll need the following | |||
added to /etc/lighttpd/lighttpd.conf: | |||
server.stream-response-body = 1 | |||
In lighttpd.conf for the API, we will want to redirect any api+ requests to cakephp. Thus, add: | |||
url.rewrite = ( | |||
"^/zm/api(.+)$" => "/zm/api/index.php" | |||
) | |||
Edit lighttpd cgi config and add old style cgi support by adding to cgi.assign | Edit lighttpd cgi config and add old style cgi support by adding to cgi.assign | ||
vi /etc/lighttpd/mod_cgi.conf | |||
which should look like | which should look like | ||
Line 59: | Line 129: | ||
) | ) | ||
Also add the following to alias.url in mod_cgi.conf so that it looks like | |||
alias.url = ( | |||
"/cgi-bin/" => var.basedir + "/cgi-bin/", | |||
"/zm/api" => "/usr/share/webapps/zoneminder/htdocs/api/app/webroot/", | |||
"/zm/" => "/usr/share/webapps/zoneminder/htdocs/" | |||
) | |||
Remove the symlink in /var/www/localhost/htdocs (we will be using the alias, not the symlink). | |||
unlink /var/www/localhost/htdocs/zm | |||
Start php-fpm | |||
rc-service php-fpm8 start | |||
/etc/ | ''Note:'' for php-fpm81, use the following command: | ||
rc-service php-fpm81 start | |||
Start lighttpd | |||
rc-service lighttpd start | |||
===Zoneminder=== | |||
Set the MySQL hostname, username, password. | |||
Change the ZoneMinder user (<code>ZM_WEB_USER</code>) and group (<code>ZM_WEB_GROUP</code>) to lighttpd | |||
And set <code>ZM_SERVER_HOST</code> to your ZoneMinder hostname/ipaddress | |||
vi /etc/zm/zm.conf | |||
Which should look like: | |||
# 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 | |||
Change ownership of <code>zm.conf</code> to <code>lighttpd</code> | |||
chown lighttpd.lighttpd /etc/zm/zm.conf | |||
Zoneminder will create a cache in <code>/var/cache/zoneminder</code> which isn't created by default. Create this directory and allow lighttpd access to it. Note that if you are using a diskless install, you must lbu add /var/cache/zoneminder. | |||
mkdir /var/cache/zoneminder | |||
chown lighttpd.lighttpd /var/cache/zoneminder | |||
Initialize the ZoneMinder database | |||
rc-service zoneminder setup | |||
Start ZoneMinder | |||
rc-service zoneminder start | |||
Profit! | Profit! | ||
To access | ===Conclusion=== | ||
To access ZoneMinder, browse to <nowiki>http://yourserver/zm/</nowiki> | |||
To test the API, run | |||
curl -X GET <nowiki>http://yourserver/zm/api/host/getVersion.json</nowiki> | |||
(This assumes you aren't using authentication.) | |||
To make it start automatically on boot: | |||
rc-update add lighttpd default | |||
rc-update add mariadb default | |||
rc-update add php-fpm8 default | |||
rc-update add zoneminder default | |||
== Added notes to work with Nginx == | |||
Later to add some notes about running via nginx | |||
[[Category:Software]] | |||
[[Category:Security]] |
Latest revision as of 11:43, 24 October 2024
ZoneMinder usually runs with Apache, but in this short how-to we use Lighttpd.
Base Install
ZoneMinder is found in the community repositories, please enable it by following the instructions here
Then, add the needed packages to our system
apk add zoneminder mariadb mysql-client lighttpd php8-fpm php8-pdo php8-pdo_mysql
Note: In Alpine 3.17, php 8.1 replaces php8.0
apk add zoneminder mariadb mysql-client lighttpd php81-fpm php81-pdo php81-pdo_mysql
Database
Initialize MySQL database
rc-service mariadb setup
Start the database
rc-service mariadb start
Set root password for MySQL as instructed by MySQL setup
/usr/bin/mysqladmin -u root password 'your_secure_root_mysql_password'
You can log into MySQL as current root user with
mysql
Create a ZoneMinder MySQL database and user
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 Server
We are running lighttpd
, so let's run php-fpm
as lighttpd user/group
vi /etc/php8/php-fpm.conf
Note: for php 8.1
vi /etc/php81/php-fpm.conf
Add this section to the bottom of the file:
; 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
Enable the php cgi fpm config in lighttpd.conf
vi /etc/lighttpd/lighttpd.conf
Go down to the server modules section and uncomment mod_alias
, which is needed for the cgi-bin, and mod_rewrite
, for the api. It should look like:
# {{{ 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" ) # }}}
Go down to the includes section, it should look like:
# {{{ 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" # }}}
In order for video streaming to work in 1.36, you'll need the following added to /etc/lighttpd/lighttpd.conf:
server.stream-response-body = 1
In lighttpd.conf for the API, we will want to redirect any api+ requests to cakephp. Thus, add:
url.rewrite = ( "^/zm/api(.+)$" => "/zm/api/index.php" )
Edit lighttpd cgi config and add old style cgi support by adding to cgi.assign
vi /etc/lighttpd/mod_cgi.conf
which should look like
cgi.assign = ( "" => "", ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" )
Also add the following to alias.url in mod_cgi.conf so that it looks like
alias.url = ( "/cgi-bin/" => var.basedir + "/cgi-bin/", "/zm/api" => "/usr/share/webapps/zoneminder/htdocs/api/app/webroot/", "/zm/" => "/usr/share/webapps/zoneminder/htdocs/" )
Remove the symlink in /var/www/localhost/htdocs (we will be using the alias, not the symlink).
unlink /var/www/localhost/htdocs/zm
Start php-fpm
rc-service php-fpm8 start
Note: for php-fpm81, use the following command:
rc-service php-fpm81 start
Start lighttpd
rc-service lighttpd start
Zoneminder
Set the MySQL hostname, username, password.
Change the ZoneMinder user (ZM_WEB_USER
) and group (ZM_WEB_GROUP
) to lighttpd
And set ZM_SERVER_HOST
to your ZoneMinder hostname/ipaddress
vi /etc/zm/zm.conf
Which should look like:
# 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
Change ownership of zm.conf
to lighttpd
chown lighttpd.lighttpd /etc/zm/zm.conf
Zoneminder will create a cache in /var/cache/zoneminder
which isn't created by default. Create this directory and allow lighttpd access to it. Note that if you are using a diskless install, you must lbu add /var/cache/zoneminder.
mkdir /var/cache/zoneminder chown lighttpd.lighttpd /var/cache/zoneminder
Initialize the ZoneMinder database
rc-service zoneminder setup
Start ZoneMinder
rc-service zoneminder start
Profit!
Conclusion
To access ZoneMinder, browse to http://yourserver/zm/
To test the API, run
curl -X GET http://yourserver/zm/api/host/getVersion.json
(This assumes you aren't using authentication.)
To make it start automatically on boot:
rc-update add lighttpd default rc-update add mariadb default rc-update add php-fpm8 default rc-update add zoneminder default
Added notes to work with Nginx
Later to add some notes about running via nginx