scrypted/templates/docker-compose.yml.j2
author Luke Hoersten <luke@hoersten.org>
Mon, 29 Jul 2024 12:41:57 -0500
changeset 237 c6c11084c802
parent 235 f88bb54f63bd
permissions -rw-r--r--
Cleaned up always-changed status tasks.

# The Scrypted docker-compose.yml file typically resides at:
# ~/.scrypted/docker-compose.yml


# Scrypted NVR Storage (Optional Network Volume: Part 1 of 3)
# Example volumes SMB (CIFS) and NFS.
# Uncomment only one.
# volumes:
#     nvr:
#         driver_opts:
#             type: cifs
#             o: username=[username],password=[password],vers=3.0,file_mode=0777,dir_mode=0777
#             device: //[ip-address]/[path-to-directory]
#     nvr:
#         driver_opts:
#             type: "nfs"
#             o: "addr=[ip-address],nolock,soft,rw"
#             device: ":[path-to-directory]"

services:
    scrypted:
        environment:
            # Scrypted NVR Storage (Part 2 of 3)

            # Uncomment the next line to configure the NVR plugin to store recordings
            # use the /nvr directory within the container. This can also be configured
            # within the plugin manually.
            # The drive or network share will ALSO need to be configured in the volumes
            # section below.
            # - SCRYPTED_NVR_VOLUME=/nvr

            - SCRYPTED_WEBHOOK_UPDATE_AUTHORIZATION=Bearer {{scrypted_auth_key}}
            - SCRYPTED_WEBHOOK_UPDATE=http://localhost:{{scrypted_auto_update_port}}/v1/update

            # Avahi can be used for network discovery by passing in the host daemon
            # or running the daemon inside the container. Choose one or the other.
            # Uncomment next line to run avahi-daemon inside the container.
            # See volumes and security_opt section below to use the host daemon.
            # - SCRYPTED_DOCKER_AVAHI=true

            # NVIDIA (Part 1 of 4)
            # - NVIDIA_VISIBLE_DEVICES=all
            # - NVIDIA_DRIVER_CAPABILITIES=all

        # NVIDIA (Part 2 of 4)
        # runtime: nvidia

        # NVIDIA (Part 3 of 4) - Use NVIDIA image, and remove subsequent default image.
        # image: ghcr.io/koush/scrypted:nvidia
        image: ghcr.io/koush/scrypted

        volumes:
            # NVIDIA (Part 4 of 4)
            # - /etc/OpenCL/vendors/nvidia.icd:/etc/OpenCL/vendors/nvidia.icd

            # Scrypted NVR Storage (Part 3 of 3)

            # Modify to add the additional volume for Scrypted NVR.
            # The following example would mount the /mnt/sda/video path on the host
            # to the /nvr path inside the docker container.
            # - /mnt/media/video:/nvr

            # Or use a network mount from one of the CIFS/NFS examples at the top of this file.
            # - type: volume
            #   source: nvr
            #   target: /nvr
            #   volume:
            #     nocopy: true

            # Uncomment the following lines to use Avahi daemon from the host.
            # Ensure Avahi is running on the host machine:
            # It can be installed with: sudo apt-get install avahi-daemon
            # This is not compatible with running avahi inside the container (see above).
            # Also, uncomment the lines under security_opt
            - /var/run/dbus:/var/run/dbus
            - /var/run/avahi-daemon/socket:/var/run/avahi-daemon/socket

            # Default volume for the Scrypted database. Typically should not be changed.
            - {{scrypted_dir}}/volume:/server/volume
        # Uncomment the following lines to use Avahi daemon from the host
        # Without this, AppArmor will block the container's attempt to talk to Avahi via dbus
        security_opt:
            - apparmor:unconfined
        devices: [
            # uncomment the common systems devices to pass
            # them through to docker.

            # all usb devices, such as coral tpu
            # "/dev/bus/usb:/dev/bus/usb",

            # hardware accelerated video decoding, opencl, etc.
            # "/dev/dri:/dev/dri",

            # uncomment below as necessary.
            # zwave usb serial device

            # "/dev/ttyACM0:/dev/ttyACM0",

            # coral PCI devices
            # "/dev/apex_0:/dev/apex_0",
            # "/dev/apex_1:/dev/apex_1",
        ]

        container_name: scrypted
        restart: unless-stopped
        network_mode: host

        # logging is noisy and will unnecessarily wear on flash storage.
        # scrypted has per device in memory logging that is preferred.
        # enable the log file if enhanced debugging is necessary.
        logging:
            driver: "none"
            # driver: "json-file"
            # options:
            #     max-size: "10m"
            #     max-file: "10"
        labels:
            - "com.centurylinklabs.watchtower.scope=scrypted"

    # watchtower manages updates for Scrypted.
    watchtower:
        environment:
            - WATCHTOWER_HTTP_API_TOKEN={{scrypted_auth_key}}
            - WATCHTOWER_HTTP_API_UPDATE=true
            - WATCHTOWER_SCOPE=scrypted
            # remove the following line to never allow docker to auto update.
            # this is not recommended.
            - WATCHTOWER_HTTP_API_PERIODIC_POLLS=true
        image: containrrr/watchtower
        container_name: scrypted-watchtower
        restart: unless-stopped
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        labels:
            - "com.centurylinklabs.watchtower.scope=scrypted"
        ports:
            # The auto update port 10444 can be configured
            # Must match the port in the auto update url above.
            - {{scrypted_auto_update_port}}:8080
        # check for updates once an hour (interval is in seconds)
        command: --interval 3600 --cleanup --scope scrypted