Initial vault setup
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
---
|
||||
title: Ryot
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, tracking, media-tracker, rust, graphql]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=Media+Tracker, https://github.com/IgnisDa/ryot]
|
||||
---
|
||||
|
||||
# 📚 Ryot
|
||||
|
||||
> Tracker média tout-en-un (films, séries, animes, livres, jeux, podcasts, sports) — moderne, performant, avec app mobile React Native.
|
||||
|
||||
| Métadonnée | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [ryot.io](https://ryot.io) |
|
||||
| **GitHub** | [IgnisDa/ryot](https://github.com/IgnisDa/ryot) |
|
||||
| **License** | GPL-3.0 |
|
||||
| **Langage principal** | Rust (Axum) + TypeScript |
|
||||
| **Étoiles GitHub** | 113 ⭐ |
|
||||
| **Dernière MAJ** | 2026-05-25 |
|
||||
| **Catégorie** | [[cat-tracking]] |
|
||||
|
||||
## Description
|
||||
**Ryot** (prononcez « riot ») est un **tracker média auto-hébergé** particulièrement ambitieux : il permet de suivre **films, séries TV, animés, mangas, livres, jeux vidéo, podcasts, et même des exercices sportifs** dans une seule et même application. Le projet, écrit en **Rust** côté back-end (Axum) avec un front **React/React Native**, se veut une réponse moderne et auto-hébergée à des services comme Trakt + Goodreads + MyAnimeList combinés.
|
||||
|
||||
Les données sont synchronisées avec les principales sources de métadonnées (**TMDb, IGDB, MAL, Google Books, ListenNotes, ComicVine**). L'**API GraphQL** permet de tout piloter, et l'**app mobile** (iOS/Android) est compilée depuis le même dépôt. Le projet dispose aussi d'un **système d'extensions** pour ajouter de nouveaux providers de métadonnées.
|
||||
|
||||
Ryot est plus jeune que certains concurrents (cf. [[app-yamtrack]]) mais son **orientation multi-types de média**, sa **stack moderne** (Rust, GraphQL, React Native) et son **rythme de releases** en font l'un des projets les plus prometteurs du moment. L'UI est en anglais uniquement, mais l'API est bien documentée.
|
||||
|
||||
## Installation
|
||||
### Via Docker (recommandé)
|
||||
```yaml
|
||||
version: "3.8"
|
||||
services:
|
||||
ryot:
|
||||
image: dytes/ryot:latest
|
||||
container_name: ryot
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://ryot:*** - REDIS_URL=redis://redis:6379
|
||||
- JWT_SECRET=change...es
|
||||
- TMDB_ACCESS_TOKEN=***
|
||||
- IGDB_CLIENT_ID=***
|
||||
- IGDB_CLIENT_SECRET=***
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: ryot-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ryot
|
||||
POSTGRES_USER: ryot
|
||||
POSTGRES_PASSWORD: changez_moi
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: ryot-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
redis_data:
|
||||
```
|
||||
|
||||
### Installation manuelle
|
||||
1. Cloner : `git clone https://github.com/IgnisDa/ryot.git && cd ryot`
|
||||
2. Installer Rust (rustup) et Node 20+ (nvm)
|
||||
3. Compiler : `cargo build --release`
|
||||
4. Frontend : `cd apps/frontend && pnpm install && pnpm build`
|
||||
5. Migrations : `cargo run --bin migration`
|
||||
6. Configurer `.env` (cf. `.env.example`)
|
||||
7. Lancer : `./target/release/ryot`
|
||||
8. Mobile : `cd apps/mobile && pnpm install && pnpm run android|ios`
|
||||
|
||||
## Configuration
|
||||
- Créer le **premier utilisateur admin** via l'UI
|
||||
- Renseigner les **clés API** providers (TMDb, IGDB, MAL, Google Books)
|
||||
- Configurer les **unités** (km/miles, kg/lbs) et préférences de langue
|
||||
- Activer la **synchronisation Plex/Jellyfin** pour importer sa consommation existante
|
||||
- Activer les **statistiques** (workout + média combinés)
|
||||
- Brancher l'**export vers Strava** (workouts)
|
||||
- Configurer un **reverse proxy HTTPS** (Traefik + Let's Encrypt)
|
||||
|
||||
## Alternatives
|
||||
### Open source
|
||||
- [[app-yamtrack]] — Django, plus simple, moins de catégories
|
||||
- **MediaTracker** — alternative Python basique
|
||||
- **Kavita** — mangas/comics, lecteur intégré
|
||||
- **Jellyfin** — serveur média avec suivi
|
||||
- **Komga** — comics/mangas avec suivi
|
||||
- **Trakt** (cloud) — référence, payant pour certaines features
|
||||
|
||||
### Propriétaires
|
||||
- **Trakt.tv Premium** — référence cloud
|
||||
- **MyAnimeList Plus** — mangas/animes
|
||||
- **Goodreads** (Amazon) — livres, social
|
||||
- **Letterboxd Pro** — films, social
|
||||
- **Backloggd** — jeux + films
|
||||
|
||||
## Sécurité
|
||||
- Changer le **JWT_SECRET** et garder secret (32+ caractères)
|
||||
- Activer **HTTPS obligatoire** (Traefik / Caddy)
|
||||
- Activer la **2FA** (TOTP) sur les comptes
|
||||
- Restreindre l'accès à l'**API GraphQL** par IP / OIDC
|
||||
- Sauvegarder **pgdata** et **redis** régulièrement (Redis est volatile par défaut : activer AOF)
|
||||
- Mettre à jour l'image Docker (alertes Renovate/Dependabot)
|
||||
- Auditer les **clés API providers** (les régénérer périodiquement)
|
||||
|
||||
## Ressources
|
||||
- [Site officiel](https://ryot.io)
|
||||
- [Documentation](https://docs.ryot.io)
|
||||
- [Code source](https://github.com/IgnisDa/ryot)
|
||||
- [Discord communautaire](https://discord.gg/ryot)
|
||||
- [Démo en ligne](https://demo.ryot.io)
|
||||
|
||||
## Pages Liées
|
||||
- [[cat-tracking]]
|
||||
- [[recettes-docker-compose]]
|
||||
- [[cat-media-tracking]]
|
||||
Reference in New Issue
Block a user