├── .env ├── Dockerfile ├── README.md ├── config-volumes ├── entrypoint.d │ ├── 10-example.sh │ └── readme.txt ├── etc │ ├── mediaserver.conf │ └── readme.txt ├── nx_ini │ ├── nx_vms_server.ini │ └── readme.txt ├── recordings │ └── readme.txt ├── tmp │ └── readme.txt └── var │ └── readme.txt ├── docker-compose.yaml ├── entrypoint.sh └── extentions ├── README.md └── nxai-plugin ├── Dockerfile └── README.md /.env: -------------------------------------------------------------------------------- 1 | # Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | # Docker compose environment variables. 3 | # 4 | # This variable is reserved for Nx customers and must not be changed for opensource builds. 5 | # For more information, please consult Nx support (support.networkoptix.com) 6 | COMPANY=networkoptix-metavms 7 | # 8 | # See https://meta.nxvms.com/download/releases/linux 9 | MEDIASERVER_VERSION=6.0.1.39873 10 | MEDIASERVER_URL=https://updates.networkoptix.com/metavms/39873/linux/metavms-server-6.0.1.39873-linux_x64.deb 11 | # 12 | # Nx VMS port mapping 13 | PORTS=7001:7001 14 | # 15 | # Data and configuration files volumes host path 16 | VOLUMES_PATH=/srv/mediaserver 17 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ## Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | ARG BASE_IMAGE=ubuntu:22.04 4 | FROM $BASE_IMAGE 5 | LABEL maintainer="Network Optix " 6 | 7 | # VMS Server debian package file or URL. 8 | ARG MEDIASERVER_DEB=https://updates.networkoptix.com/metavms/39873/linux/metavms-server-6.0.1.39873-linux_x64.deb 9 | 10 | # VMS Server user and directory name. 11 | ARG COMPANY="networkoptix-metavms" 12 | # Also export as environment variable to use at entrypoint. 13 | ENV COMPANY=${COMPANY} 14 | 15 | # Disable EULA dialogs and confirmation prompts in installers. 16 | ENV DEBIAN_FRONTEND=noninteractive 17 | 18 | # Install packages. 19 | RUN apt-get update && \ 20 | apt-get install -y \ 21 | apt-utils \ 22 | binutils \ 23 | curl \ 24 | jq && \ 25 | curl -O "${MEDIASERVER_DEB}" && \ 26 | apt-get install -y ./"${MEDIASERVER_DEB##*/}" && \ 27 | chattr -i /lib/systemd/systemd-coredump && \ 28 | rm "${MEDIASERVER_DEB##*/}" && \ 29 | apt-get clean && \ 30 | rm -rf /var/lib/apt/lists/* 31 | 32 | # Fix permissions. 33 | RUN chown ${COMPANY}: /opt/${COMPANY}/mediaserver/var/ 34 | 35 | RUN echo "currentOsVariantOverride=docker" >> /opt/${COMPANY}/mediaserver/etc/mediaserver.conf 36 | 37 | ADD entrypoint.sh /opt/mediaserver/ 38 | 39 | USER ${COMPANY} 40 | WORKDIR /home/${COMPANY} 41 | 42 | # Runs the media server on container start unless argument(s) specified. 43 | ENTRYPOINT ["/opt/mediaserver/entrypoint.sh"] 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 4 | 5 | 6 | ## Abstract ## 7 | 8 | Starting from the build 28389 (~ 4.0 beta-2), the Nx Server allows its debian package to be 9 | installed directly from a Dockerfile (lower versions are incompatible). Without systemd 10 | in the container the server may not handle crashes or restarts properly. It is recommended 11 | to run containers with --restart options. 12 | 13 | ## Restrictions ## 14 | 15 | * Only Debian Linux container is supported. 16 | * Linux hosts are supported. 17 | * MacOS hosts can be used but with limitations. 18 | * Windows hosts not tested 19 | 20 | ## Nx Server Docker container support conditions ## 21 | 22 | * Nx Server Docker container is an experimental feature. 23 | * It has not been comprehensively tested. 24 | * It is not recommended for critical systems. 25 | * Please, test carefully that all features work in your environment before using it. 26 | * We do not guarantee support, but we need your feedback and will try to address discovered 27 | issues in future releases. 28 | * Any support provided implies knowledge and skills of Docker when using this feature. 29 | 30 | ## Usage ## 31 | 32 | The latest image is available at [Nx registry](https://harbor.nxvms.dev/harbor/projects/3/repositories/metavms-server/artifacts-tab?publicAndNotLogged=yes). 33 | 34 | ## Building ## 35 | 36 | Building an image from current directory 37 | 38 | Recommended way is to use [docker-compose >= 1.25](https://docs.docker.com/compose/) utility. 39 | Follow [Installation guide](https://docs.docker.com/compose/install/). 40 | 41 | 42 | Review [build environment configuration](.env). Build image: 43 | 44 | ```bash 45 | docker-compose build 46 | ``` 47 | 48 | ## Running ## 49 | 50 | If a host is already running a VMS Server in the traditional way, port setting have to be different 51 | for the container Server and the Server on a host. Also, make sure you don't have too many Docker 52 | images filing up the space. Even if the Desktop Client sees that the mounted directory has space 53 | but is filled with other things, it may claim the storage location inaccessible and show "Invalid 54 | Storage" on the Storage Management tab in Server Settings. 55 | 56 | The docker-compose.yaml file will give you one storage location for video. If you want more storage 57 | locations, you will need to mount additional volumes to the container. Note that these need to be 58 | separate volumes on the host as well. 59 | 60 | Volumes are required to configure the Sever and save its state data. 61 | 62 | ### Volumes description: ### 63 | 64 | | Default source mount location | Description | Container mount point | 65 | | ----------------------------- | ------------------------- | --------------------------------- | 66 | | /srv/mediaserver/entrypoind.d | User init scripts | /opt/mediaserver/entrypoint.d | 67 | | /srv/mediaserver/etc | Configuration | /opt/networkoptix/mediaserver/etc | 68 | | /srv/mediaserver/nx_ini | Additional configuration | /home/${COMPANY}/.config/nx_ini | 69 | | /srv/mediaserver/recordings | Video storage | /recordings | 70 | | /srv/mediaserver/var | State and logs | /opt/networkoptix/mediaserver/var | 71 | | /srv/mediaserver/tmp | Unix socket and tmp files | /opt/networkoptix/mediaserver/tmp | 72 | 73 | Note that the video storage location, if modified, needs to be short. Changing the name 74 | is fine but changing the path may result in no valid storage location. 75 | 76 | The default location of the volumes is specified at [environment file](.env). 77 | 78 | ```bash 79 | # Run as root or use sudo. 80 | # Create /srv/mediaserver directory. 81 | install -d /srv/mediaserver 82 | 83 | # Copy the example volumes to /srv/mediaserver/ directory and set permissions - the directory has 84 | # to be owned by a VMS Server user with UID & GID equal to 999. 85 | cp -a config-volumes/* /srv/mediaserver 86 | chown 999:999 -R /srv/mediaserver 87 | 88 | # Review configurations and scripts - amend according to your needs. 89 | 90 | # Run containers in the daemon mode. 91 | docker-compose up -d 92 | ``` 93 | 94 | # Clean up. 95 | ```bash 96 | # Stop services and remove containers. 97 | docker-compose down 98 | 99 | # Remove state volumes. 100 | rm -rf /srv/mediaserver 101 | ``` 102 | 103 | ### Notes about storage ### 104 | Note that the media server still retains it's limitations regarding valid storage locations. 105 | Here is the current (as of May 28, 2020) list of valid filesystem types supported: 106 | * vfat 107 | * ecryptfs 108 | * fuseblk //NTFS 109 | * fuse 110 | * fusectl 111 | * xfs 112 | * ext3 113 | * ext2 114 | * ext4 115 | * exfat 116 | * rootfs 117 | * nfs 118 | * nfs4 119 | * nfsd 120 | * cifs 121 | * fuse.osxfs 122 | 123 | If you want to use a file system type from outside this list, know that it is use at your own risk 124 | and is not supported. We do however, have an option in advanced settings that can bypass our 125 | requirements. 126 | 127 | 1. Sign into the web client (usuall localhost:7001). 128 | 2. Go to /static/index.html#/advanced 129 | 3. There should be a field with this label: 130 | "Additional file system types to consider while deciding if a given partition is suitable to be a server storage" 131 | 4. Input the file system name and click save at the bottom. 132 | 133 | 134 | ## Useful commands ## 135 | 136 | Entering bash inside named container: 137 | ```bash 138 | sudo docker exec -i -t mediaserver /bin/bash #< by name 139 | ``` 140 | 141 | Reading system logs: 142 | 143 | ```bash 144 | sudo docker logs mediaserver 145 | ``` 146 | 147 | Reading journalctl: 148 | 149 | ```bash 150 | sudo docker exec -i -t mediaserver journalctl -u networkoptix-mediaserver 151 | ``` 152 | 153 | Stopping the container and resetting all the data: 154 | 155 | ``` 156 | sudo docker stop mediaserver && sudo docker rm mediaserver 157 | ``` 158 | 159 | ## Networking ## 160 | 161 | The network setting of Docker container can influence Nx Server availability. Here is summary of 162 | the network types you can use, and the results you can expect. 163 | 164 | ### Host (recommended) ### 165 | Licenses in this mode will always have the MAC of the host and the MAC can't be modified 166 | in "host" mode. 167 | 168 | #### Pros: #### 169 | * No need to do any network configuration 170 | * Auto-discovery works 171 | * Other systems on the network can see your server 172 | 173 | #### Cons: #### 174 | * Does not work on MacOS 175 | * Multiple servers on the same host will have the same MAC address and will appear as "duplicates" if you try to merge them 176 | 177 | ### Bridge ### 178 | #### Pros: #### 179 | * No need to do any network configuration 180 | * Works on MacOS 181 | 182 | #### Cons: #### 183 | * The MAC address can change if you start up Servers in a different order invalidating the 184 | license. 185 | * Must connect to server manually in the desktop client 186 | * Auto-discovery does not work. Cameras need to be added manually. 187 | 188 | ### Macvlan ### 189 | For details see: https://docs.docker.com/v17.12/network/macvlan/ 190 | 191 | #### Pros: #### 192 | * Auto-discovery works 193 | * You can run multiple servers on your host 194 | 195 | #### Cons: #### 196 | * Requires complicated configuration, including changes in DHCP server in your network and 197 | creating docker network. 198 | (See for details: https://docs.docker.com/v17.09/engine/userguide/networking/get-started-macvlan/). 199 | * Requires your network adapter to be in "Promiscuous" mode which can be a security risk. 200 | (Details here: https://searchsecurity.techtarget.com/definition/promiscuous-mode) 201 | * IP changes will invalidate the license unless you specify a MAC address when running the 202 | container. 203 | 204 | ## Licenses considerations ## 205 | 206 | Licenses are tied to Hardware ID (HWID). Changing one identifier (including MAC) causes the HWID to 207 | change. That's why HWID can be accidentally invalidated by modifications to the Docker container. 208 | 209 | For more explanations about HWID see: 210 | https://support.networkoptix.com/hc/en-us/articles/360036141153-HWID-changed-and-license-is-no-longer-recording 211 | 212 | There are several ways that changes to the network settings can cause the HWID to change: 213 | 214 | * Switching container network mode from host to bridge; 215 | * Starting up containers in bridged mode causes them to choose sequential MAC addresses. If 216 | containers are started in a different order after license keys are ssigned, their 217 | MAC address will change, also changing the HWID, and invalidating the licenses; 218 | * Deliberately changing the MAC address of a container; 219 | * Changes to internal IP of the container can cause the MAC address to change as well; 220 | * Moving the Docker image to another host. 221 | 222 | This can be solved by specifying MAC address in the docker run command or in docker-compose.yaml file. For example, 223 | ``` 224 | sudo docker run -d --mac-address="8a:ca:58:b9:e9:51" --network bridge --name mediaserver1 --tmpfs /run --tmpfs /run/lock -v /sys/fs/cgroup:/sys/fs/cgroup:ro -t mediaserver 225 | ``` 226 | Actions that won't invalidate a license: 227 | 228 | * In-client update; 229 | * Building a new Docker image with a new Server version but same MAC address and DB on the same host; 230 | * Stopping and starting the container; 231 | * Removing the container and starting it again from the same image and DB on the same host. 232 | 233 | Note: If your license has been invalidated, it can be reactivated up to 3 times by contacting 234 | support. For more details see https://support.networkoptix.com/hc/en-us/articles/360036141153-HWID-changed-and-license-is-no-longer-recording 235 | 236 | ## Software Updates ## 237 | 238 | Both in-client and manual image updates will invalidate licenses. 239 | Run: 240 | ```bash 241 | docker-compose down 242 | 243 | # Update the version in the .env file. 244 | 245 | docker-compose build 246 | docker-compose up -d 247 | ``` 248 | 249 | ## MacOS support ## 250 | 251 | With this Docker container you can run a container on MacOS. It does come with some limitations. 252 | 253 | * "Host" networking will not work as the MacOS puts the Docker container inside a VM, not 254 | directly on the main OS. See https://docs.docker.com/docker-for-mac/networking/ for details. 255 | * "Bridge" is probably the best option but for the reasons above requires some manual 256 | addition of servers and cameras 257 | -------------------------------------------------------------------------------- /config-volumes/entrypoint.d/10-example.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 4 | 5 | set -o errexit 6 | set -o pipefail 7 | 8 | echo "Example entrypoint script ${0}" 9 | -------------------------------------------------------------------------------- /config-volumes/entrypoint.d/readme.txt: -------------------------------------------------------------------------------- 1 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | Entrypoint user init scripts. 4 | -------------------------------------------------------------------------------- /config-volumes/etc/mediaserver.conf: -------------------------------------------------------------------------------- 1 | # Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | [General] 3 | cameraSettingsOptimization=true 4 | lowPriorityPassword=1 5 | appserverPassword=admin 6 | port=7001 7 | -------------------------------------------------------------------------------- /config-volumes/etc/readme.txt: -------------------------------------------------------------------------------- 1 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | Mediaserver configuration. 4 | -------------------------------------------------------------------------------- /config-volumes/nx_ini/nx_vms_server.ini: -------------------------------------------------------------------------------- 1 | # Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | # Enables info-level logging of malloc statistics. Only Linux is supported. Default: false 4 | #enableMallocStatisticsLogging=false 5 | 6 | # Sets log level to Verbose for AutoRequestForwarder. Default: false 7 | #verboseAutoRequestForwarder=false 8 | 9 | # Default: false 10 | #ignoreApiModuleInformationInAutoRequestForwarder=false 11 | 12 | # Enables /api/debug RestAPI method. Default: false 13 | #enableApiDebug=false 14 | 15 | # Force Lite Client for this server. Default: false 16 | #forceLiteClient=false 17 | 18 | # Lower bound of Live Stream Cache size for primary stream, milliseconds. 19 | # 20 | # Live Stream Cache allows Desktop Client's Right Panel receive adequate thumbnails of 21 | # the detected Objects and Events. It is needed because frames in the video archive are 22 | # inaccessible for ~1 minute since the moment of recording. Beware that increasing the 23 | # Live Stream Cache size increases the RAM usage. Default: 67000 24 | # 25 | #liveStreamCacheForPrimaryStreamMinSizeMs=67000 26 | 27 | # Upper bound of Live Stream Cache size for primary stream, milliseconds. 28 | # 29 | # Live Stream Cache allows Desktop Client's Right Panel receive adequate thumbnails of 30 | # the detected Objects and Events. It is needed because frames in the video archive are 31 | # inaccessible for ~1 minute since the moment of recording. Beware that increasing the 32 | # Live Stream Cache size increases the RAM usage. Default: 100000 33 | # 34 | #liveStreamCacheForPrimaryStreamMaxSizeMs=100000 35 | 36 | # Lower bound of Live Stream Cache size for secondary stream, milliseconds. 37 | # 38 | # Live Stream Cache allows Desktop Client's Right Panel receive adequate thumbnails of 39 | # the detected Objects and Events. It is needed because frames in the video archive are 40 | # inaccessible for ~1 minute since the moment of recording. Beware that increasing the 41 | # Live Stream Cache size increases the RAM usage. Default: 67000 42 | # 43 | #liveStreamCacheForSecondaryStreamMinSizeMs=67000 44 | 45 | # Upper bound of Live Stream Cache size for secondary stream, milliseconds. 46 | # 47 | # Live Stream Cache allows Desktop Client's Right Panel receive adequate thumbnails of 48 | # the detected Objects and Events. It is needed because frames in the video archive are 49 | # inaccessible for ~1 minute since the moment of recording. Beware that increasing the 50 | # Live Stream Cache size increases the RAM usage. Default: 100000 51 | # 52 | #liveStreamCacheForSecondaryStreamMaxSizeMs=100000 53 | 54 | # After this amount of time (in seconds) since a best shot has been put in the cache 55 | # the best shot is deleted and is no more available in the cache. Default: 60 56 | # 57 | #objectTrackBestShotCacheImageLifetimeS=60 58 | 59 | # After this delay server will start update installation automatically if detects that 60 | # it was supposed to install the update. Default: 60000 61 | # 62 | #autoUpdateInstallationDelayMs=60000 63 | 64 | # Skip update files signature check. Default: false 65 | #skipUpdateFilesVerification=false 66 | 67 | # Disables media files integrity check. Default: false 68 | #disableArchiveIntegrityWatcher=false 69 | 70 | # Timeout to wait on server stop before crash. Default: 100 71 | #stopTimeoutS=100 72 | 73 | # Sends push notifications on popup actions. Default: false 74 | #pushNotifyOnPopup=false 75 | 76 | # UTF icon code for common messages, 0 means no icon. Default: 0 77 | #pushNotifyCommonUtfIcon=0 78 | 79 | # Overrides imageUrl for all push notifications. Default: "" 80 | #pushNotifyImageUrl="" 81 | 82 | # Override imageUrl query options. Default: "" 83 | #pushNotifyImageUrlOptions="" 84 | 85 | # Default: "{\"priority\": \"high\", \"mutable_content\": true}" 86 | #pushNotifyOptions="{\"priority\": \"high\", \"mutable_content\": true}" 87 | 88 | # How often print to log CPU/RAM usage. The value in seconds. Default: 1800 89 | #systemUsageDumpTimeoutS=1800 90 | 91 | # Enable metrics subsystem and /{api/ec2}/metrics/ handlers Default: true 92 | #enableVmsMetrics=true 93 | 94 | # How often to check wheter a license is expired. The default value is the maximum allowed value. Default: 60000 95 | #checkLicenseIntervalMs=60000 96 | 97 | # How often to perform the server's public IP address discovery Default: 120000 98 | #publicIpDiscoveryIntervalMs=120000 99 | 100 | -------------------------------------------------------------------------------- /config-volumes/nx_ini/readme.txt: -------------------------------------------------------------------------------- 1 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | VMS Server ini files. 4 | -------------------------------------------------------------------------------- /config-volumes/recordings/readme.txt: -------------------------------------------------------------------------------- 1 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | VMS Server video files. 4 | -------------------------------------------------------------------------------- /config-volumes/tmp/readme.txt: -------------------------------------------------------------------------------- 1 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | Temp directory volume for all containers. 4 | -------------------------------------------------------------------------------- /config-volumes/var/readme.txt: -------------------------------------------------------------------------------- 1 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | VMS Server logs and state files. 4 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | ## Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | version: "3" 4 | services: 5 | mediaserver: 6 | build: 7 | context: . 8 | args: 9 | COMPANY: ${COMPANY} 10 | MEDIASERVER_DEB: ${MEDIASERVER_URL} 11 | image: metavms-server:${MEDIASERVER_VERSION} 12 | user: ${COMPANY} 13 | ports: 14 | - ${PORTS} 15 | # To use the host network mode, comment out the ports above and uncomment the line below. 16 | # network_mode: "host" 17 | volumes: 18 | - ${VOLUMES_PATH}/etc:/opt/${COMPANY}/mediaserver/etc 19 | - ${VOLUMES_PATH}/var:/opt/${COMPANY}/mediaserver/var 20 | - ${VOLUMES_PATH}/nx_ini:/home/${COMPANY}/.config/nx_ini 21 | - ${VOLUMES_PATH}/entrypoint.d:/opt/mediaserver/entrypoint.d 22 | - ${VOLUMES_PATH}/recordings:/recordings 23 | - ${VOLUMES_PATH}/tmp:/tmp 24 | 25 | mediaserver-root-tool: 26 | image: metavms-server:${MEDIASERVER_VERSION} 27 | user: root 28 | # root-tool-bin is for versions < 4.3, root-tool is for versions >= 4.3. 29 | command: ["/opt/${COMPANY}/mediaserver/bin/root-tool"] 30 | volumes: 31 | - ${VOLUMES_PATH}/tmp:/tmp 32 | - ${VOLUMES_PATH}/recordings:/recordings 33 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 4 | 5 | set -o errexit 6 | set -o pipefail 7 | # set -o xtrace # Uncomment this line for debugging purposes. 8 | 9 | declare -r ENTRYPOINT_SCRIPTS_DIR="/opt/mediaserver/entrypoint.d" 10 | 11 | # Run user-supplied initialization scripts. 12 | if [[ -d "${ENTRYPOINT_SCRIPTS_DIR}" ]]; then 13 | echo "Loading user's custom *.sh,*.py scripts from ${ENTRYPOINT_SCRIPTS_DIR}" 14 | find "${ENTRYPOINT_SCRIPTS_DIR}" -type f -executable -regex ".*\.\(sh\|py\)" | sort | \ 15 | { 16 | while read script; do 17 | if ! "${script}"; then 18 | echo "Failed to execute ${script}" >&2 19 | return 1 20 | fi 21 | done 22 | } 23 | fi 24 | 25 | # No arguments provided, run the VMS Server. 26 | if [[ $# -lt 1 ]]; then 27 | if [[ -x /opt/${COMPANY}/mediaserver/bin/mediaserver-bin ]]; then 28 | echo "Launching mediaserver-bin for version < 4.3" 29 | exec "/opt/${COMPANY}/mediaserver/bin/mediaserver-bin" -e 30 | else 31 | echo "Launching mediaserver" 32 | exec "/opt/${COMPANY}/mediaserver/bin/mediaserver" -e 33 | fi 34 | fi 35 | 36 | # Argument(s) supplied, assume the user wants to run a different process, for example a `bash` 37 | # shell to explore the image. 38 | exec "$@" 39 | -------------------------------------------------------------------------------- /extentions/README.md: -------------------------------------------------------------------------------- 1 | ## Extending Docker Images for Additional Features ## 2 | 3 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 4 | 5 | This directory contains Dockerfiles enhanced with additional functionality. 6 | -------------------------------------------------------------------------------- /extentions/nxai-plugin/Dockerfile: -------------------------------------------------------------------------------- 1 | ## Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 2 | 3 | ARG BASE_IMAGE=harbor.nxvms.dev/nxvms/metavms-server 4 | 5 | FROM $BASE_IMAGE 6 | 7 | ENV PLUGIN_DIR=/opt/networkoptix-metavms/mediaserver/bin/plugins/nxai_plugin 8 | ENV VER=v4-1 9 | 10 | # Swithch user to make changes 11 | USER root 12 | 13 | RUN mkdir -p ${PLUGIN_DIR} && \ 14 | curl https://artifactory.nxvms.dev/artifactory/nxai_open/NXAIPlugin/${VER}/libnxai_plugin.so \ 15 | -o ${PLUGIN_DIR}/libnxai_plugin.so && \ 16 | chmod +x -R ${PLUGIN_DIR} 17 | 18 | # Switch to application user 19 | USER ${COMPANY} 20 | -------------------------------------------------------------------------------- /extentions/nxai-plugin/README.md: -------------------------------------------------------------------------------- 1 | ## Nx AI Plugin ## 2 | 3 | // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/ 4 | 5 | Dockerfile to build an image with [Nx AI Plugin](with https://nx.docs.scailable.net/nx-ai-manager/2.-install-nx-ai-plugin) 6 | --------------------------------------------------------------------------------