Post

🎸 Musique - Service Audio Gonic

🎸 Musique - Service Audio Gonic

Gonic est un serveur de diffusion de musique léger conçu pour fournir aux utilisateurs un moyen simple et efficace de diffuser leurs collections de musique. Il est compatible avec le protocole Subsonic, permettant aux utilisateurs d’accéder à leur musique à partir de divers appareils et plates-formes qui prennent en charge Subsonic. Gonic se concentre sur la fourniture d’une expérience de streaming musical simplifiée sans fonctionnalités ou complexités inutiles, ce qui le rend idéal pour les utilisateurs qui préfèrent une approche minimaliste du streaming musical.

Serveur Audio Gonic

Caractéristiques de Gonic

  • navigation par dossier
  • navigation par tags (en utilisant taglib - prend en charge mp3, opus, flac, ape, m4a, wav, etc.)
  • transcodage et cache audio à la volée (demande ffmpeg)
  • mode jukebox subsonic (mpv), pour lecture audio côté serveur sans faille au lieu de streaming
  • soutien aux podcasts
  • balayage assez rapide
  • plusieurs utilisateurs, chacun avec ses propres préférences de transcodage, playlists, meilleurs titres, meilleurs artistes, etc.
  • [last.fm] (https://www.last.fm/)
  • listenbrainz scrobbling
  • les similarités artistiques et les biographies de la dernière. - Oui.
  • prise en charge de tags multi-valorisés comme les albumartistes et les genres
  • une interface web pour la configuration (configurer en dernier. fm, gérer les utilisateurs, lancer des scans, etc.)
  • soutien au tag album-artiste, pour ne pas encombrer votre liste d’artistes avec des apparitions d’albums de compilation
  • écrit en go
  • sel plus récent et jeton auth
  • testés sur airsonic-refix, symfonium, dsub, jamstash, subsonic.el, sublime music, soundwaves, stmp, strawberry, et [subs/subs/

Prérequis

Golang

1
2
sudo apt install golang
go version  #go version go1.26.4 linux/amd64 

Optionnel

  • mpv n’est requis que si vous voulez le mode jukebox
  • ffmpeg n’est requis que si vous souhaitez transcoder de l’audio
1
sudo apt install fmpeg mpv

Installation gonic

Installer et vérifier

1
2
3
sudo wget https://github.com/sentriz/gonic/releases/download/v0.22.0/gonic-linux-amd64-v0.22.0 -O /usr/local/bin/gonic
sudo chmod +x /usr/local/bin/gonic
gonic -version  # v0.22.0

ajouter un utilisateur gonic, créer un répertoire de données et installer le fichier de configuration

1
2
3
4
sudo adduser --system --no-create-home --group gonic
sudo mkdir -p /var/lib/gonic/ /etc/gonic/
sudo chown -R gonic:gonic /var/lib/gonic/
sudo wget https://raw.githubusercontent.com/sentriz/gonic/master/contrib/config -O /etc/gonic/config

mettre à jour la configuration /etc/gonic/config avec votre music-path, podcast-path, etc…

1
2
3
4
5
6
7
8
9
music-path                   /sharenfs/multimedia/Music/musicyan
podcast-path                /sharenfs/multimedia/Music/podcasts
playlists-path               /sharenfs/multimedia/Music/playlists

# Interval (in minutes) to check for new music. Default: don't scan
scan-interval                      0
scan-at-start-enabled       true
scan-watcher-enabled      
false

Service gonic

installer le service système, vérifier l’état ou les journaux

Chaque service généré par systemd est configuré par un fichier .service qui se trouve dans le répertoire /etc/systemd/system

1
2
3
4
5
6
7
sudo wget https://raw.githubusercontent.com/sentriz/gonic/master/contrib/gonic.service -O /etc/systemd/system/gonic.service
sudo systemctl daemon-reload
sudo systemctl enable --now gonic

systemctl status gonic            # vérifier status, doit être actif (running)
journalctl -f -u gonic            # suivre logs
journalctl -t gonic               # trace

Accès web

Via SSH

  • Gonic → localhost:4747

on va utiliser une redirection de port via ssh

Serveur audio gonic
Ouvrir un terminal sur le client linux qui dispose des clés ssh et lancer la commande

1
ssh -L 9500:127.0.0.1:4747 yick@192.168.0.205 -p 55205 -i /home/yann/.ssh/yick-ed25519

Ouvrir un navigateur sur le client et saisir localhost:9500 pour afficher le serveur audio gonic
gonic-via-ssh.png
Par défaut : admin/admin

Proxy nginx zic.rnmkcy.eu

Gonic est un serveur local http sur le port 4747 et pour un accès externe il nous faut un proxy

Proxy nginx - configuration /etc/nginx/conf.d/zic.rnmkcy.eu.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name zic.rnmkcy.eu;

    include /etc/nginx/conf.d/ssl-modern.inc;

    location / {
        proxy_pass http://localhost:4747;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

On vérifie et on relance le serveur nginx

1
2
sudo nginx -t
sudo systemctl reload nginx

Accès https://zic.rnmkcy.eu

  • Créer un utilisateur ‘audio’
  • Changer le mot de passe admin

Playlist aléatoire

Tu peux inspecter la base avec sqlite3 :

1
sqlite3 /var/lib/gonic/gonic.db ".tables"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
album_credits                 play_queues                 
album_disc_titles             podcast_episodes            
album_genres                  podcasts                    
album_infos                   sessions                    
album_labels                  settings                    
album_ratings                 track_credits               
album_stars                   track_genres                
albums                        track_isrcs                 
artist_infos                  track_plays                 
artist_ratings                track_ratings               
artist_stars                  track_stars                 
artists                       tracks                      
bookmarks                     transcode_format_preferences
genres                        transcode_preferences       
internet_radio_stations       users                       
migrations                  

Voir le schéma de la table users :

1
sqlite3 /var/lib/gonic/gonic.db "PRAGMA table_info(users);"
1
2
3
4
5
6
7
8
9
0|id|INTEGER|0||1
1|created_at|datetime|0||0
2|name|varchar(255)|1|null|0
3|password|varchar(255)|1|null|0
4|last_fm_session|varchar(255)|0|null|0
5|listen_brainz_url|varchar(255)|0|null|0
6|listen_brainz_token|varchar(255)|0|null|0
7|is_admin|bool|0|null|0
8|avatar|BLOB|0|null|0

Lire les lignes :

1
2
#sqlite3 /var/lib/gonic/gonic.db "SELECT * FROM tracks LIMIT 20;"
sqlite3 /var/lib/gonic/gonic.db "SELECT * FROM users;"
1
2
1|2026-07-11T07:45:00.036938678+02:00|admin|mot_de_passe||||1|
2|2026-07-11T07:51:10.369610847+02:00|audio|mot_de_passe|||||

Si tu ne sais pas les tables, fais seulement :

1
sqlite3 /var/lib/gonic/gonic.db ".schema"

ATTENTION: Les playlists sont liées à l’utilisateur qui a chacun son numéro

  • 1 admin /sharenfs/multimedia/Music/playlists/1
  • 2 audio /sharenfs/multimedia/Music/playlists/2

Outil linux cli pour créer une playlist m3u dans le dossier utilisateur “audio” /sharenfs/multimedia/Music/playlists/2 à partir du dossier /sharenfs/multimedia/Music/musicyan/

.mp3 aléatoire , listes 100 200 300: /sharenfs/scripts/gener_playlists.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bash -lc '
in="/sharenfs/multimedia/Music/musicyan"
outdir="/sharenfs/multimedia/Music/playlists/2"
mkdir -p "$outdir"

# nombre de playlists + tailles
sizes=(100 200 300)

# crées 1 playlist par taille (ajuste COUNT si tu veux plusieurs par taille)
for size in "${sizes[@]}"; do
  out="$outdir/playlist_${size}_alatoire.m3u"

  echo "#EXTM3U" > "$out"
  # prend jusqua $size fichiers mp3 sans récursivité
  mapfile -t files < <(find "$in" -maxdepth 1 -type f -iname "*.mp3" | shuf)
  n="${#files[@]}"
  if [ "$n" -gt 0 ]; then
    take=$size
    [ "$n" -lt "$take" ] && take="$n"
    for i in $(seq 0 $((take-1))); do
      printf "%s\n" "${files[$i]}" >> "$out"
    done
  fi
  echo "OK: $out"
done
'

Le rendre exécutable et exécuter

1
2
chmod +x /sharenfs/scripts/gener_playlists.sh
/sharenfs/scripts/gener_playlists.sh

le script crée 3 fichiers M3U distincts dans /sharenfs/multimedia/Music/playlists/2/ :

1
2
3
OK: /sharenfs/multimedia/Music/playlists/2/playlist_100_alatoire.m3u
OK: /sharenfs/multimedia/Music/playlists/2/playlist_200_alatoire.m3u
OK: /sharenfs/multimedia/Music/playlists/2/playlist_300_alatoire.m3u
Cet article est sous licence CC BY 4.0 par l'auteur.