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

That is all I am getting from Output and Error

I just updated to Portainer-CE v2.27.0 LTS and noticed a lot of API endpoints had been removed.
Possibly one you're using?
https://docs.portainer.io/release-notes#release-2.27.0
https://docs.portainer.io/release-notes#deprecated-and-removed-features

1 Like

Wow. Always a risk I guess with this kind of thing. I'll jump on their Slack Channel tomorrow to see what's up with this.

New bnhf/olivetin:latest (aka bnhf/olivetin:2025.02.20) pushed this morning with support for Portainer API changes effective with CE 2.27.0 LTS released yesterday. Changes made to Project One-Click deployments are backwards compatible with at least CE 2.21.4 LTS, so updating your installed version of Portainer is likely not mandatory -- but, as always, is recommended.

@mexicanmamba

You were the first to be affected by the Portainer's API deprecations yesterday. I've made corresponding changes to Project One-Click to support these API adjustments, so update OliveTin-for-Channels, and you should be good-to-go installing Pluto-for-Channels.

Running the Plex for Channels One-Click action from Olivetin 2025.02.20 was successful today. Both sources, Plex TV, and Plex TV-NoEPG were added to Channels. :smiley:
Screenshot 2025-02-20 2.31.36 PM

2 Likes

I was able to update but now I am getting this error

JSON response from http://192.168.7.109:9000/api/stacks/create/standalone/string?endpointId=2:
{"message":"Invalid JWT token","details":"Unauthorized"}
false

Try getting a new Portainer Token

and putting it in the OliveTin for Channels Stack Environment variables here

PORTAINER_TOKEN=

Then Update the stack
Screenshot 2025-02-20 at 17-51-25 Portainer local

Okay updated the token and updated stack, but getting this now

JSON response from http://192.168.7.109:9000/api/stacks/create/standalone/string?endpointId=2:
{"message":"Unable to find an environment with the specified identifier inside the database","details":"Object not found inside the database (bucket=endpoints, key=2)"}
false

Did you set up an additional environment beyond the usual "Local"?

What do you see when you first login to Portainer? Please post a screenshot.



@mexicanmamba When you first login to Portainer, and you hover over the "Local" environment, what do you see in the lower left corner?

It looks like you maybe created another environment and then deleted it? If you look at the URL in the lower left of the screenshot you posted the "Local" environment has an ID of 3 -- and I've never seen that before, it's always 2. Any thoughts on how that might have happened?

I am not sure, can I delete and redo the stack?

It shouldn't be too difficult for me to create an override ID for the "Local" environment (e.g. to use 3 instead of 2) -- just in case this comes up again. I'll do that in the AM and publish an update tomorrow.

1 Like

Thank you and for Organizr port 80 is being used can I assign any other number?
I am doing it from the container manager

version: '3.9'
services:
  organizr:
    image: organizr/organizr:latest
    container_name: organizr
    hostname: organizr
    ports:
      - 79:79
    environment:
      - PUID=nobody
      - PGID=nobody
      - TZ=US/Arizona
    volumes:
      - /volume1/docker/organizr/data/organizr:/config
    restart: unless-stopped

Don't change the container-side port -- that stays at 80. Plus 81 is more common as an alternate. So, I'd suggest:

    ports:
      - 81:80

@mexicanmamba OK, so I've added support for a Portainer Environment ID other than 2. Update to the :latest (:2025.02.21), and use PORTAINER_ENV=3.

Here's an updated OliveTin-for-Channels Docker Compose:

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=${PORTAINER_ENV} # 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

And a set of example env vars:

TAG=latest
DOMAIN=tailxxxxx.ts.net
HOST_PORT=1337
CHANNELS_DVR_HOST=local-server
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=another-server
CHANNELS_DVR2_PORT=8089
CHANNELS_CLIENTS=appletv4k-den firestick-bedroom
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/Mountain
HOST_DIR=/data
DVR_SHARE=/mnt/dvr
LOGS_SHARE=/mnt/channelsdvr
TUBEARCHIVIST_SHARE=/mnt/dvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PORTAINER_HOST=docker-host
PORTAINER_PORT=9443
PORTAINER_ENV=2

Assuming you're successful, I'll make this the new standard Docker Compose for this project.