Run the docker compose file. That's pretty much all you need to do.
TIL about jellystat. Thank you!
What is jellystat?
TL:DR it's an application for gathering statistics on jellyfin users and watching habits.
Seems pretty creepy to be collecting logs about what people watch. Why do people use this?
Is it creepy what people collect data on their own viewing habits so they can visualise data for fun and keep track of things they've watched? I'm not sure I understand why that is creepy TBH. It's not like people are collecting data on viewing habits of random strangers.
It's the duality (hypocrisy?) around a lot of selfhosters.
They're self-hosting for "privacy" from Google/Microsoft/whatever, but then install enough surveillance software that the CIA might think you've over done it and then watch everything they and any friends/family they share access with are doing.
I mean that's cool if that's what you want to do, but it's still a weird thing.
Depends on your judgement of other people, i guess. I have thousands of movies taking TBs of space on my NAS and lots of users. I'd like to have easy reports such as "movies never watched in a year with a low imdb score". So i know what can I delete if needed. But to each their own.
I mean, I don't much care either way; I don't expect privacy if I'm doing something on a computer owned by someone else so if they want to log everything that's great.
It's just that, personally, I don't want to know what my friends and family are posting, or watching, or listening to (unless we're like, having an actual conversation about it) and keep as much logging as remotely feasible turned off.
I'd be a LOT happier if the tools to do logging were just aggregate stats: in your case, you don't need to know WHO watched it, just if it was watched, which is still very privacy respecting.
But uh, mostly all these analysis tools/log analyzers/metrics api endpoints are designed to log every single detail of every single interaction and that just.... makes me feel skeezy.
That's fair. I'm just thinking I could never use something like this because I would be invading the privacy of others using my Jellyfin. I would live to see an anonymous view counter on every movie though tbh.
I use it to track users use/watch habits, to restrict their access if need be. Every user with a password that may or may not be strong is a weak point in my network security.
How many users do you have? My Jellyfin setup is only used by my family.
Family and some friends from back in my days in the military. Those guys are who I keep an eye on, because they don't use it as frequently as my family.
There's a link in their Read Me on GitHub under the title about launching with Docker. Are you familiar with Docker?
Thanks...Yeah I saw it. I have a few docker things deployed. But the "getting started" section completely ignores setting up the Postgresql DB, which very clearly it seems to want. This is not listed as a requirement, but still hinted casually around whenever it mentions the user/pass, environment variables etc.
So...is there anywhere mentioned how to get the whole thing up and running, including docker and postgresql?
They have a docker-compose.yml
file in the repo. It looks like it has everything all ready for you.
Yeah...I copied the whole of it onto my docker-compose.yml. But after running a docker compose up, and after getting:
docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 3/3
✔ Network jellystat_default Created 0.1s
✔ Container jellystat-jellystat-db-1 Started 0.9s
✔ Container jellystat-jellystat-1 Started
I still can't get to connect on http://myIP:3000, I get nothing, just a "unable to connect" firefox error. Is there anything I should set up/modify on the docker-compose.yml?
There will probably be something in the logs that tells you what is going wrong. Maybe it can't connect to the db, or maybe it's starting on a wrong port or something.
Sorry i don't have experience checking docker logs... How do I go about that?
In the same place as you run your docker compose up
command you just type docker compose logs
Huh....so the log is just an almost infinite loop of these:
jellystat-1 | Error: getaddrinfo ENOTFOUND jellystat-db
jellystat-1 | at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:120:26)
jellystat-1 | [JELLYSTAT] Database exists. Skipping creation
jellystat-1 | FS-related option specified for migration configuration. This resets migrationSource to default FsMigrations
jellystat-1 | FS-related option specified for migration configuration. This resets migrationSource to default FsMigrations
jellystat-1 | node:internal/process/promises:391
jellystat-1 | triggerUncaughtException(err, true /* fromPromise */);
jellystat-1 | ^
jellystat-1 |
jellystat-1 | Error: getaddrinfo ENOTFOUND jellystat-db
jellystat-1 | at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:120:26) {
jellystat-1 | errno: -3008,
jellystat-1 | code: 'ENOTFOUND',
jellystat-1 | syscall: 'getaddrinfo',
jellystat-1 | hostname: 'jellystat-db'
jellystat-1 | }
Just for clarity's sake, here's my docker-compose.yml:
version: '3'
services:
jellystat-db:
image: postgres:15.2
environment:
POSTGRES_DB: 'jfstat'
POSTGRES_USER: postgres
POSTGRES_PASSWORD: mypassword
volumes:
- /postgres-data:/var/lib/postgresql/data # Mounting the volume
jellystat:
image: cyfershepard/jellystat:latest
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: MyJellystat
POSTGRES_IP: jellystat-db
POSTGRES_PORT: 5432
JWT_SECRET: 'my-secret-jwt-key'
ports:
- "3000:3000" #Server Port
volumes:
- /backup-data:/app/backend/backup-data # Mounting the volume
depends_on:
- jellystat-db
restart: unless-stopped
networks:
default:
I literally haven't changed anything from default as it was a test, even the password fields.
Your passwords for the database does not match.
But the error is about it not being able to reach the database on the hostname.
I can run it with this compose file:
services:
jellystat-db:
image: postgres:16-alpine
container_name: jellystat-db
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- jellystat
jellystat:
image: cyfershepard/jellystat:latest
container_name: jellystat
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_IP: jellystat-db
POSTGRES_PORT: 5432
JWT_SECRET: ${JWT_SECRET}
TZ: Europe/Paris # timezone (ex: Europe/Paris)
JS_BASE_URL: /
volumes:
- jellystat-backup-data:/app/backend/backup-data
depends_on:
- jellystat-db
networks:
- traefik
- jellystat
labels:
- traefik.enable=true
- traefik.docker.network=traefik
- traefik.http.routers.jellystat.entrypoints=https
- traefik.http.routers.jellystat.rule=Host(`${HOSTNAME}`)
- traefik.http.routers.jellystat.tls.certresolver=http
- traefik.http.routers.jellystat.service=jellystat
- traefik.http.services.jellystat.loadbalancer.server.port=3000
- traefik.http.services.jellystat.loadbalancer.server.scheme=http
networks:
jellystat: {}
traefik:
external: true
volumes:
postgres-data: null
jellystat-backup-data: null
services:
jellystat-db:
image: postgres:16-alpine
container_name: jellystat-db
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- jellystat
jellystat:
image: cyfershepard/jellystat:latest
container_name: jellystat
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_IP: jellystat-db
POSTGRES_PORT: 5432
JWT_SECRET: ${JWT_SECRET}
TZ: Europe/Paris # timezone (ex: Europe/Paris)
JS_BASE_URL: /
volumes:
- jellystat-backup-data:/app/backend/backup-data
depends_on:
- jellystat-db
networks:
- traefik
- jellystat
labels:
- traefik.enable=true
- traefik.docker.network=traefik
- traefik.http.routers.jellystat.entrypoints=https
- traefik.http.routers.jellystat.rule=Host(`${HOSTNAME}`)
- traefik.http.routers.jellystat.tls.certresolver=http
- traefik.http.routers.jellystat.service=jellystat
- traefik.http.services.jellystat.loadbalancer.server.port=3000
- traefik.http.services.jellystat.loadbalancer.server.scheme=http
networks:
jellystat: {}
traefik:
external: true
volumes:
postgres-data: null
jellystat-backup-data: null
Hmmm thanks but I'm not using traefik...Is it part of the needed setup?
No. You can leave that out. That was just me showing you that it runs on my machine, with that setup. Just bind the port instead.
Just came to say thanks...Yeah eventually after copy-pasting it from scratch again, I got it running. Seems to be working now. Thanks again!
Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!