C'est élégant, bien conçu, très réactif et moderne, non, je ne parle pas de moi, mais bien de Meelo!
Au début j'ai un peu galéré lors de mes tests car je n'avais pas la bonne discipline dans l'organisation de mes dossiers, des fichiers et ils étaient aussi mal nommés. Il faut respecter à la lettre quelques petites règles de base. Pour vous éviter mes galères, je vais tout vous expliquer. Cela vaut la peine car ce serveur de musique est tout simplement sublime!
Petite mention au dev qui a été très réactif lors de nos échanges, qui a même corrigé un bug dans la foulée et qui m'a donné de précieux conseils. Merci Arthur! 👍
Meelo est un serveur de musique et une application pour profiter de vos fichiers musicaux personnels n'importe où et à tout moment. Ce projet est réalisé par et pour des collectionneurs de musique. Son objectif est de disposer d'un moyen propre, organisé, simple et accessible de stocker et de servir des fichiers.
⚡Caractéristiques
- Fichiers organisés en bibliothèques.
- Rechercher de nouveaux fichiers et nettoyage de la bibliothèque.
- Organisation musicale proche d'une collection de collectionneurs de musique.
- Accédez, diffusez et téléchargez des chansons depuis votre serveur.
- Vidéos musicales.
- Listes de lecture.
- Analyse des métadonnées.
- Gestion des fichiers d'illustration intégrés et en ligne.
- Fournisseurs de métadonnées externes (facultatif).
- Téléchargement automatisé des paroles.
- Gestion des utilisateurs.
- Prise en charge multilingue:
- Anglais
- Français - S'adapte parfaitement sur smartphone & tablette.
- Et bien d'autres...
L'installation
- Créez votre docker-compose.yml dans le dossier ou vous comptez installer Mello:
sudo nano docker-compose.yml
- Collez ça dedans:
# This compose allows to setup the whole project in the production environment
services:
server:
image: ghcr.io/arthi-chaud/meelo-server:latest
expose:
- 4000
restart: on-failure
depends_on:
db:
condition: service_healthy
# meilisearch:
# condition: service_healthy
volumes:
- ${DATA_DIR}:${INTERNAL_DATA_DIR}
- ${CONFIG_DIR}:${INTERNAL_CONFIG_DIR}
env_file:
- .env
environment:
- TRANSCODER_URL=http://transcoder:7666
- MEILI_HOST=http://meilisearch:7700
- REDIS_HOST=redis
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/${POSTGRES_DB}?schema=public
healthcheck:
test: ["CMD-SHELL", "wget -qO- localhost:4000"]
interval: 5s
timeout: 5s
retries: 5
front:
image: ghcr.io/arthi-chaud/meelo-front:latest
expose:
- 3000
depends_on:
server:
condition: service_healthy
environment:
- PUBLIC_SERVER_URL=${PUBLIC_SERVER_URL}
- SSR_SERVER_URL=http://server:4000
redis:
image: redis:7.0-alpine
healthcheck:
test: ["CMD", "redis-cli","ping"]
interval: 5s
timeout: 5s
retries: 5
db:
image: postgres:alpine3.14
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
env_file:
- .env
volumes:
- db:/var/lib/postgresql/data
meilisearch:
image: getmeili/meilisearch:v1.5
restart: on-failure
expose:
- 7700
volumes:
- search:/meili_data
environment:
- MEILI_ENV=production
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--spider", "http://0.0.0.0:7700/health"]
timeout: 5s
retries: 5
transcoder:
image: ghcr.io/zoriya/kyoo_transcoder:master
restart: on-failure
cpus: 1
expose:
- 7666
environment:
- GOCODER_SAFE_PATH=${INTERNAL_DATA_DIR}
volumes:
- ${DATA_DIR}:${INTERNAL_DATA_DIR}:ro
- transcoder_cache:/cache
profiles: ['', 'cpu']
nginx:
restart: on-failure
image: nginx:1.24.0-alpine
depends_on:
server:
condition: service_started
front:
condition: service_started
ports:
- ${PORT:-5000}:5000
environment:
- PORT=5000
- FRONT_URL=http://front:3000
- SERVER_URL=http://server:4000
volumes:
- ./nginx.conf.template:/etc/nginx/templates/meelo.conf.template:ro
volumes:
db:
config:
data:
search:
transcoder_cache:
3: On va créer le fichier .env:
# The port on the host where meelo will be accessible
PORT=3333
# Username to access database
POSTGRES_USER=test
# Password to access database
POSTGRES_PASSWORD=test
# Name of Meelo's database
POSTGRES_DB=test
# Hostname from which Meelo can access the database
# If dockerized, this must be the container_name
POSTGRES_HOST=db
####################
# The path to the `settings.json` file, and the illustration/metadata folder (on the host machine)
CONFIG_DIR=./config
# The root path of your libraries (on the host machine)
DATA_DIR=./
####################
# Server URL that would be accessible to the front app's server or any client
PUBLIC_SERVER_URL=http://192.168.1.152:3333/api
####################
# Random String used to sign JWT Tokens
JWT_SIGNATURE=1010101011101110
# Key used to authenticate the Meilisearch Instance
# Should be a random string, must be at least 16 bytes
MEILI_MASTER_KEY=1010101011101110
####################
# Do not change this
INTERNAL_DATA_DIR=/data
INTERNAL_CONFIG_DIR=/config
Veillez à modifier:
- PORT=3333 => Si ce port est déjà d'occupé par une autre application, changez-le.
- POSTGRES_USER=test => Choisissez un nom d'utilisateur pour la base de données.
- POSTGRES_PASSWORD=test => Choisissez un mot de passe pour la base de données.
- POSTGRES_DB=test => Choisissez un nom pour la base de données.
- PUBLIC_SERVER_URL=http://192.168.1.152:3333/api => Remplacez 192.168.1.152 par l'IP de votre serveur et éventuellement adaptez le port 3333 si vous l'avez changé.
- JWT_SIGNATURE=1010101011101110 => Mettez un mot de passe fort.
- MEILI_MASTER_KEY=1010101011101110 => Indiquez une série de chiffres/lettres de minimum 16 caractères.
belginux vous propose un service pour générer des mots de passe:
Voici comment le configurer;
- On va créer le fichier nginx.conf.template:
sudo nano nginx.conf.template
- Et coller ça dedans:
server {
listen ${PORT} default_server;
listen [::]:${PORT} default_server;
access_log off;
server_name _;
location = /api {
return 302 /api/;
}
location /api/ {
proxy_pass ${SERVER_URL}/;
}
location / {
proxy_pass ${FRONT_URL};
}
}
- On va créer le dernier fichier, le fichier settings.json:
sudo nano settings.json
Et coller ça dedans:
{
"trackRegex": [
"(.+[\\/\\\\]+)*(?<Artist>.+)[\\/\\\\]+(?<Album>.+?)(\\s*\\((?<Year>\\d+)\\))?(\\s*\\[(?<DiscogsId>\\d+)\\])?[\\/\\\\]+((?<Disc>[0-9]+)-)?(?<Index>[0-9]+)\\s+(?<Track>.*)\\..*$"
],
"metadata": {
"source": "embedded",
"order": "only",
"useExternalProviderGenres": true
},
"providers": {
"musicbrainz": {}
},
"compilations": {
"useID3CompTag": true,
"artists": [
"Various Artists"
]
}
}
On va déployer l'application:
docker compose up -d
- Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 3333 par défaut:
http://ip:3333/
ou votre domaine:
https://mondomaine.com
Créer son compte administrateur
Lors du premier lancement de l'application, vous allez devoir créer votre compte administrateur, cliquez sur Nouveau ici? Inscrivez-vous:
Complétez les informations demandées:
- Nom d'Utilisateur => Choisissez votre nom d'utilisateur.
- Mot de passe => Choisissez un mot de passe fort.
- Confirmez le mot de passe => Confirmez votre mot de passe.
Cliquez sur SIGNUP.
Félicitations, vous voilà sur la page principale de Meelo! 🎉
Choisir le monde sombre ou clair
Dans le menu de gauche, cliquez sur Préférences:
Dans interface, cochez le thème souhaité:
Le mode clair:
Le mode sombre:
Choisir la langue
Dans le menu de gauche, cliquez sur Préférences:
Sélectionnez la langue souhaitée:
Où mettre sa musique?
Quand vous avez déployé votre serveur, il y a un dossier data qui a été créé, vous pouvez l'utiliser ou créer le(s) vôtre(s). Partons du postulat que vous utilisiez le dossier data.
Il faudra donc transférer vos dossiers dedans, mais, pas sans avoir pris la peine de lire le point suivant.
Comment organiser ses dossiers et fichiers?
C'est ici qu'il va falloir être très appliqué. J'en ai fait les frais d'envoyer tout "à la va te faire foutre, pourvu que ça fonctionne", et bien non. J'imagine qu'il y a des personnes qui ont plus l'habitude et qui vont trouver logique ce qui suit. Gloire à Vous!
Finalement c'est peut-être aussi l'occasion de bien réorganiser votre bibliothèque.
Voici ce que dit la documentation officielle:
Je vais prendre le premier l'album de Billy Ze Kick et les Gamins en folie en exemple, qui se nomme... Billy Ze Kick et les Gamins en folie.
Voici le contenu du dossier data:
Il faut respecter à la lettre le nom de l'artiste ou du groupe. Pas d'extravagances. Entrons dans le dossier, c'est dans ce dossier que vous devrez mettre tous les albums du groupe/artiste. Et là aussi, tenez-vous en au titre de l'album tel qu'il a été publié, vous pouvez vous aider de
Et dans le dossier, tous les titres. Et là aussi, on respecte à la lettre les titres des morceaux:
La couverture doit avoir le nom de cover.jpg, cela dit, il est possible de l'ajouter après. Donc c'est pas encore le plus important.
Pour la numérotation des pistes, vous pouvez soit faire:
- 01 - xxxx
ou
- 01 xxxx
Si vous respectez ces principes de base, tout sera admirablement bien reconnu!
Mais pourquoi tant de précisions? Car Meelo se base sur Musicbrainz. une encyclopédie musicale.
Ajouter une bibliothèque
Dans le menu de gauche, cliquez sur Préférences:
Maintenant, cliquez sur Bibliothèques:
Sélectionnez Créer une bibliothèque:
Complétez les deux informations demandées:
- Nom de la bibliothèque => Peut importe, tant que ça vous plaît, nommez votre bibliothèque.
- Chemin de la bibliothèque => Indiquez simplement et uniquement le nom du dossier, ici data ou le nom du dossier que vous avez prévu à cet effet.
Validez en cliquant sur Créer.
Cliquez sur Scanner:
Patientez un peut (c'est très rapide) et retournez sur la page d'accueil de Meelo pour vois apparaître l'album.
Problèmes de permissions sur le dossier data?
Si éventuellement vous rencontrez un problème de permissions faites cette commande en tenant compte de votre ID. Mais comment avoir son ID?
Tapez id dans votre terminal:
Notez la valeur de uid et et gid et adaptez cette commande, à faire à la racine du dossier de Meelo:
chown 1000:1000 -R data
Options sur un album
Vous avez la possibilité de changer l'illustration d'un album, rafraichir les métadonnées, partager l'album,... Pour cela, cliquez sur les trois points et choisissez dans le menu.
Pour aller plus loin
Vous voilà lancé sur Meelo, si vous avez besoin de plus d'informations: