# 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 rtmp://[USERNAME]:[PASSWORD]@CAMERAIPADDRESS:PORT/bcs/channel0_main.bcs?token=sdasdase&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. rtsp://[USERNAME]:[PASSWORD]@CAMERAIPADDRESS:PORT