![음악 관리 서버를 찾기 위한 여정과 gonic](/content/images/size/w1200/2024/07/image-3-2.png)
음악을 자주 듣는 편이라서, 이것저것 긁어모은 음원파일들이 꽤나 많아졌습니다. 이 음원들을 서버에다 다 때려박아놓고 관리하고 있는데, 최종적으로는 gonic 이라는 프로그램에 정착해서 음악을 이걸로 관리하고 있습니다.
plex / jellyfin
처음에는 단순하게
영상과 음원 둘다 하나에서 관리하면 더 편하지 않을까?
를 이유로 plex, jellyfin을 둘 다 사용해 보았습니다.
plex는 유료 구독이라는게 맘에 안들어서 잠깐 사용했었던 것 같고, jellyfin과 jellyfin을 지원하는 오픈소스 안드로이드 음악 플레이어인 finamp 를 꽤나 오랜 시간동안 사용했었습니다.
![](https://blog.koder.page/content/images/2024/07/image-8.png)
서드파티 플레이어 중에서는 드물게도 양 운영체제스토어에 출시되어 있습니다.
사실 사용시에 큰 문제가 없었어서 여전히 추천드릴 수 있는 프로그램인데, 제가 jellyfin/finamp 을 빠져나온 이유는 다음과 같습니다
- 생각했던것보다 영상을 저장할 일이 없음
- 파일 스캔 관련해서 묘하게 느림
특히나 첫째 이유가 컸는데, jellyfin은 영상 사진 책 음악 등 다기능을 지원했으나 저는 음악만 재생할 수 있으면 되었기에 굳이 jellyfin을 사용할 이유가 없었습니다.
영상의 경우에는 ott서비스 구독을 통해서 해결하고 있습니다.
이런 분들에게는 jellyfin + finamp 조합을 추천드립니다
- 음악뿐만 아니라 영상도 같이 관리하고 싶은 사람
- 통일된 포맷으로 파일을 잘 관리하고 계신 분들
- ios 환경에 있으신 분들 (앱스토어에 있어 편합니다)
jellyfin은 사진이나 전자책까지도 전부 지원을 하는데, 전자책만을 위한 솔루션인 komga 등과는 다르게 epub 정도만 지원을 하고 있기 때문에, 모든 전자책 파일을 epub으로 변환 후 소장하고 있다던가 하시는 분들은 전자책도 가볍게 사용해보실 수 있을 것 같습니다.
airsonic / airsonic-advanced
잠깐 알아본 뒤 subsonic api를 지원하는 서버로 선택하면 플레이어의 폭이 넓어지는것을 깨닫고는, subsonic의 오픈소스 버전인 airsonic과 airsonic-advanced를 선택해 보았습니다.
![](https://blog.koder.page/content/images/2024/07/image-1-1.png)
그런데, 두 프로그램 모두 2024년 현 상황에서는 사실상 개발중단이고, 그뿐만 아니라 제 서버 상에서 제대로 작동하지 않는다는 문제점이 있었습니다.
몇몇 설정페이지를 열어도 반응이 없는 등 사용하기에 불편했기에, 다른 프로그램을 선택하게 됬습니다.
navidrome
subsonic api를 사용하고 있는 또 다른 오픈소스 프로그램, navidrome입니다.
![](https://blog.koder.page/content/images/2024/07/image-2-2.png)
이쪽은 작동 자체는 원활하게 잘 되었으나, 명확한 단점이 존재합니다. 폴더 기반으로 곡을 탐색할 수 없기에, 다양한 장르의 곡을 듣는 제가 노래를 정리하기에 너무 어려웠습니다.
기존의 폴더 기반 정리를 할때는 장르별로 폴더를 나누어 두었기에 찾기 쉬웠으므로, 폴더별 탐색을 지원하는 서버를 찾고자 하였습니다.
gonic
결론을 내려 보자면
제가 음악 서버 프로그램에 바라는 점은
- subsonic api ( 클라이언트가 다양 )
- 폴더 기반 정리가 가능해야함
- 빨라야 함
정도가 있습니다
이 모두를 충족시키는 프로그램으로 gonic을 발견했고,
지금은 gonic을 사용해 제 음악 파일들을 관리하고 있습니다.
![](https://blog.koder.page/content/images/2024/07/image-3-3.png)
사진부터 정말 깔끔함 단 하나를 추구했다는 것이 느껴집니다. 다른 프로그램들은 웹 상에서 플레이 가능하게 되어있지만, gonic은 웹 플레이어가 따로 존재하지 않습니다.
하지만, 웹 플레이어가 따로 필요하신 분은 그냥 subsonic api와 호환되는 아무 프론트엔드 프로그램을 도커에 올려버리면 되기 때문에, 이 부분에 있어서도 큰 단점이 되지는 않을 것 같습니다.
gonic의 설치
docker-compose 파일을 첨부합니다.
해당 파일을 편하신 대로 수정해서 사용하시면 됩니다.
# example docker-compose.yml
version: "2.4"
services:
gonic:
image: sentriz/gonic:latest
environment:
- TZ
# optionally, see more available env vars in the readme
ports:
- 4747:80
volumes:
- ./data:/data # gonic db etc
- /path/to/music:/music:ro # your music
- /path/to/podcasts:/podcasts # your podcasts
- /path/to/playlists:/playlists # your playlists
- /path/to/cache:/cache # transcode / covers / etc cache dir
# set the following two sections if you've enabled jukebox
group_add:
- audio
devices:
- /dev/snd:/dev/snd
volumes에서 data와 music은 기본적으로 연결을 해주었었는데, playlist도 반드시 연결을 해주어야 제대로 작동하는 것으로 보입니다.
저는 portainer 환경에서 compose 없이 적당히 설치해서 쓰고 있습니다. volume 연결과 포트만 잘 맞춰주시면 큰 문제 없이 사용하실 수 있습니다.
gonic과 synology
저는 헤놀로지 상에서 파일을 관리하며, 이 파일들을 NFS 서버로 열어서 gonic이 돌아가는 docker 컨테이너용 VM과 연결해 뒀습니다.
여기서 파생되는 문제가, 시놀로지에서 메타데이터를 저장하기 위해 만드는 폴더인 @eadir
이 모든 폴더에 생긴다는 것이었습니다.
이것은 특히나 subsonic api 호환 플레이어인 sonixd
와의 궁합이 최악이었는데, 폴더로 인해 음악 이름이 전부 한칸씩 밀리고 첫번째 트랙은 재생이 불가능하다는 크리티컬한 문제점이 있었습니다.
gonic에 환경변수를 넘겨주는 것으로 이를 해결할 수 있습니다.
GONIC_EXCLUDE_PATTERN=@eadir
으로 @eaDir
파일을 무시할 수 있게 설정해주고 서버를 재시작 한뒤 재스캔해주면, 해당 폴더가 깔끔히 사라지고 정상적으로 동작하는것을 보실 수 있습니다.
![](https://blog.koder.page/content/images/2024/07/image-4-1.png)
원래 정규식이기 때문에, 보다 복잡한 패턴에도 매칭시키실 수 있어서 꼭 @eaDir
문제가 아니더라도 생각보다 유용하게 사용하실 수 있을겁니다.
서드파티 플레이어
gonic은 문자 그대로 서버만 제공하기 때문에, 음악을 재생하기 위해서는 클라이언트 프로그램이 필요합니다.
저는 안드로이드 환경에서 음악을 재생하기 위해 tempo
를 사용하고 있으며,
![](https://blog.koder.page/content/images/2024/07/image-5-1.png)
윈도우 환경에서는 sonixd
를 사용하고 있습니다.
![](https://blog.koder.page/content/images/2024/07/image-6-1.png)
결론
제가 정착한 gonic은 그저 저의 예시일 뿐이며, 개인의 사용 패턴에 따라서 수많은 프로그램들 중 하나를 취사선택할 수 있는 것이 selfhosting의 매력인만큼 자유롭게 선택해서 사용해주시면 좋을것 같습니다.
이런 프로그램들이 있고 이 사람은 이걸 쓰고 있구나 정도가 적합하지 않을까 싶습니다.