Project One-Click: All-in-One Installations of Docker Extensions and CDVR Custom Channels

Change these environment variables

CHANNELS_DVR2_HOST=another-server	# change it to CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=8089	# change it to CHANNELS_DVR2_HOST=
CHANNELS_DVR_HOST=local-server	# change it to CHANNELS_DVR_HOST=IP ADDRESS OF YOUR CHANNELS DVR SERVER HERE
DOMAIN=192.168.7.109:8089	# change it to DOMAIN=local

Add this line
PORTAINER_HOST=IP ADDRESS OF YOUR CHANNELS DVR SERVER HERE

Anything else I am missing before I deploy the stack, this time I am saving these docker compose on a notepad.

version: '3.9'
services:
  olivetin: # This docker-compose typically requires no editing. Use the Environment variables section of Portainer to set your values.
    # 2025.02.21
    # GitHub home for this project: https://github.com/bnhf/OliveTin.
    # Docker container home for this project with setup instructions: https://hub.docker.com/repository/docker/bnhf/olivetin.
    image: bnhf/olivetin:${TAG} # Add the tag like latest or test to the environment variables below.
    container_name: olivetin
    hostname: olivetin
    dns_search: ${DOMAIN} # For Tailscale users using Magic DNS, add your Tailnet (tailxxxxx.ts.net) to use hostnames for remote nodes, otherwise use your local domain name.
    ports:
      - ${HOST_PORT}:1337
    environment:
      - CHANNELS_DVR=${CHANNELS_DVR_HOST}:${CHANNELS_DVR_PORT} # Add your Channels DVR server in the form CHANNELS_DVR_HOST=<hostname or ip> and CHANNELS_DVR_PORT=<port>.
      #- CHANNELS_DVR_ALTERNATES=${CHANNELS_DVR2_HOST}:${CHANNELS_DVR2_PORT} # Space separated list of alternate Channels DVR servers to choose from in the form hostname:port or ip:port.
      - CHANNELS_CLIENTS=${CHANNELS_CLIENTS} # Space separated list of Channels DVR clients you'd like notifications sent to in the form hostname or IP.
      - ALERT_SMTP_SERVER=${ALERT_SMTP_SERVER} # SMTP server to use for sending alert e-mails. smtp.gmail.com:587 for example.
      - ALERT_EMAIL_FROM=${ALERT_EMAIL_FROM} # Sender address for alert e-mails.
      - ALERT_EMAIL_PASS=${ALERT_EMAIL_PASS} # SMTP "app" password established through GMail or Yahoo Mail. Do not use your everyday e-mail address.
      - ALERT_EMAIL_TO=${ALERT_EMAIL_TO} # Recipient address for alert e-mails.
      - UPDATE_YAMLS=${UPDATE_YAMLS} # Set this to true to update config.yaml.
      - UPDATE_SCRIPTS=${UPDATE_SCRIPTS} # Set this to true to update all included scripts.
      - TZ=${TZ} # Add your local timezone in standard linux format. E.G. US/Eastern, US/Central, US/Mountain, US/Pacific, etc.
      - PORTAINER_TOKEN=${PORTAINER_TOKEN} # Generate via <username> dropdown (upper right of WebUI), "My account", API tokens.
      - PORTAINER_HOST=${PORTAINER_HOST} # Hostname or IP of the Docker host you're running Portainer on.
      - PORTAINER_PORT=${PORTAINER_PORT} # https port you're running Portainer on. 9443 is the default.
      - PORTAINER_ENV=3 # Set this is if you're using an alternate Portainer Environment for some reason. 2 is the default.
    volumes:
      - ${HOST_DIR}/olivetin:/config # Add the parent directory on your Docker you'd like to use.
      - ${DVR_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR network share.
      - ${LOGS_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      - ${TUBEARCHIVIST_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      #- ${DVR2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT} # Note that these volume mounts should always be to /mnt/hostname-port or /mnt/ip-port (dash rather than a colon between).
      #- ${LOGS2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      #- ${TUBEARCHIVIST2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

  static-file-server:
    image: halverneus/static-file-server:latest
    container_name: static-file-server
    dns_search: ${DOMAIN}
    ports:
      - ${HOST_SFS_PORT}:8080
    environment:
      - FOLDER=${FOLDER}
    volumes:
      - ${HOST_DIR}/olivetin/data:${FOLDER}
    restart: unless-stopped

#volumes: # use this section if you've setup a docker volume named channels-dvr, with CIFS or NFS, to bind to /mnt/dvr inside the container. Set ${HOST_DIR} to channels-dvr (HOST_DIR=channels_dvr) in that example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true
  #tubearchivist:
    #external: true

TAG=latest
DOMAIN=local
HOST_PORT=1337
CHANNELS_DVR_HOST=192.168.7.109:8089
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=8089
CHANNELS_CLIENTS=appletv4k-livingroom 192.168.7.187
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=redacted@gmail.com
ALERT_EMAIL_PASS=XXXXXXXXXX
ALERT_EMAIL_TO=redacted@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Arizona
HOST_DIR=/volume1/docker
DVR_SHARE=/volume1/chDVRtve
LOGS_SHARE=/volume1/docker/channelsdvr
TUBEARCHIVIST_SHARE=/volume1/docker/channelsdvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_HOST=192.168.7.109:8089
PORTAINER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PORTAINER_PORT=9443

Good idea :smile:

Update these

CHANNELS_DVR2_PORT=8089              # change it to CHANNELS_DVR2_PORT=
CHANNELS_DVR_HOST=192.168.7.109:8089 # change it to CHANNELS_DVR_HOST=192.168.7.109
PORTAINER_HOST=192.168.7.109:8089    # change it to PORTAINER_HOST=192.168.7.109
1 Like

Remove the port numbers and keep the DVR2 PORT empty?

CHANNELS_DVR2_PORT=8089 change to CHANNELS_DVR2_PORT=
CHANNELS_DVR_HOST=192.168.7.109:8089 change to CHANNELS_DVR_HOST=192.168.7.109
PORTAINER_HOST=192.168.7.109:8089 change to PORTAINER_HOST=192.168.7.109

1 Like

Anything critical missing here?

TAG=latest
DOMAIN=local
HOST_PORT=1337
CHANNELS_DVR_HOST=192.168.29.131
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=
CHANNELS_CLIENTS=Living Room
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=username@gmail.com
ALERT_EMAIL_PASS=xxxxxxxxxxxxxxxx
ALERT_EMAIL_TO=username@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Eastern
HOST_DIR=/data
DVR_SHARE=/mnt/dvr
LOGS_SHARE=/mnt/channelsdvr
TUBEARCHIVIST_SHARE=/mnt/dvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=ptr_RoCJi+tUL6FZFHvZysHNd849xqbcREDDuQlKbqg8sl4=
PORTAINER_HOST=192.168.29.131

This should be the actual LAN hostname (hostnames never have spaces), or IP address of any Channels client you'd like to be able to send onscreen messages to.

Also, if you could update OliveTin to the :latest (:2025.02.22), pushed a few minutes ago, and then re-run a Post-Install Healthcheck. Please post the results shown in Standard Output (no Standard Error) here, as there are a couple of things I'd like to verify.

Under Clients in the CDVR web settings, it says my ATV 4K is named "Living Room"?

That's CDVR's informal name for the device not the actual LAN hostname. Using the LAN IP for this value is probably the easiest, and it's shown on that same page in the CDVR webUI under that informal name.

2 Likes

Great! I will. I will look for how to update OT.

You can either use Watchtower, or if you don't have that installed, stop the OliveTin stack. Then, go into the Stack Editor, and click Update the stack followed by selecting the Re-pull and redeploy slider.

Is that option available on the free version of Docker? I don't see it.

You probably need to correct these directories

Do I need to copy the new stack info before updating the stack?
edit...
I copy/pasted the info from post #1, and OliveTin says version 2025.02.22.

Thanks.

ChannelsDVR location is on same Windows 11 PC as Docker. The location is C:\ProgramData2\DVR

What should the values be?

You should be able use C:/ProgramData2/DVR for your LOGS_SHARE value.

I've updated everything and got a new token, the Olivetin post install health is green. I am getting this now,

JSON response from http://192.168.7.109:9000/api/stacks/create/standalone/string?endpointId=3:
{"Id":20,"Name":"samsung-tvplus-for-channels","Type":2,"EndpointId":3,"SwarmId":"","EntryPoint":"docker-compose.yml","Env":[{"name":"TAG","value":"latest"},{"name":"HOST_PORT","value":"8182"},{"name":"REGIONS","value":"us"},{"name":"TZ","value":"US/Mountain"}],"ResourceControl":{"Id":11,"ResourceId":"3_samsung-tvplus-for-channels","SubResourceIds":[],"Type":6,"UserAccesses":[],"TeamAccesses":[],"Public":false,"AdministratorsOnly":true,"System":false},"Status":1,"ProjectPath":"/data/compose/20","CreationDate":1740270976,"CreatedBy":"felix","UpdateDate":0,"UpdatedBy":"","AdditionalFiles":null,"AutoUpdate":null,"Option":null,"GitConfig":null,"FromAppTemplate":false,"Namespace":""}
true
true
version: '3.9'
services:
  olivetin: # This docker-compose typically requires no editing. Use the Environment variables section of Portainer to set your values.
    # 2025.02.21
    # GitHub home for this project: https://github.com/bnhf/OliveTin.
    # Docker container home for this project with setup instructions: https://hub.docker.com/repository/docker/bnhf/olivetin.
    image: bnhf/olivetin:${TAG} # Add the tag like latest or test to the environment variables below.
    container_name: olivetin
    hostname: olivetin
    dns_search: ${DOMAIN} # For Tailscale users using Magic DNS, add your Tailnet (tailxxxxx.ts.net) to use hostnames for remote nodes, otherwise use your local domain name.
    ports:
      - ${HOST_PORT}:1337
    environment:
      - CHANNELS_DVR=${CHANNELS_DVR_HOST}:${CHANNELS_DVR_PORT} # Add your Channels DVR server in the form CHANNELS_DVR_HOST=<hostname or ip> and CHANNELS_DVR_PORT=<port>.
      #- CHANNELS_DVR_ALTERNATES=${CHANNELS_DVR2_HOST}:${CHANNELS_DVR2_PORT} # Space separated list of alternate Channels DVR servers to choose from in the form hostname:port or ip:port.
      - CHANNELS_CLIENTS=${CHANNELS_CLIENTS} # Space separated list of Channels DVR clients you'd like notifications sent to in the form hostname or IP.
      - ALERT_SMTP_SERVER=${ALERT_SMTP_SERVER} # SMTP server to use for sending alert e-mails. smtp.gmail.com:587 for example.
      - ALERT_EMAIL_FROM=${ALERT_EMAIL_FROM} # Sender address for alert e-mails.
      - ALERT_EMAIL_PASS=${ALERT_EMAIL_PASS} # SMTP "app" password established through GMail or Yahoo Mail. Do not use your everyday e-mail address.
      - ALERT_EMAIL_TO=${ALERT_EMAIL_TO} # Recipient address for alert e-mails.
      - UPDATE_YAMLS=${UPDATE_YAMLS} # Set this to true to update config.yaml.
      - UPDATE_SCRIPTS=${UPDATE_SCRIPTS} # Set this to true to update all included scripts.
      - TZ=${TZ} # Add your local timezone in standard linux format. E.G. US/Eastern, US/Central, US/Mountain, US/Pacific, etc.
      - PORTAINER_TOKEN=${PORTAINER_TOKEN} # Generate via <username> dropdown (upper right of WebUI), "My account", API tokens.
      - PORTAINER_HOST=${PORTAINER_HOST} # Hostname or IP of the Docker host you're running Portainer on.
      - PORTAINER_PORT=${PORTAINER_PORT} # https port you're running Portainer on. 9443 is the default.
      - PORTAINER_ENV=3 # Set this is if you're using an alternate Portainer Environment for some reason. 2 is the default.
    volumes:
      - ${HOST_DIR}/olivetin:/config # Add the parent directory on your Docker you'd like to use.
      - ${DVR_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR network share.
      - ${LOGS_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      - ${TUBEARCHIVIST_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      #- ${DVR2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT} # Note that these volume mounts should always be to /mnt/hostname-port or /mnt/ip-port (dash rather than a colon between).
      #- ${LOGS2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      #- ${TUBEARCHIVIST2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

  static-file-server:
    image: halverneus/static-file-server:latest
    container_name: static-file-server
    dns_search: ${DOMAIN}
    ports:
      - ${HOST_SFS_PORT}:8080
    environment:
      - FOLDER=${FOLDER}
    volumes:
      - ${HOST_DIR}/olivetin/data:${FOLDER}
    restart: unless-stopped

#volumes: # use this section if you've setup a docker volume named channels-dvr, with CIFS or NFS, to bind to /mnt/dvr inside the container. Set ${HOST_DIR} to channels-dvr (HOST_DIR=channels_dvr) in that example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true
  #tubearchivist:
    #external: true

TAG=latest
DOMAIN=local
HOST_PORT=1337
CHANNELS_DVR_HOST=192.168.7.109
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=
CHANNELS_CLIENTS=appletv4k-livingroom 192.168.7.187
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=felix92810@gmail.com
ALERT_EMAIL_PASS=XXXXXXXXXXX
ALERT_EMAIL_TO=felix92810@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Arizona
HOST_DIR=/volume1/docker
DVR_SHARE=/volume1/chDVRtve
LOGS_SHARE=/volume1/docker/channelsdvr
TUBEARCHIVIST_SHARE=/volume1/docker/channelsdvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_HOST=192.168.7.109
PORTAINER_TOKEN=ptr_nqHKJ846qp57qIx1fTDGkmCv3usycSUzV4pOP/Ubvgo=
PORTAINER_PORT=9443