Installer Meelo avec Docker
Meelo

Installer Meelo avec Docker

Table des matières

GitHub - Arthi-chaud/Meelo: Self-Hosted, Personal Music Server, designed for collectors and music maniacs
Self-Hosted, Personal Music Server, designed for collectors and music maniacs - Arthi-chaud/Meelo

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

  1. Créez votre docker-compose.yml dans le dossier ou vous comptez installer Mello:
sudo nano docker-compose.yml
  1. 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:

PwGen
Secure password generator

Voici comment le configurer;

  1. On va créer le fichier nginx.conf.template:
sudo nano nginx.conf.template
  1. 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};
        }
}
  1. 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
  1. 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:

Sélectionne

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:

upload in progress, 0

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:

upload in progress, 0

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:

Meelo - User Documentation

zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.