Initial vault setup
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
---
|
||||
title: Jellyswarrm
|
||||
created: 2026-06-06
|
||||
updated: 2026-06-06
|
||||
type: app
|
||||
tags: [catalogue, reverse-proxy, media, jellyfin, federation, rust]
|
||||
confidence: medium
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/LLukas22/Jellyswarrm]
|
||||
---
|
||||
|
||||
# 🚦 Jellyswarrm
|
||||
|
||||
> **Reverse proxy spécialisé Jellyfin qui fusionne plusieurs serveurs en une bibliothèque unifiée**. Pour qui veut centraliser ses médias (et ceux de ses amis) sans configurer chaque client avec N serveurs.
|
||||
|
||||
## 📋 Informations Générales
|
||||
|
||||
| Champ | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | (GitHub uniquement) |
|
||||
| **GitHub** | [LLukas22/Jellyswarrm](https://github.com/LLukas22/Jellyswarrm) |
|
||||
| **License** | GPL-2.0 (relicencé depuis MIT le 2025-08-29) |
|
||||
| **Langage** | Rust (90.4 %), HTML, Python |
|
||||
| **Étoiles GitHub** | 749 ⭐ |
|
||||
| **Dernière MAJ** | 2025-08-29 (v0.2.1) |
|
||||
| **Catégorie** | [[cat-reverse-proxy|Reverse Proxy]], Media, Jellyfin |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**Jellyswarrm** est un **reverse proxy L7 ultra-spécialisé** : il se place devant **plusieurs instances Jellyfin** et les présente aux clients (Jellyfin Mobile, web, TV, etc.) comme **un seul serveur unifié**. C'est la réponse au problème classique : "j'ai un serveur Jellyfin chez moi, mon ami en a un autre à 500 km, et je veux que mes apps n'en voient qu'un seul avec la bibliothèque agrégée".
|
||||
|
||||
Le tagline officiel résume bien : *"Many servers. Single experience."*
|
||||
|
||||
**Caractéristiques principales** :
|
||||
|
||||
- ✅ **Reverse proxy Jellyfin-compatible** : le client croit parler à un serveur Jellyfin normal
|
||||
- ✅ **Bibliothèque unifiée** : fusion des films/séries/musique de tous les serveurs en arrière
|
||||
- ✅ **Lecture directe depuis le serveur d'origine** : pas de transit par Jellyswarrm (transcodage fait sur place)
|
||||
- ✅ **Mapping utilisateur** : lier ses comptes entre serveurs pour une expérience cohérente
|
||||
- ✅ **Synchronisation de comptes** (fédération) : ajouter un user une seule fois
|
||||
- ✅ **UI Jellyfin web embarquée** : accessible directement via `/`
|
||||
- ✅ **WebSocket** pour les features temps-réel (SyncPlay en cours de stabilisation)
|
||||
- ✅ **Client apps existants** : la plupart des apps Jellyfin fonctionnent sans modification
|
||||
- ⚠️ **Encore en développement actif** : certaines features annoncées comme QuickConnect, ajustement automatique du bitrate, gestion des médias via l'UI ne sont pas encore implémentées
|
||||
|
||||
**Public cible** : utilisateurs de **Jellyfin multi-site** (plusieurs localisations géographiques, serveurs amis, familles éclatées) qui veulent **une seule bibliothèque**, **une seule URL** et **un seul login**. Particulièrement adapté aux personnes qui partagent des médias avec leurs proches sans monter un serveur centralisé coûteux.
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Option 1 : Docker Compose (recommandé)
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
services:
|
||||
jellyswarrm:
|
||||
image: ghcr.io/llukas22/jellyswarrm:latest
|
||||
container_name: jellyswarrm
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
volumes:
|
||||
- ./data:/app/data # config + base SQLite
|
||||
environment:
|
||||
- JELLYSWARRM_USERNAME=admin
|
||||
- JELLYSWARRM_PASSWORD=jellyswarrm # ⚠️ CHANGER en production !
|
||||
- JELLYSWARRM_HOST=0.0.0.0
|
||||
- JELLYSWARRM_PORT=3000
|
||||
networks:
|
||||
- proxy
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
```
|
||||
|
||||
> 💡 Le tag `latest` est reconstruit à chaque release. Pour un pinning, utilisez `:v0.2.1` (ou version actuelle).
|
||||
|
||||
### Variante Traefik (exposer derrière Traefik)
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml (variante)
|
||||
version: '3.8'
|
||||
services:
|
||||
jellyswarrm:
|
||||
image: ghcr.io/llukas22/jellyswarrm:latest
|
||||
container_name: jellyswarrm
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
environment:
|
||||
- JELLYSWARRM_USERNAME=admin
|
||||
- JELLYSWARRM_PASSWORD=changeme
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=proxy"
|
||||
- "traefik.http.routers.jellyswarrm.rule=Host(`media.example.com`)"
|
||||
- "traefik.http.routers.jellyswarrm.entrypoints=websecure"
|
||||
- "traefik.http.routers.jellyswarrm.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.jellyswarrm.loadbalancer.server.port=3000"
|
||||
networks:
|
||||
- proxy
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
```
|
||||
|
||||
### Option 2 : Binaire natif (build depuis source)
|
||||
|
||||
```bash
|
||||
# Prérequis : Rust toolchain + Node.js 20+
|
||||
git clone --recurse-submodules https://github.com/LLukas22/Jellyswarrm.git
|
||||
cd Jellyswarrm
|
||||
cd ui && npm install && cd ..
|
||||
cargo build --release
|
||||
./target/release/jellyswarrm-proxy
|
||||
```
|
||||
|
||||
## ⚙️ Configuration Initiale
|
||||
|
||||
1. **Lancer le conteneur** : `docker compose up -d`.
|
||||
2. **Accéder à l'UI d'administration** : `http://YOUR_HOST:3000/ui` (login avec `JELLYSWARRM_USERNAME` / `JELLYSWARRM_PASSWORD`).
|
||||
3. **Ajouter les serveurs Jellyfin upstream** : menu "Servers" → URL + clé API de chaque instance Jellyfin.
|
||||
4. **Mapper les utilisateurs** : menu "Users" → lier un compte local à un compte distant.
|
||||
5. **Tester** : `http://YOUR_HOST:3000` affiche l'UI Jellyfin web unifiée, brancher les clients (Android TV, iOS, web) sur cette URL unique.
|
||||
6. **Sécuriser** derrière HTTPS (Traefik/Caddy) avant d'exposer sur Internet.
|
||||
|
||||
> ⚠️ **Changer le mot de passe par défaut** `jellyswarrm` immédiatement après la première connexion.
|
||||
|
||||
## 🔄 Alternatives
|
||||
|
||||
### Open Source
|
||||
|
||||
- **Jellystat** — analytics et stats Jellyfin (pas de fusion)
|
||||
- **Jellyseerr** — requêtes média style Overseerr (Jellyfin-aware)
|
||||
- **JellySync** — synchronisation entre serveurs (expérimental)
|
||||
- **Multi-server dans l'app Jellyfin** — support natif dans certaines apps (Jellyfin Media Player, etc.) mais pas toutes
|
||||
- **SMB / NFS mounts** — monter les bibliothèques distantes (perf réseau catastrophique, pas viable hors LAN)
|
||||
- **Plex** — supporte multi-serveurs nativement mais c'est un autre écosystème
|
||||
|
||||
### Propriétaires (ce que Jellyswarrm remplace)
|
||||
|
||||
- **Plex** (passé à un modèle freemium) — multi-serveurs natif mais non libre
|
||||
- **Emby Premiere** — multi-serveurs en option payante
|
||||
- **Stremio + Real-Debrid** — agrégation SaaS de sources
|
||||
|
||||
### Comparaison rapide
|
||||
|
||||
| Critère | Jellyswarrm | Multi-serveur dans app Jellyfin | Plex |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| Licence | GPL-2.0 | GPL-2.0 (Jellyfin) | Propriétaire |
|
||||
| Fusion bibliothèque | ✅ | ❌ (commutation) | ✅ |
|
||||
| Single login | ✅ | ❌ | ✅ |
|
||||
| Lecture directe | ✅ | n/a | ✅ |
|
||||
| Stabilité | ⚠️ WIP | ✅ | ✅ |
|
||||
| Transcodage | Côté serveur d'origine | Côté serveur sélectionné | Centralisé ou remote |
|
||||
|
||||
**Verdict** : **Jellyswarrm** est la **seule solution self-hosted** connue pour la fusion de bibliothèques Jellyfin. À utiliser si vous avez **réellement plusieurs serveurs** et que la commutation manuelle est insupportable. Sinon, l'ajout multi-serveur natif des clients Jellyfin reste la voie la plus stable.
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
- **Authentification admin** sur `/ui` : changer le mot de passe par défaut
|
||||
- **HTTPS obligatoire** en production (Traefik/Caddy) : Jellyfin utilise des streams longs, MITM est un risque réel
|
||||
- **Clés API Jellyfin upstream** : stockées dans `./data`, sécuriser les permissions du volume (`chmod 700`)
|
||||
- **Mapping d'utilisateurs** : limiter aux comptes de confiance ; un user mappé peut voir la bibliothèque du serveur lié
|
||||
- ⚠️ **Pas d'auth globale sur l'UI Jellyfin** : c'est Jellyswarrm qui **doit** faire office d'authentification, sinon tout le monde voit tout
|
||||
- ⚠️ **WIP** : l'auth et certaines protections sont en cours de durcissement
|
||||
- **Reverse proxy HTTPS** : utiliser les middlewares Traefik `secureHeaders` (HSTS, X-Frame-Options, etc.)
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [README officiel](https://github.com/LLukas22/Jellyswarrm/blob/main/README.md)
|
||||
- [Documentation UI](https://github.com/LLukas22/Jellyswarrm/blob/main/docs/ui.md)
|
||||
- [Documentation Config](https://github.com/LLukas22/Jellyswarrm/blob/main/docs/config.md)
|
||||
- [Reddit r/JellyfinCommunity WIP](https://www.reddit.com/r/JellyfinCommunity/comments/1my7q6p/wip_jellyswarrm_a_reverse_proxy_to_merge_multiple/)
|
||||
- [Patreon LLukas22 (devlog)](https://www.patreon.com/posts/jellyswarrm-into-145059441)
|
||||
|
||||
## Pages Liées
|
||||
|
||||
- [[cat-reverse-proxy]] — Catégorie Reverse Proxy
|
||||
- [[app-caddy]] — reverse proxy L7 pour exposition HTTPS
|
||||
- [[app-traefik]] — reverse proxy L7 cloud-native
|
||||
- [[app-jellyfin]] — Le serveur média en aval
|
||||
- [[comparatif-reverse-proxy]] — Comparaison détaillée
|
||||
- [[media-stack]] — Stack média auto-hébergée
|
||||
Reference in New Issue
Block a user