Post

cwwk - Service Audio Gonic

cwwk - Service Audio Gonic

Gonic, service qui implémente l’API Subsonic pour le streaming audio, écrit en Go

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 - Installer la dernière version de Go

Les outils (ajouter mpv si utilisé)

1
sudo apt install build-essential git sqlite3 libtag1-dev ffmpeg

Installation gonic

Le dossier de l’application

1
sudo mkdir -p /opt/gonic

Le dossier musique est local /home/usernl/backup/musique, créer un lien sur ce dossier

1
sudo ln -s /home/usernl/backup/musique /opt/gonic/music

Installer “gonic”

1
2
3
4
5
6
# dépendances
sudo apt install build-essential git sqlite3 libtag1-dev ffmpeg    
cd $HOME/
# installation/compilation gonic, et vérifier la version
# sudo GOBIN=/usr/local/bin 
go install go.senan.xyz/gonic/cmd/gonic@latest

Copier l’exécutable “gonic” dans /usr/local/go/bin/

1
sudo cp $HOME/go/bin/gonic /usr/local/bin/   

Version: gonic -version
v0.16.4

Créer utilisateur dossier et configuration

Ajouter un utilisateur gonic, créer un répertoire de données et installer un 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

Configuration

Le fichier /etc/gonic/config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Interface and port to listen on. Defaults to 0.0.0.0:4747
listen-addr                 127.0.0.1:4747
# gonic's internal state database location
db-path                     /var/lib/gonic/gonic.db
# music-path                  /srv/audio/music
music-path                  /sharenfs/multimedia/Music/musicyan
# podcast-path                /var/cache/podcast
podcast-path                /sharenfs/multimedia/Music/podcasts
# playlists-path             /srv/audio/playlists
playlists-path              /sharenfs/multimedia/Music/playlists
# Directory where transcoded audio files and covers are stored. It's safe to
# delete contents periodically (see tmpfilesd configuration), as it will be
# regenerated.
cache-path                  /var/cache/gonic

Service gonic

Que fait le service ?

  • Le dossier musique est local
  • lancer le serveur “gonic” en écoute local sur le port 4747 avec les options -music-path, -db-path et -proxy-prefix
  • A l’arrêt,tuer la tâche “gonic”

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
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            # check status, should be active (running)
#journalctl --follow --unit gonic  # check logs

Status service: systemctl status gonic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
● gonic.service - gonic service
     Loaded: loaded (/etc/systemd/system/gonic.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-12-24 18:04:30 CET; 3s ago
   Main PID: 127009 (gonic)
      Tasks: 8 (limit: 38144)
     Memory: 7.5M
        CPU: 21ms
     CGroup: /system.slice/gonic.service
             └─127009 /usr/local/bin/gonic -config-path /etc/gonic/config

déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30     scan-at-start-enabled     false
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30     scan-interval             0
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30     scan-watcher-enabled      false
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30     tls-cert
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30     tls-key
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30     version                   false
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30 starting job "session clean"
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30 starting job "http"
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30 starting job "podcast refresh"
déc. 24 18:04:30 cwwk gonic[127009]: 2024/12/24 18:04:30 starting job "podcast download"

Visualiser le journal

1
sudo journalctl -t gonic
1
2
3
4
5
6
7
8
9
10
11
12
13
-- Logs begin at Mon 2020-06-29 11:14:09 CEST, end at Mon 2020-06-29 15:57:28 CEST. --
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28 starting gonic v0.8.8
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28 provided config
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     cache-path      /tmp/gonic_cache
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     config-path
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     db-path         /opt/gonic/gonic.db
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     jukebox-enabled false
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     listen-addr     0.0.0.0:4747
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     music-path      /opt/gonic/music
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     proxy-prefix    /
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     scan-interval   0
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28     version         false
Jun 29 15:57:28 vps70253415 gonic[12048]: 2020/06/29 15:57:28 starting job 'http'

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 5900: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

admin/TrailleHumideGermonSynapsePolysoc

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
20
21
22
23
24
25
26
27
28
29
30
31
32
server {
    listen 80;
    listen [::]:80;
    server_name  zic.rnmkcy.eu;

    # redirect all plain HTTP requests to HTTPS
    return 301 https://zic.rnmkcy.eu$request_uri;
}

server {
    # ipv4 listening port/protocol
    listen       443 ssl http2;
    # ipv6 listening port/protocol
    listen           [::]:443 ssl http2;
    server_name  zic.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;

    # Proxy audio gonic server
    location / {

      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;

      proxy_pass          http://127.0.0.1:4747;
      proxy_read_timeout  120;
    }

}

On vérifie et on relance le serveur nginx

1
2
sudo nginx -t
sudo systemctl reload nginx

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

Cet article est sous licence CC BY 4.0 par l'auteur.