Видеонаблюдение через интернет в веб-браузере

Конфигурация AVReg для создания нескольких независимых пользовательских систем AVReg на одном сервере.

Задача.

Нужно получить несколько независимых систем AVReg на одном видеосервере со следующими характеристиками:

  • раздельные базы данных (настройки камер, пользователи, события, …);
  • раздельные каталоги для сохранения медиа-файлов (архив);
  • доступ в веб-интерфейс под разными путями (URI);
  • один конечный пользователь (или группа) не должен знать о существовании других.

Далее по тексту, такие независимые системы, будут называться учётными записями AVReg или профилями.

Такая конфигурация может быть востребована для:

  • хостинга систем видеорегистрации, когда под пользователями подразумеваются клиенты (организации, ИП или физ. лица), не желающие или не имеющие возможность приобрести и обслуживать собственную систему видеорегистрации;
  • полного разграничения доступа к системе видеонаблюдения крупных предприятий, состоящие из многих подразделений (дирекция, бухгалтерия, цех, склад, …). Например, чтобы охрана на КПП «работала» с «своими» камерами и даже не догадывалась о камерах установленных в дирекции или бухгалтерии, а может и скрытых камерах в самом КПП :).
Внутри каждой учётной записи AVReg доступна привязка списка «разрешённых» камер к пользователям.

Подготовка.

Названия учётных записей.

В силу многих ограничений, название учётной записи AVReg не может быть совершенно произвольным:

  • первая буква должна быть из диапазона [A-Za-z0-9];
  • следующие буквы - [A-Za-z0-9_-:];
  • длина имени - не более 55 знаков, рекомендуем не более 10.

Примеры (имена заключены в кавычки):

  • правильные имена:
    • «Lenina_137»
    • «Mira-15»
  • неправильные имена:
    • «Ленина_137»
    • «Mira 15»
    • «firma@ru»

Каталоги для медиа-архивов.

Каждая учётная запись AVReg должна иметь отдельный корневой каталог для своего медиа-архива. Поэтому для каждой учётной записи AVReg очень логично использовать отдельного системного пользователя с домашним каталогом внутри каталога «/home».

С помощью утилиты adduser или GUI-средствами нужно создать системных пользователей с именами максимально похожими на имена учётных записей AVReg, например: lenina_137 и mira_15:

# adduser lenina_137 --ingroup avreg
# adduser mira_15    --ingroup avreg

$ ls -l /home/
drwxr-xr-x  2 lenina_137 avreg  4096 2011-03-01 12:19 lenina_137
drwxr-xr-x  2 mira_15    avreg  4096 2011-03-01 12:33 mira_15
Для хранения файлов разных учётных записей вы можете использовать отдельные блочные устройства, например, разделы дисков или raid-устройства. Однако на практике это малоэффективно и неудобно. Мы рекомендуем использовать LVM для /home, файловую систему Ext4 или XFS и дисковые квоты (quota для ext4 или xfs_quota для xfs).
В любом случае, «/home» должен быть точкой монтирования, а не обычным каталогом внутри корневой файловой системы «/».

Дисковые квоты.

Если, как мы и рекомендовали выше, медиа-архивы всех учётных записей AVReg расположены на одном блочном устройстве, вам необходимо включить дисковые квоты.

Для не-корневой (/) файловой системы это делается через «/etc/fstab», добавлением некоторых специальных опций монтирования /home.

Ext4

/etc/fstab

/dev/md0  /home  ext4  rw,nosuid,nodev,noexec,noatime,grpid,usrjquota=aquota.user,jqfmt=vfsv0  0  2
  • Зайдите в систему как root,
  • остановите все процессы работающие с /home (см. lsof /home),
  • отмонтируйте /home (umount /home)
  • и примонтируйте заново (mount /home).

После этого установите следующие пакеты:

# aptitude install quota quotatool

Далее установите квоты для пользователей mira_15 и lenina_137, например с порогами soft/hard в 90МБ/100MБ :

# quotatool -u mira_15    -b -q90m -l100m /home
# quotatool -u lenina_137 -b -q90m -l100m /home

$ repquota -a
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
lenina_137 --     20   92160  102400              5     0     0       
mira_15    --     20   92160  102400              5     0     0       


Ссылки по квотам для EXT3/EXT4:

XFS

/etc/fstab

/dev/md0  /home  xfs  rw,nosuid,nodev,noexec,noatime,grpid,usrquota  0  2
  • Зайдите в систему как root,
  • остановите все процессы работающие с /home (см. lsof /home),
  • отмонтируйте /home (umount /home)
  • и примонтируйте заново (mount /home).

Далее установите квоты для пользователей mira_15 и lenina_137, например с порогами soft/hard в 90МБ/100MБ :

# xfs_quota -x -c 'limit bsoft=90m bhard=100m mira_15'    /home
# xfs_quota -x -c 'limit bsoft=90m bhard=100m lenina_137' /home

# xfs_quota -x -c 'report -h' /home 2>/dev/null
User quota on /home (/dev/sdc1)
                        Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
lenina_137    16K    90M   100M  00 [------]
mira_15       16K    90M   100M  00 [------]


Ссылки по квотам для XFS:

Базы данных.

Исходя их требований нашей задачи (см. в самом начале) необходимо создание отдельных баз данных для каждой учётной записи AVReg.

Имена баз данных должны иметь префикс «avreg5_db-», например, «avreg5_db-Mira_15».

При установке пакета avreg-common автоматически создаётся база данных c именем «avreg5_db». Это база для однопрофильной системы AVReg и идеологически неверно использовать её для одной из учётных записей AVReg. Базу «avreg5_db» с предварительно очищенной таблицей EVENTS удобно использовать как шаблон для создания создания новых баз учётных записей (профилей). Это удобно и легко делается в веб-интерфейсе пакета PhpMyAdmin «Операции» → «Скопировать БД в». Прим.: сначала нужно установить пакет phpmyadmin и зайти браузером по адресу http://localhost/phpmyadmin/.

Если по каким-то причинам вы не хотите или не можете использовать PhpMyAdmin, то для «консольного» способа создания баз вам понадобиться интерпретатор mysql и 3 шаблонных SQL файла расположенных в каталоге «/usr/share/doc/avreg-common/examples/sql»:

  1. create_db.sql - создаёт базу данных ( :!: нужно изменять имя базы данных );
  2. create_tables.sql - создаёт таблицы в БД;
  3. data_template.sql - наполняет таблицы шаблонными данными.

Например, для 2-х пользователей Lenina_137 и Mira_15 должны быть созданы сделующие базы данных:

mysql> show databases like "avreg5_db-%";
+-----------------------+
| Databases avreg5_db-% |
+-----------------------+
| avreg5_db-Mira_15     |
| avreg5_db-Lenina_137  |
+-----------------------+

Настройка AVReg.

avreg.conf

Удалите (в крайнем случае закомментировать) в основном конфигурационном файле «/etc/avreg/avreg.conf» следующие частные параметры приложений (т.е. расположенные внутри секций «название_приложение { … }») :

  • db-host
  • db-name
  • storage-dir
  • user
  • group

Затем нужно определить параметр disk-usage-cmd в секции avreg-unlink { … } соответственно используемой файловой системы (для чего - см. в описании к disk-usage-cmd).

/etc/avreg/avreg.conf

...
avreg-unlink {
   ...
   # при установленном пакете quotatool подходит и для EXT4 и для XFS
   disk-usage-cmd = "quotatool -b -u @USER -d @MNTPOINT | awk '{ print $3,$5 }'"
   ...
}

Профили.

Для каждой учётной записи AVReg необходимо создать свой конфигурационный файл - профиль. Для этого в каталоге профилей «/etc/avreg/profiles» нужно создать файлы с именами учётных записей и следующим содержимым (см. распечатки ниже).

Например:

$ cd /etc/avreg/profiles
$ ls -l [A-Za-z0-9_-:]*
-rw-r--r-- 1 root root 167 2008-02-16 17:56 Mira_15
-rw-r--r-- 1 root root 170 2008-02-16 17:56 Lenina_137

$ cat Mira_15

server-name = "ЖЭУ 4, дом ул.Мира 15"

admin-name = "ФИО ИТ админа"
; admin-mail = "your@email"
; admin-tel  = "+7 111 222 333"

db-name = "avreg5_db-Mira_15"

storage-dir = "/home/mira_15"

user = "mira_15"

avregd {
   # можно привязать к определённому cpu
   ; cpu = 7

   # порт, с которого будет раздаваться видео
   http-port = 876
}

avreg-site {
    avregd-httpd = 'http://$_SERVER[SERVER_NAME]:876'
}

$ cat Lenina_137

server-name = "УК Дом, дом ул.Ленина 137"

admin-name = "ФИО ИТ админа"
; admin-mail = "your@email"
; admin-tel  = "+7 111 222 333"

db-name = "avreg5_db-Lenina_137"

storage-dir = "/home/lenina_137"

user = "lenina_137"

avregd {
   # можно привязать к определённому cpu
   ; cpu = 8

   # порт, с которого будет раздаваться видео
   http-port = 877
}

avreg-site {
    avregd-httpd = 'http://$_SERVER[SERVER_NAME]:877'
}

URI входа.

Напомним, наша задача получить вход в веб-интерфейс AVReg для учётных записей по адресам:

http://‹имя-или-ip-адрес-сервера›/‹название-учётной-записи›

Для этого в пользовательском конфигурационном файле веб-сервера Apache «/etc/avreg/site-apache2-user.conf» нужно указать следующие директивы Alias, по 2 на каждую учётную запись AVReg.

Например, продолжая для двухпрофильной AVReg Mira_15 и Lenina_137:

% cat site-apache2-user.conf

### for "Mira_15" profile's access http://ip_or_name/Mira_15/
Alias '/Mira_15/media' '/home/mira_15'
Alias '/Mira_15'       '/usr/share/avreg-site'

### for 'Lenina_137' profile's  access http://ip_or_name/Lenina_137/
Alias '/Lenina_137/media'  '/home/lenina_137'
Alias '/Lenina_137'        '/usr/share/avreg-site'

И заставить демон Apache перечитать(обновить) конфигурацию:

$ sudo apache2ctl -k graceful
# или
$ sudo service apache2 reload

Запуск и работа.

Веб-интерфейс

Вход в каждую учётную запись AVReg (в наших примерах Mira_15 и Lenina_137):

http://‹имя-или-ip-адрес-сервера›/‹название-учётной-записи›

По-умолчанию, доступ открыт 5-м пользователям, представителям каждой их 5-х групп доступа: install, admin, arch, operator и viewer с пустыми паролями.

Полный доступ, включая добавление/удаление/настройку камер, есть только у пользователей группы «Инсталляторы». Предполагается что это администраторы хостера (сервера), а не администраторы конечных пользователей - учётных записей AVReg.

В веб-интерфейсе AVReg, как минимум, нужно определить:

  • пользователей,
  • количество камер,
  • настройки камер.

avregd

Управлять (запуск/останов/перезапуск) «своим» демоном avreg с веб-интерфейса могут члены групп «Инсталляторы» и «Администраторы».

Дополнительно, управлять демономами avregd всех профилей разом можно с терминала суперпользователя root или через sudo:

# service avreg start
Starting AVReg surveillance system server:  avregd-Mira_15[12941] started; avregd-Lenina_137[12966] started; .

В моменты загрузки и остановки системы (компьютера) демоны avregd всех профилей запускаются и останавливаются автоматически (сценарий системы SysV Init «/etc/init.d/avreg»).

Очистка архива

Очистку медиа-архивов всех учётных записей AVReg обеспечивает периодический запуск avreg-unlink.

Запущенный автоматически по-расписанию или «руками» в терминале с параметрами по-умолчанию он последовательно удалит старые файлы всех учётных записей AVReg:

# avreg-unlink -v
Mira_15: база данных "avreg5_db-Mira_15", корневой каталог архива: `/home/mira_15'
Mira_15: Подключаемся к MySQL базе данных на  "avreg5_db-Mira_15"
Lenina_137: база данных "avreg5_db-Lenina_137", корневой каталог архива: `/home/lenina_137'
Lenina_137: Подключаемся к MySQL базе данных на  "avreg5_db-Lenina_137"
Mira_15: Запуск "чистильщика" медиа-архива AVReg на "avreg5_db-Mira_15@/home/mira_15"
Mira_15: устройство с медиа-архивом - `/dev/sdb1', смонтировано на `/home', fs `ext4'
Mira_15: перед удалением `/dev/sdb1' размер: всего/использ./свободно: 100.0 МБ / 20.0 КБ (0%) / 100.0 МБ (100%)
Mira_15: свободное место (100.0 МБ) > "start-space" options (10.0 МБ) => не будем удалять.
Lenina_137: Запуск "чистильщика" медиа-архива AVReg на "avreg5_db-Lenina_137@/home/lenina_137"
Lenina_137: устройство с медиа-архивом - `/dev/sdb1', смонтировано на `/home', fs `ext4'
Lenina_137: перед удалением `/dev/sdb1' размер: всего/использ./свободно: 100.0 МБ / 20.0 КБ (0%) / 100.0 МБ (100%)
Lenina_137: свободное место (100.0 МБ) > "start-space" options (10.0 МБ) => не будем удалять.

Ссылки по теме.

manual/applications/multi-user.txt · Последние изменения: 2011-03-02