187 lines
8.4 KiB
Markdown
187 lines
8.4 KiB
Markdown
---
|
|
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
|