8.0 KiB
title, created, updated, type, tags, confidence, contested, sources
| title | created | updated | type | tags | confidence | contested | sources | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Meelo | 2026-06-07 | 2026-06-07 | app |
|
high | false |
|
🎼 Meelo
Serveur de streaming musical moderne écrit en Python (FastAPI) + frontend Vue/Nuxt, API Subsonic/OpenSubsonic complète et scanner multi-utilisateurs ultra-rapide conçu pour des bibliothèques jusqu'à plusieurs millions de pistes.
📋 Informations Générales
| Métadonnée | Valeur |
|---|---|
| Site web | https://meeloapp.github.io/Meelo/ |
| GitHub | https://github.com/Arthi-2004/Meelo |
| License | GPL-3.0 |
| Langage | Python (FastAPI) / TypeScript (Vue/Nuxt) |
| Étoiles | ⭐ 36 |
| Dernière MAJ | 2026-06-06 |
| Catégorie | cat-music |
📝 Description
Meelo est un serveur de streaming musical personnel, moderne et ambitieux développé principalement par Arthi-2004. L'objectif affiché est simple : devenir le Navidrome-killer en proposant une UI contemporaine (Nuxt 3, design sombre Material-like) tout en conservant la compatibilité Subsonic/OpenSubsonic, plus des fonctionnalités avancées que ses concurrents n'ont pas (ou peu).
Côté backend, Meelo est écrit en Python avec FastAPI (asynchrone), SQLAlchemy 2 et Pydantic v2, ce qui lui confère une rapidité de scan et une consommation mémoire maîtrisée malgré des bases de données de plusieurs millions de pistes. Le frontend est une SPA Vue 3 / Nuxt 3 avec Tailwind, Pinia et un player HTML5 custom (sans dépendance lourde comme Preact/Tone.js). Le tout est distribué en deux images Docker (backend + frontend) ou en monolithe.
Fonctionnalités phares : API Subsonic/OpenSubsonic complète (donc compatible avec tous les clients Subsonic : app-symfonium, DSub, play:Sub, Substreamer, Feishin…), albums intelligents auto-générés (compils, éditions deluxe, volumes…), gestion fine des doublons et éditions multiples, listes de lecture collaboratives, scrobbling Last.fm / ListenBrainz, transcodage à la volée (FLAC → MP3/Opus), recherche full-text floue, et multi-utilisateurs avec permissions fines. Un système de "tracks preferences" permet à l'algorithme d'apprentissage d'améliorer les suggestions.
Cas d'usage : « j'ai une bibliothèque de 500 000 FLAC sur mon NAS, je veux un serveur qui scanne en moins d'une heure, propose une UI moderne type Spotify, et que mes apps mobiles préfèrent ». Meelo coche la case.
🚀 Installation
Option 1 : Docker Compose (recommandé)
# docker-compose.yml
version: "3.8"
services:
meelo-backend:
image: ghcr.io/arthi-2004/meelo-backend:latest
container_name: meelo-backend
restart: unless-stopped
depends_on:
- postgres
environment:
DATABASE_URL: postgresql+asyncpg://meelo:meelo@postgres:5432/meelo
JWT_SECRET: changez-moi-en-production-32-chars-min
ADMIN_EMAIL: admin@example.com
ADMIN_PASSWORD: changez-moi-aussi
SCAN_INTERVAL: "3600"
TRANSCODING_ENABLED: "true"
FFMPEG_PATH: /usr/bin/ffmpeg
volumes:
- ./data/backend:/app/data
- ./music:/music:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 5s
retries: 3
meelo-frontend:
image: ghcr.io/arthi-2004/meelo-frontend:latest
container_name: meelo-frontend
restart: unless-stopped
depends_on:
- meelo-backend
ports:
- "8081:3000"
environment:
API_URL: http://meelo-backend:8080
PUBLIC_URL: https://meelo.example.com
postgres:
image: postgres:16-alpine
container_name: meelo-db
restart: unless-stopped
environment:
POSTGRES_USER: meelo
POSTGRES_PASSWORD: meelo
POSTGRES_DB: meelo
volumes:
- ./data/db:/var/lib/postgresql/data
Option 2 : Installation manuelle
Cloner le monorepo git clone https://github.com/Arthi-2004/Meelo.git, installer Poetry + Node 20, lancer le backend via poetry install && uvicorn meelo.main:app --reload (PostgreSQL requis), puis le frontend via pnpm install && pnpm dev. Pour la prod : pnpm build (génère un bundle statique servi par Nginx) + le backend derrière Gunicorn + Uvicorn workers dans un systemd unit. Prévoir 2-4 Go de RAM minimum pour 100 000 pistes.
⚙️ Configuration
Meelo se configure via variables d'environnement (12-factor) ou un fichier .env à la racine du backend. Les paramètres clés :
DATABASE_URL: connexion PostgreSQL (obligatoire, SQLite déprécié en prod).JWT_SECRET: obligatoire, 32 caractères min, unique par instance.SCAN_INTERVAL: intervalle de re-scan en secondes (défaut 1 h).TRANSCODING_ENABLED+FFMPEG_PATH: active le transcodage à la volée.LISTENBRAINZ_TOKEN/LASTFM_API_KEY: scrobbling.MAX_UPLOAD_SIZE: taille max des uploads (pour la fonction d'upload web).
L'UI web propose un premier wizard : login admin, ajout du dossier de musique, choix du thème, configuration des providers de métadonnées (Spotify, MusicBrainz, Discogs). Toute la config peut ensuite être éditée depuis Settings → Server (changements persistés en base).
🔄 Alternatives
Open Source / Self-Hosted :
- app-navidrome — Référence en Go, ultra-léger, plus mature.
- app-funkwhale — Fédéré (ActivityPub), axé podcasts et audio social.
- app-koel — UI plus "design", Laravel + Vue, plus gourmand.
- app-gonic — Subsonic-compatible en Go, minimaliste.
- app-jellyfin — Polyvalent (vidéo + musique) avec plugins.
- app-kavita — Plus orienté livres/mangas (autre catégorie).
Propriétaire :
- Plex + Plexamp — L'excellent Plexamp (gratuit avec Plex Pass) offre une expérience musicale aboutie, mais l'écosystème reste fermé et payant.
- Spotify + Serveur personnel — Approche hybride, perd l'intérêt du self-hosted.
- Apple Music iCloud Library — Verrouillage total, aucun contrôle.
🔒 Sécurité
- Reverse proxy HTTPS obligatoire (Traefik, Caddy, Nginx Proxy Manager) — Meelo ne gère pas le TLS nativement.
- JWT_SECRET : générer une chaîne aléatoire de 64 caractères (
openssl rand -hex 32), ne jamais commiter le.env. - PostgreSQL : mot de passe fort, ne pas exposer le port 5432 sur l'interface réseau, uniquement via le réseau Docker.
- Dossier musique en
:ro:read-onlydans le compose, Meelo n'écrit jamais dedans (sauf si vous activez l'upload web, dans ce cas prévoir un dossieruploads/séparé). - Rate limiting : activer CrowdSec/Fail2ban au niveau du reverse proxy, Meelo ne l'implémente pas en natif.
- Mises à jour : suivre les releases GitHub, le projet est jeune (alpha/beta) — ne pas déployer en prod critique sans tests.
- Sauvegardes :
pg_dumprégulier de la base + le dossierdata/(cache transcodage, illustrations).
📚 Ressources
- Site officiel : https://meeloapp.github.io/Meelo/
- Documentation : https://github.com/Arthi-2004/Meelo/wiki
- Repository : https://github.com/Arthi-2004/Meelo
- Issues : https://github.com/Arthi-2004/Meelo/issues
- Discord communautaire : https://discord.gg/meelo
- Démo en ligne : https://demo.meeloapp.github.io (compte démo fourni)
- API Subsonic : https://www.subsonic.org/pages/api.jsp
🔗 Pages Liées
- cat-music — Catégorie parente
- app-navidrome — Concurrent Go, plus mature et plus léger
- app-funkwhale — Alternative fédérée ActivityPub
- app-koel — Concurrent PHP/Vue avec UI "premium"
- app-gonic — Subsonic-compatible minimaliste
- app-symfonium — Client Android recommandé
- app-feishin — Client desktop multi-plateforme
- recettes-docker-compose — Templates Docker Compose
- securisation-home-lab — Bonnes pratiques sécurité
- app-traefik — Reverse proxy HTTPS