gonic 음악 서버 정착기

음악을 자주 듣는 편이라서, 이것저것 긁어모은 음원파일들이 꽤나 많아졌습니다. 이 음원들을 서버에다 다 때려박아놓고 관리하고 있는데, 최종적으로는 gonic 이라는 프로그램에 정착해서 음악을 이걸로 관리하고 있습니다.

plex / jellyfin

처음에는 단순하게

영상과 음원 둘다 하나에서 관리하면 더 편하지 않을까?

를 이유로 plex, jellyfin을 둘 다 사용해 보았습니다.
plex는 유료 구독이라는게 맘에 안들어서 잠깐 사용했었던 것 같고, jellyfin과 jellyfin을 지원하는 오픈소스 안드로이드 음악 플레이어인 finamp 를 꽤나 오랜 시간동안 사용했었습니다.

서드파티 플레이어 중에서는 드물게도 play스토어에 출시되어 있습니다.

사실 사용시에 큰 문제가 없었어서 여전히 추천드릴 수 있는 프로그램인데, 제가 jellyfin/finamp 을 빠져나온 이유는 다음과 같습니다

  • 생각했던것보다 영상을 저장할 일이 없음
  • 파일 스캔 관련해서 묘하게 느림

특히나 첫째 이유가 컸는데, jellyfin은 영상 사진 책 음악 등 다기능을 지원했으나 저는 음악만 재생할 수 있으면 되었기에 굳이 jellyfin을 사용할 이유가 없었습니다.

영상의 경우에는 ott서비스 구독을 통해서 해결하고 있습니다.

이런 분들에게는 jellyfin + finamp 조합을 추천드립니다

  • 음악뿐만 아니라 영상도 같이 관리하고 싶은 사람
  • 통일된 포맷으로 파일을 잘 관리하고 계신 분들

jellyfin은 사진이나 전자책까지도 전부 지원을 하는데, 전자책만을 위한 솔루션인 komga 등과는 다르게 epub 정도만 지원을 하고 있기 때문에, 모든 전자책 파일을 epub으로 변환 후 소장하고 있다던가 하시는 분들은 전자책도 가볍게 사용해보실 수 있을 것 같습니다.

airsonic / airsonic-advanced

잠깐 알아본 뒤 subsonic api를 지원하는 서버로 선택하면 플레이어의 폭이 넓어지는것을 깨닫고는, subsonic의 오픈소스 버전인 airsonic과 airsonic-advanced를 선택해 보았습니다.

그런데, 두 프로그램 모두 2024년 현 상황에서는 사실상 개발중단이고, 그뿐만 아니라 제 서버 상에서 제대로 작동하지 않는다는 문제점이 있었습니다.

몇몇 설정페이지를 열어도 반응이 없는 등 사용하기에 불편했기에, 다른 프로그램을 선택하게 됬습니다.

navidrome

subsonic api를 사용하고 있는 또 다른 오픈소스 프로그램, navidrome입니다.

이쪽은 작동 자체는 원활하게 잘 되었으나, 명확한 단점이 존재합니다. 폴더 기반으로 곡을 탐색할 수 없기에, 다양한 장르의 곡을 듣는 제가 노래를 정리하기에 너무 어려웠습니다.

기존의 폴더 기반 정리를 할때는 장르별로 폴더를 나누어 두었기에 찾기 쉬웠으므로, 폴더별 탐색을 지원하는 서버를 찾고자 하였습니다.

gonic

결론을 내려 보자면
제가 음악 서버 프로그램에 바라는 점은

  • subsonic api ( 클라이언트가 다양 )
  • 폴더 기반 정리가 가능해야함
  • 빨라야 함

정도가 있습니다
이 모두를 충족시키는 프로그램으로 gonic을 발견했고,
지금은 gonic을 사용해 제 음악 파일들을 관리하고 있습니다.

사진부터 정말 깔끔함 단 하나를 추구했다는 것이 느껴집니다. 다른 프로그램들은 웹 상에서 플레이 가능하게 되어있지만, 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 파일을 무시할 수 있게 설정해주고 서버를 재시작 한뒤 재스캔해주면, 해당 폴더가 깔끔히 사라지고 정상적으로 동작하는것을 보실 수 있습니다.

원래 정규식이기 때문에, 보다 복잡한 패턴에도 매칭시키실 수 있어서 꼭 @eaDir 문제가 아니더라도 생각보다 유용하게 사용하실 수 있을겁니다.

서드파티 플레이어

gonic은 문자 그대로 서버만 제공하기 때문에, 음악을 재생하기 위해서는 클라이언트 프로그램이 필요합니다.

저는 안드로이드 환경에서 음악을 재생하기 위해 tempo 를 사용하고 있으며,

윈도우 환경에서는 sonixd를 사용하고 있습니다.

결론

제가 정착한 gonic은 그저 저의 예시일 뿐이며, 개인의 사용 패턴에 따라서 수많은 프로그램들 중 하나를 취사선택할 수 있는 것이 selfhosting의 매력인만큼 자유롭게 선택해서 사용해주시면 좋을것 같습니다.

이런 프로그램들이 있고 이 사람은 이걸 쓰고 있구나 정도가 적합하지 않을까 싶습니다.

Read more

말이 샐러드가 되어가 / なみぐる

얘는 그냥 장르폭이 넓음... 보카코레 출품곡인 즌다몬머시기들로 접했었는데 다양하게 잘 만드시는거같아요 M/V 영상 Lyrics 가사 また頭の中身がまとまらなくて 마타 아타마노 나카미가 마토마라나쿠테 또다시 머릿속이 정리되지 않아서 言葉がサラダになっていく 코토바가 사라다니 낫테이쿠 말이 샐러드가 되어가 出力された無意味の羅列で 슈츠료쿠사레타 무이미노 라레츠데 출력되어지는 무의미한 나열으로 視界が緑になっていく 시카이가 미도리니 낫테이쿠 시야가 초록색이 되어가 とりとめのない孤独な言葉が 토리토메노 나이 코도쿠나

By 박성훈

당신밖에 보이지 않아 / r-906

r-906의 따끈따끈한 신곡 간간히 나오는 사진이라던지 중간의 멜로디파트 등을 통해서 Catchy?! 의 후속곡임을 쉽게 알아볼 수 있습니다 M/V 영상 Lyrics 가사 きっと運命の寵児 킷토 운메이노 초우지 분명 운명에게 사랑받아 まるで魔性の物語(ストーリー) 마루데 마쇼우노 스토리 마치 마성과 같은 스토리 誰もが釘付けの一等星 다레모가 쿠기즈케노 잇토우세이 모두가 점찍어둔1 일등성 でもね 데모네 그치만 あなたも知らないあなたを 아나타모

By 박성훈

boj 24915 센터가 돋보여야 해

금광세그와 boj 16993최근 ett/hld도 그렇고, 구간에 대해서 다루는 쿼리에 대해서 좀 깊게 공부해보고 있다. 일반적인 부분합 세그먼트 트리와는 다른 형태의 문제들을 해결해보고 있기에, 발상을 좀 정리해보고자 한다. 세그먼트 트리와 구간 세그먼트 트리의 주요 조건 및 세그트리가 주로 필요한 장소는 * 구간에 대한 쿼리를 진행하면서 * 각 쿼리당 처리시간이 빨라야 하고 * 인접한

By 박성훈

금광세그와 boj 16993

최근 ett/hld도 그렇고, 구간에 대해서 다루는 쿼리에 대해서 좀 깊게 공부해보고 있다. 일반적인 부분합 세그먼트 트리와는 다른 형태의 문제들을 해결해보고 있기에, 발상을 좀 정리해보고자 한다. 세그먼트 트리와 구간 세그먼트 트리의 주요 조건 및 세그트리가 주로 필요한 장소는 * 구간에 대한 쿼리를 진행하면서 * 각 쿼리당 처리시간이 빨라야 하고 * 인접한 두 구간이

By 박성훈