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 00000000..8fe5984a Binary files /dev/null and b/apps/ryot/metadata/logo.jpg differ