From 58835031672fb4ada4c57f0548967c357c1ce2e2 Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Mon, 18 Sep 2023 10:29:34 -0400 Subject: [PATCH] Add Ryot (#1233) * Add Ryot * Add Registration Option * Add Twitch Client ID Info * Update docker-compose.yml * Update README.md --- README.md | 1 + apps/ryot/config.json | 45 +++++++++++++++++++++++ apps/ryot/docker-compose.yml | 57 ++++++++++++++++++++++++++++++ apps/ryot/metadata/description.md | 37 +++++++++++++++++++ apps/ryot/metadata/logo.jpg | Bin 0 -> 30811 bytes 5 files changed, 140 insertions(+) create mode 100644 apps/ryot/config.json create mode 100644 apps/ryot/docker-compose.yml create mode 100644 apps/ryot/metadata/description.md create mode 100644 apps/ryot/metadata/logo.jpg diff --git a/README.md b/README.md index 2b0fe958..db5527d9 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Readarr](https://github.com/Readarr/Readarr) - Book Manager and Automation (Sonarr for Ebooks) - [Resilio Sync](https://github.com/bt-sync) - Fast, reliable, and simple file sync and share solution - [RSS](https://github.com/ssddanbrown/rss) - A simple, opinionated, RSS feed aggregator +- [Ryot](https://github.com/IgnisDa/ryot) - Roll your own tracker! - [Sabnzbd](https://github.com/sabnzbd/sabnzbd) - Sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can" - [SearXNG](https://github.com/searxng/searxng) - SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled - [Send](https://gitlab.com/timvisee/send) - Simple, private file sharing diff --git a/apps/ryot/config.json b/apps/ryot/config.json new file mode 100644 index 00000000..eee78d0b --- /dev/null +++ b/apps/ryot/config.json @@ -0,0 +1,45 @@ +{ + "$schema": "../schema.json", + "name": "Ryot", + "port": 8206, + "available": true, + "exposable": true, + "id": "ryot", + "tipi_version": 1, + "version": "v2.17.3", + "categories": ["media"], + "description": "Roll your own tracker!", + "short_desc": "Roll your own tracker!", + "author": "IgnisDa", + "source": "https://github.com/IgnisDa/ryot", + "form_fields": [ + { + "type": "random", + "label": "RYOT_DB_PASSWORD", + "min": 32, + "env_variable": "RYOT_DB_PASSWORD" + }, + { + "type": "boolean", + "label": "Allow Registration", + "hint": "First user will be admin, Needed for at least one user.", + "required": false, + "default": "true", + "env_variable": "RYOT_ALLOW_REGISTRATION" + }, + { + "type": "text", + "label": "Twitch Client ID", + "hint": "For Video Game Tracking, Read Below for more Info!", + "required": false, + "env_variable": "RYOT_VIDEO_GAMES_TWITCH_CLIENT_ID" + }, + { + "type": "text", + "label": "Twitch Client Secret", + "hint": "For Video Game Tracking, Read Below for more Info!", + "required": false, + "env_variable": "RYOT_VIDEO_GAMES_TWITCH_CLIENT_SECRET" + } + ] +} diff --git a/apps/ryot/docker-compose.yml b/apps/ryot/docker-compose.yml new file mode 100644 index 00000000..7c0871ba --- /dev/null +++ b/apps/ryot/docker-compose.yml @@ -0,0 +1,57 @@ +version: "3.7" + +services: + ryot: + image: ghcr.io/ignisda/ryot:v2.17.3 + container_name: ryot + environment: + - DATABASE_URL=postgres://tipi:${RYOT_DB_PASSWORD}@ryot-db:5432/ryot + - SERVER_INSECURE_COOKIE=true + - USERS_ALLOW_REGISTRATION=${RYOT_ALLOW_REGISTRATION} + - VIDEO_GAMES_TWITCH_CLIENT_ID=${RYOT_VIDEO_GAMES_TWITCH_CLIENT_ID} + - VIDEO_GAMES_TWITCH_CLIENT_SECRET= ${VIDEO_GAMES_TWITCH_CLIENT_SECRET} + restart: unless-stopped + ports: + - ${APP_PORT}:8000 + depends_on: + - ryot-db + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ryot-web-redirect.redirectscheme.scheme: https + traefik.http.services.ryot.loadbalancer.server.port: 8000 + # Web + traefik.http.routers.ryot-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ryot-insecure.entrypoints: web + traefik.http.routers.ryot-insecure.service: ryot + traefik.http.routers.ryot-insecure.middlewares: ryot-web-redirect + # Websecure + traefik.http.routers.ryot.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ryot.entrypoints: websecure + traefik.http.routers.ryot.service: ryot + traefik.http.routers.ryot.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ryot-local-insecure.rule: Host(`ryot.${LOCAL_DOMAIN}`) + traefik.http.routers.ryot-local-insecure.entrypoints: web + traefik.http.routers.ryot-local-insecure.service: ryot + traefik.http.routers.ryot-local-insecure.middlewares: ryot-web-redirect + # Local domain secure + traefik.http.routers.ryot-local.rule: Host(`ryot.${LOCAL_DOMAIN}`) + traefik.http.routers.ryot-local.entrypoints: websecure + traefik.http.routers.ryot-local.service: ryot + traefik.http.routers.ryot-local.tls: true + + ryot-db: + container_name: ryot-db + image: postgres:15-alpine + restart: unless-stopped + environment: + - POSTGRES_USER=tipi + - POSTGRES_PASSWORD=${RYOT_DB_PASSWORD} + - POSTGRES_DB=ryot + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + networks: + - tipi_main_network diff --git a/apps/ryot/metadata/description.md b/apps/ryot/metadata/description.md new file mode 100644 index 00000000..b7c82efa --- /dev/null +++ b/apps/ryot/metadata/description.md @@ -0,0 +1,37 @@ +## Install Info + +If you want to setup Video Tracking, you need to set a Twitch Client ID and Secret. Please read the [Ryot Documentation](https://ignisda.github.io/ryot/guides/video-games.html) if you do not know how to get them +# Ryot + +### A self hosted platform for tracking various facets of your life - media, fitness etc. + +Ryot (**R**oll **Y**our **O**wn **T**racker), pronounced "riot", aims to be the only self hosted tracker you will ever need! + +## 💻 Demo + +You can use the demo instance hosted on [Fly.io](https://ryot.fly.dev). Login and register with the username `demo` and password `demo-password`. This instance is automatically deployed from the latest release. + +**NOTE**: The data in this instance can be deleted randomly. + +## 📝 ELI5 + +Imagine you have a special notebook where you can write down all the media you have consumed, like books you've read, shows you have watched, video games you have played or workouts you have done. Now, imagine that instead of a physical notebook, you have a special tool on your computer or phone that lets you keep track of all these digitally. + +## 💡 Why? + +- Existing solutions do not have very good UI. +- Pretty graphs and summaries make everyone happy. Ryot aims to have a lot of them. +- There is a lack of a good self-hosted fitness and health tracking solution. +- Ryot consumes very little memory (around 10MB idle eyeballing `docker stats`) + +## 🚀 Features + +- ✅ [Supports](https://github.com/IgnisDa/ryot/discussions/4) tracking media and fitness +- ✅ Import data from Goodreads, MediaTracker, Trakt, Movary, StoryGraph, MyAnimeList +- ✅ Integration with Jellyfin, Kodi, Plex, Audiobookshelf +- ✅ Self-hosted +- ✅ PWA enabled +- ✅ Documented GraphQL API +- ✅ Easy to understand UI +- ✅ Lightning fast (written in Rust BTW) +- ✅ Free and open-source diff --git a/apps/ryot/metadata/logo.jpg b/apps/ryot/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fe5984a45b926d9063e35ab6e9a3c36d01aab61 GIT binary patch literal 30811 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 literal 0 HcmV?d00001