iSpy Agent
iSpy это бесплатный Self-Hosted сервис на стероидах, который подключается к камерам (в моем случае по rtsp) и может очень по-разному реагировать на происходящее на них.
Например:
- Присылать email, когда какая-то камера стала недоступна
- Воспроизводить звук в доме, когда замечает человека с пиццой в руках (или просто человека, машину, вазонный горшок и что угодно другое)
- Генерировать таймлапс записи, чтобы бегло посмотреть, что произошло за день
- Удобно просматривать сгенерированные фото и видео с камеры с любого устройства, где есть браузер
- Заливать видео на FTP/DropBox, куда угодно еще по определенным правилам
- Определять лица людей и понимать, кого именно она сейчас видит
- Можно даже в VR смотреть на камеры
Все, что я перечислил выше можно ооочень тонко сконфигурировать, вплоть до "если сегодня не принесли пиццу, то запустить ядерную ракету", если вдруг у вас такая где-то завалялась
Это очень мощный инструмент и он соответственно сложен в настройке. Когда я впервые с ним столкнулся, я тут же его удалил. Будь умным, не будь как я
Системные требования
У меня Linux Server, арендован в OVH. На борту 2 TB места, 16 ОЗУ, Intel(R) Core(TM) i5-2400 CPU @ 4 * 3.10GHz
3 камеры у меня сжирало 50% CPU и до 4 ГБ ОЗУ (оптимизировать можно). iSpy обрабатывает Substream с камер (24 FPS, 640*480, bitrate 1024, запись событий ведет в 1080P).
Установка iSpy, как у меня
Сначала я установил iSpy на свой Windows ПК, чтобы потыкать в него палкой и понять, нужен ли он мне. Рекомендую сделать так же
iSpy работает в Docker контейнере на выделенном сервере, а домен и логин+пароль повесил на него, добавив Traefik + Basic Auth Middleware. Вам не обязательно с этим возиться, можно просто установить на сервер Windows, затем там запустить iSpy, но мне было проще так, как я сделал и именно об этом я буду писать
Если вы еще не знаете, что такое Docker и не готовы потратить вечерок-второй, чтобы базово в нем разобраться, то установите как-нибудь иначе и переходите к части "Настройка iSpy"
Traefik
Использую для того, чтобы повесить iSpy на домен и закрыть за Basic Auth авторизацией (безопасность).
Traefik работает отдельно от iSpy, так как проксирует еще несколько других сайтов, которые динамично подключаются подобно тому, как я ниже подключу iSpy
Код Traefik для docker-compose.yml
version: '3'
services:
traefik:
image: traefik:v2.6
# container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${DATA_PATH}/traefik/acme.json:/acme.json
networks:
- proxy
command:
#- "--log.level=DEBUG"
- "--api"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=proxy"
- "--entrypoints.web.address=:80"
- "--entrypoints.web-secure.address=:443"
- "--serverstransport.insecureskipverify=true"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
- "--certificatesresolvers.mytlschallenge.acme.email=$TRAEF_ACME_EMAIL"
- "--certificatesresolvers.mytlschallenge.acme.storage=/acme.json"
labels:
- "traefik.enable=true"
#Traefik dashboard config
- "traefik.http.routers.traefik.rule=Host(`$TRAEF_DASHBOARD_DOMAIN`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.entrypoints=web-secure"
- "traefik.http.routers.traefik.tls.certresolver=mytlschallenge"
#Middleware
- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.traefik-auth.basicauth.users=login:$$2a$05$$9kZMQL0neCA2TogroG8WbO3yObDtHbo6BRwflTnGtQy6vKJCvMDWe" # login=login, pass=123456
- "traefik.http.routers.traefik.middlewares=traefik-auth"
#global redirect to https
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.middlewares=https-redirect"
networks:
proxy:
name: proxy
# driver: bridge
До запуска нужно создать пустой файл acme.json
и обязательно сделать ему chmod 600 acme.json
. Если забыть указать chmod или создать файл, то SSL работать не будет (!)
Не забудьте также поправить email и часть конфига про Dashboard (или удалите его)
iSpy Agent
Код для ispy docker-compose.yml
version: '3'
services:
ispy:
image: mekayelanik/ispyagentdvr:5.2.1.0 # актуально для этой версии. Но можете попробовать указать latest
depends_on:
- codeprojectai
- traefik
volumes:
- $PWD/config/:/AgentDVR/Media/XML/
- $PWD/media/:/AgentDVR/Media/WebServerRoot/Media/
- $PWD/commands/:/AgentDVR/Commands/
ports:
# - 8090:8090
# - 50000-50010:50000-50010/udp
- 3478:3478/udp # без этого бесконечная загрузка Agent страницы.
networks:
- proxy # та же, что у Traefik
environment:
- TZ=Europe/Moscow
tty: true # включает более детальный лог в консоли \_ :| _/
restart: unless-stopped
labels:
- traefik.enable=true
- traefik.http.routers.ispy_route.rule=Host(`$ISPY_DOMAIN`) # замените. Обратные кавычки не трогать
- traefik.http.routers.ispy_route.entrypoints=web # web-secure требует бизнес лицензию (49$)
# - traefik.http.routers.ispy_route.tls.certresolver=mytlschallenge
- traefik.http.routers.ispy_route.service=ispy_service
# - traefik.http.services.ispy_service.loadbalancer.server.scheme=https
- traefik.http.services.ispy_service.loadbalancer.server.port=8090
- traefik.http.routers.ispy_route.middlewares=auth
- "traefik.http.middlewares.auth.basicauth.users=login:$$2a$05$$9kZMQL0neCA2TogroG8WbO3yObDtHbo6BRwflTnGtQy6vKJCvMDWe" # login:123456
codeprojectai:
image: codeproject/ai-server:cpu-2.5.0
depends_on:
- traefik
volumes:
- ${DATA_PATH}/codeprojectai/modules/:/app/modules
- ${DATA_PATH}/codeprojectai/data/:/etc/codeproject/ai
# ports:
# - 8896:5000
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.codeai.rule=Host(`$CODEPROJECT_DOMAIN`)
- traefik.http.routers.codeai.entrypoints=web-secure
- traefik.http.routers.codeai.tls.certresolver=mytlschallenge
networks:
proxy:
name: proxy
# external: true # раскомментировать, если traefik сервис определен в отдельном compose файле
Код для docker-compose.yml я ранее публиковал тут (клик) (но сейчас я использую docker image не от doitandbedone/ispyagentdvr
, а mekayelanik/ispyagentdvr
, так что пути в volumes будут немного отличаться и будут как выше)
Вместе с iSpy в docker-compose
устанавливается DeepStack AI (микросервис, который будет детектить объекты и людей на наших записях)
Не забудьте поправить в файле домен и логин/пароль от Basic Auth авторизации. Про генерацию хэша пароля я писал тут.
Сначала запускаете Traefik, потом iSpy
Настройка iSpy и камер
У iSpy почти к любой чепухе есть хорошая документация. Я настоятельно рекомендую не брезгать и почаще нажимать знак вопроса сверху модалок. Я ленился и потерял из-за этого много времени, тыкая наугад
При входе в iSpy выбираем English. Переводы ужасно кривые уровня Log = Бревно