You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.1 KiB

WIP

Docker-compose was generated by the follow script below. You should install shinobi via the script below. The docker-compose.yml shown below is just an example and may not work for you.

ShinobiInstall.sh

#!/bin/bash
if ! [ -x "$(command -v docker)" ]; then
    echo "You are missing Docker"
    echo "docker not found!"
    echo "Get it here : https://docs.docker.com/engine/install/"
    exit 1
else
    docker -v
fi
if ! [ -x "$(command -v docker-compose)" ]; then
    echo "You are missing Docker Compose"
    echo "docker-compose not found!"
    echo "Get it here : https://docs.docker.com/compose/install/"
    exit 1
else
    docker-compose -v
fi

PLUGIN_LIST=''
PLUGIN_YMLS=();

SSL_TOGGLE="$(echo "$1" | awk '{print tolower($0)}')"
if [ "$SSL_TOGGLE" = "true" ]; then
    SSL_TOGGLE='true'
else
    SSL_TOGGLE='false'
fi

echo "Shinobi - Do you want to Install Object Detection? (TensorFlow.js)"
echo "(y)es or (N)o"
read -r TENSORFLOW_PLUGIN_DOCKER_ADDON_AGREE
TENSORFLOW_PLUGIN_DOCKER_ADDON_AGREE="$(echo "$TENSORFLOW_PLUGIN_DOCKER_ADDON_AGREE" | awk '{print tolower($0)}')"
if [ "$TENSORFLOW_PLUGIN_DOCKER_ADDON_AGREE" = "y" ]; then
    TENSORFLOW_PLUGIN_KEY=$(head -c 1024 < /dev/urandom | sha256sum | awk '{print substr($1,1,29)}')
    PLUGIN_YMLS+=('"Tensorflow":"'$TENSORFLOW_PLUGIN_KEY'"')
    PLUGIN_LIST+=$(cat <<-END

    shinobiplugintensorflow:
        image: shinobisystems/shinobi-tensorflow:latest
        container_name: shinobi-tensorflow
        environment:
          - PLUGIN_KEY=$TENSORFLOW_PLUGIN_KEY
          - PLUGIN_HOST=Shinobi
        volumes:
          - $HOME/Shinobi/docker-plugins/tensorflow:/config
        restart: unless-stopped
END
    )
fi

# Join Plugin Keys
PLUGIN_YMLS=$(printf ",%s" "${PLUGIN_YMLS[@]}")
PLUGIN_YMLS=${PLUGIN_YMLS:1}
PLUGIN_YMLS="{$PLUGIN_YMLS}"
cat > docker-compose.yml <<- EOM
version: "3"
services:
    shinobi:
        image: shinobisystems/shinobi:dev
        container_name: Shinobi
        environment:
           - PLUGIN_KEYS=$PLUGIN_YMLS
#          - SSL_ENABLED=$SSL_TOGGLE
        volumes:
           - ./config:/config
           - ./customAutoLoad:/home/Shinobi/libs/customAutoLoad
           - ./database:/var/lib/mysql
           - ./videos:/home/Shinobi/videos
           - ./plugins:/home/Shinobi/plugins
           - /dev/shm/Shinobi/streams:/dev/shm/streams
           - /etc/localtime:/etc/localtime:ro
#        ports:
#           - 8080:8080
        restart: unless-stopped

$PLUGIN_LIST

networks:
  default:
    external:
      name: caddy_net
EOM
cat docker-compose.yml
docker-compose up -d
# rm docker-compose.yml

Minimum File Structure

/home/
└── ~/
    └── docker/
        └── shinobi/
            ├── docker-compose.yml

Caddyfile

shinobi.yourdomain.com {
    reverse_proxy shinobi:8080
}

docker-compose.yml

Notes: No tensorflow option. Use script above if you want that feature.

version: "3"
services:
    shinobi:
        image: shinobisystems/shinobi:dev
        container_name: shinobi
        volumes:
           - ./config:/config
           - ./customAutoLoad:/home/Shinobi/libs/customAutoLoad
           - ./database:/var/lib/mysql
           - ./videos:/home/Shinobi/videos
           - ./plugins:/home/Shinobi/plugins
           - /dev/shm/Shinobi/streams:/dev/shm/streams
           - /etc/localtime:/etc/localtime:ro
        restart: unless-stopped
        ports:
           - "521:521"

networks:
  default:
    external:
      name: caddy_net

Gotchas and Whys

Why did I do ports 521:521? Well I wanted to enable FTP inside the docker with port 521 open (see below). After that I port forwarded on my router to open 521 to my docker host machine.

shinobi/config/conf.json

Here I added the following lines to conf.json to enable FTP.

   "dropInEventServer": true,
   "ftpServer": true,
   "ftpServerPort": 521,
   "dropInEventsDir": "/dev/shm/streams/dropInEvents",
   "thisIsDocker": true,

Camera specific notes

You may need to port forward RTSP or RTMP ports for your cameras.

Reolink Specific (RLC-410-5MP) Gotchas

RTMP Main Stream (High Bit Rate 1024Kbps ~ 8192Kbps)

rtmp://[USERNAME]:[PASSWORD]@CAMERAIPADDRESS:PORT/bcs/channel0_main.bcs?token=sdasdasc&channel=0&stream=0&user=[USERNAME]&password=[PASSWORD] Token value entered doesn't matter just need to put something. Only lines before /bcs and after user= need to be changed.

RTMP Sub Stream (Lower Bit Rate 64Kbps ~ 512Kbps)

rtmp://[USERNAME]:[PASSWORD]@CAMERAIPADDRESS:PORT/bcs/channel0_sub.bcs?token=sdasdasc&channel=0&stream=0&user=[USERNAME]&password=[PASSWORD]

You can use the main stream for recording while using the sub stream for streaming both at the same time in shinobi. Reference: https://hub.shinobi.video/articles/view/w8azEAI2peYeNul

RMTP FTP Motion Detection

You can also designate motion detection to the cameras instead of shinobi to reduce load. Reference: https://hub.shinobi.video/articles/view/LyCI3yQsUTouSAJ

ONE BIG GOTCHA... Do not use firmware v3.0.0.65_2007100 because FTP does not work on that firmware. Use firmware v2.0.0.647_20031401 (RLC-410-5MP_647_20031401.zip in this repo) which does work.