OliveTin for Channels - cannot access static file server

I'm unable to add the custom channel and cannot figure out what I'm doing wrong.
I'm running the Channels package on Synology NAS. I pulled the latest olivetin.

Portainer env variables:

PORTAINER_HOST=192.168.0.11
HOST_SFS_PORT=8080
CHANNELS_DVR_HOST=192.168.0.11
CHANNELS_DVR_PORT=8089

m3u_name YTlivestreams.m3u

My m3u lives at:
/volume1/data/olivetin/data/192.168.0.11-8089/YTlivestreams.m3u

If I try this url in a browser I get a 403 Forbidden error.
http://192.168.0.11:8080/192.168.0.11-8089/YTlivestreams.m3u

I've racked my feeble brain and cannot figure out why I can't see the m3u in a browser and get the 403 error.

OliveTin Post-Install Healthcheck shown here

OliveTin Post-Install Healthcheck
Standard Output
Checking your OliveTin installation...
(extended_check=false)


Checking that your selected Channels DVR server (192.168.0.11:8089) is reachable by URL:
HTTP Status: 200 indicates success...

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1276 100 1276 0 0 1246k 0 --:--:-- --:--:-- --:--:-- 1246k
HTTP Status: 200
Effective URL: http://192.168.0.11:8089/


Checking that your selected Channels DVR server's data files (/mnt/192.168.0.11-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...

total 20
drwxrwxrwx 1 root root 22 Oct 16 06:00 #recycle
drwx------ 1 242120 root 170 Dec 29 15:00 .
drwxr-xr-x 1 root root 78 Jan 1 06:46 ..
-rwxrwx--- 1 1026 users 18436 Oct 3 07:38 .DS_Store
drwxrwxrwx 1 root root 334 Dec 6 05:46 @eaDir
drwxrwx--- 1 1026 users 1350 Dec 31 21:29 Database
drwxrwx--- 1 1026 users 228788 Jan 1 07:00 Images
drwxrwx--- 1 1026 users 58 Mar 18 2022 Imports
drwxrwx--- 1 1026 users 62 Oct 15 07:00 Logs
drwxrwx--- 1 1026 users 26060 Dec 30 22:40 Movies
drwxrwx--- 1 1026 users 10162 Dec 31 18:30 Streaming
drwxrwx--- 1 1026 users 8244 Dec 31 20:00 TV
drwxrwx--- 1 1026 users 50 Jan 16 2023 strmlnkTemplates
drwxrwx--- 1 1026 users 0 Jan 21 2024 temp


Checking that your selected Channels DVR server's log files (/mnt/192.168.0.11-8089_logs) are accessible:
Folders with the names data and latest should be visible...

total 4
drwxr-xr-x 1 242120 242120 200 Dec 26 21:28 .
drwxr-xr-x 1 root root 78 Jan 1 06:46 ..
drwxr-xr-x 1 242120 242120 154 Dec 14 23:52 2024.12.15.0712
drwxr-xr-x 1 242120 242120 154 Dec 17 20:24 2024.12.18.0400
drwxr-xr-x 1 242120 242120 154 Dec 22 22:56 2024.12.23.0634
drwxr-xr-x 1 242120 242120 154 Dec 23 10:56 2024.12.23.1848
drwxr-xr-x 1 242120 242120 154 Dec 23 19:56 2024.12.23.2347
drwxr-xr-x 1 242120 242120 154 Dec 26 21:28 2024.12.27.0121
drwxr-xr-x 1 242120 242120 4328 Jan 1 06:23 data
lrwxrwxrwx 1 242120 242120 15 Dec 26 21:28 latest -> 2024.12.27.0121


Here's a list of your current OliveTin-related settings:

HOSTNAME=olivetin
CHANNELS_DVR=192.168.0.11:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=apple-tv
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=[Redacted]@gmail.com
ALERT_EMAIL_PASS=[Redacted]
ALERT_EMAIL_TO=[Redacted]@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
PORTAINER_TOKEN=[Redacted]
PORTAINER_HOST=192.168.0.11


Here's the contents of /etc/resolv.conf from inside the container:

search localhost tail[Redacted].ts.net
nameserver 127.0.0.11
options ndots:0


Here's the contents of /etc/hosts from inside the container:

127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.48.3 olivetin
Standard Error

What happens if you look at http://192.168.0.11:8080 with your browser? Do see something like this, showing 192.168.0.11-8089/ in your case?:

screenshot-htpc6_8081-2025.01.01-15_45_50

And if you click on the appropriate folder link:

screenshot-htpc6_8081-2025.01.01-15_46_39

And then if you click on your M3U:

Obviously your specifics are different, but this will confirm your Static File Server is working properly. If not, we'll need to be sure you're using the latest OliveTin Docker Compose, along with the needed env vars.

Also, note you need to be using a very recent pre-release of CDVR server itself for this to work (as shown in the first post of this thread).

I still get the 403 Forbidden error.

I'm running Channels vers: 2024.12.27.0121

Here is my docker compose:

docker compose inside
version: '3.9'
services:
  olivetin: # This docker-compose requires little or no editing. Set the Environment variables section of Portainer.
    # 2024.10.20
    # 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.
    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.
      #- ${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.
      - /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 docker volumes named channels-dvr and channels-dvr-logs, with CIFS or NFS, to bind to /mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} and  /mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs inside the container. Set DVR_SHARE=channels-dvr and LOGS_SHARE=channels-dvr-logs in this example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true

Here are the environment variables:

compose env inside
TAG=latest
DOMAIN=localhost tail6d9e.ts.net
HOST_PORT=1337
CHANNELS_DVR_HOST=192.168.0.11
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=
CHANNELS_CLIENTS=apple-tv
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=cyoungers@gmail.com
ALERT_EMAIL_PASS=[redacted]
ALERT_EMAIL_TO=cyoungers@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Pacific
HOST_DIR=/volume1/data
DVR_SHARE=/volume1/ChannelsDVR
LOGS_SHARE=/var/packages/ChannelsDVR/target/channels-dvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=[redacted]
PORTAINER_HOST=192.168.0.11

Hmmm... Your compose and env vars look good to me so far. Have you tried getting to your server by its MagicDNS hostname or 100.x.x.x tailnet IP?

Like:

http://cjynas:8080

or

http://100.x.x.x:8080

Mostly curious if either of those work...

EDIT: Also, could you post a screenshot showing the folder structure that includes /volume1/data down to the M3U?

Nope. Neither work.

Path to m3u
image

All seems good. Hopefully @chDVRuser will see something I'm missing.

One more thought, does Portainer show the static-file-server container is running, and active on port 8080?

Mine is on 8081, but you get the idea...

It looks like it's on 8080.

Can you curl the M3U from anywhere on your network?:

curl http://192.168.0.11:8080/192.168.0.11-8089/YTlivestreams.m3u

Are you running a firewall on your NAS?

No firewall.

FYI. I have a web server running on port 80 on the nas and I can reach it without any issue.

That's showing a different IP address of 192.168.48.3 for olivetin and 192.168.48.2 for the static file server

That looks correct to me. When you put two containers in the same stack, they'll be on the same randomly assigned Docker subnet -- but on different IPs.

Then possibly a port conflict with 8080?
I forget why, but I had to change mine from 8080 to 8088 on my Synology.

@cyoungers This is a good suggestion. 8080 is often used, and may be reserved in a non-standard way by Synology.

Did you change the URL you were testing accordingly?

http://192.168.0.11:8088/192.168.0.11-8089/YTlivestreams.m3u

Yes sir.

What do your Portainer Networks look like?


If you click on a Name, it will show you the containers on that network.