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

죽음의 수용소에서 - 빅터 프랭클

죽음의 수용소에서 - 빅터 프랭클

최근 밀리의서재 구독을 신청하며 책을 본격적으로 읽기 시작했다. 스타트를 끊었던 책인 빅터 프랭클의 <죽음의 수용소에서>를 읽으며 느꼈던 점들을 정리해 보고자 한다. 저자 저자 빅터 프랭클은 오스트리아 빈 출신의 신경정신과 교수이다. 1944년 아우슈비츠로 끌려가 여동생을 제외한 가족 모두를 잃었으며, 포로 수용소에서의 경험을 기반으로 심리치료 기법 <로고테라피>

By 박성훈

BOJ 31234 - 대역폭 관리

재미있는 문제여서 가져와봤습니다. 경인지역 대학연합 SHAKE 2023 문제인데, 이 대회를 칠 당시에는 hld를 안배웠어서 접근을 못했었던 문제였습니다. 그래도 나름 선방하기는 했었던 아레나였는데, 아마 이 문제를 시간내에 풀었더라면 퍼포 SSS를 띄웠을 것 같아요 한계 대역폭을 어떻게 처리하느냐가 핵심 아이디어인데, 구간 최댓값을 관리하는 lazy segment tree을 작성하고, 초기에 한계 대역폭 값을 음수로

By 박성훈

JENKINS_HOME is almost full 해결 - VM 용량확장

동아리 활동 관련해서 CI/CD를 구축할 일이 생겨서 간만에 젠킨스에 접속해 보았는데, 디렉토리 공간이 부족하다는 경고가 떠서 이를 해결해보도록 하겠다. 각 프로젝트의 오래된 로그를 제거 빌드할때마다 로그라던지를 기록하는데, 로그를 삭제하지 않기 때문에 가만히 내버려두고 있으면 파일이 점점 쌓인다. Pipeline > 구성 > 오래된 빌드 삭제 를 통해서 먼저 사용하지 않는

By 박성훈

wg-easy 구축을 통한 vpn 사용

저는 지금 서울에서 기숙사 생활을 하고 있는데, 기숙사 생활 와중에도 본가에서 열심히 작동중인 서버에 접근하기 위해서는 필연적으로 vpn을 사용해야 했습니다. pptp 등의 일반적인 VPN 프로토콜과 비교했을때 wireguard는 속도나 안전성 면에서 장점을 보이기 때문에, 개인서버를 구축하시는 분들이 많이들 선택하고는 하시는데 wireguard는 터미널 기반의 vpn 프로그램이라 클라이언트 기기들을 추가하기가 조금 귀찮다는 단점이

By 박성훈