본문 바로가기

음악/오디오/음악 관련

라즈베리파이로 클라우드 뮤직서버 만들기

네트워크 플레이어는 다양한 음원을 재생하는 기능을 가지고 있습니다. 벅스나 타이달 같은 스트리밍 서비스를 사용할 수도 있고, 인터넷 라디오를 들을 수도 있으며 USB 메모리에 음원파일을 저장해서 들을 수도 있습니다. 

소장하고 있는 음원의 용량이 많은 경우 USB를 사용하기가 불편하여 NAS를 이용하는 경우가 많은데, 관리하기는 편하지만 NAS장비를 집에서 운용해야 하므로 전기요금과 소음 문제 등 단점도 있습니다.

요즈음은 Google drive나 MS Onedrive같은 클라우드 서비스가 저렴하기도 하고 대학교 계정이 있으면 무료로 많은 용량을 제공해 주기도 하기 때문에, 이런 클라우드 드라이브에 음원을 저장하고 네트워크 플레이어에서 불러서 재생할 수 있는 방법이 없을까 생각해 보다가 현재 사용하지 않고 있는 라즈베리파이에 rclone과 minidlan를 설치해 클라우드 뮤직 서버를 만들어 봤는데 생각보다 잘 작동해서 오래간만에 블로그 포스팅으로 공유해 봅니다.

 

저는 라즈베리파이를 사용했지만 PC를 사용할 수도 있습니다. PC에 리눅스를 설치해서 사용할 수도 있지만 PC를 뮤직서버용으로만 쓰면 배보다 배꼽이 커지는 상황이라, Virtualbox 등의 가상화 프로그램에 리눅스를 설치해서 사용하면 괜찮을 것 같습니다. 다만 항상 켜 두지 않으면 필요할 때마다 PC와 가상 머신을 켜야 하는 불편함이 있어, 라즈베리파이 같은 저렴하고 작은 기기를 쓰는 게 좋을 것 같네요.

라즈베리파이에 piOS를 설치하고, rclone과 minidlna를 설치합니다.

 

sudo apt-get install rclone

sudp apt-get install minidlna

 

rclone은 클라우드 저장소에 저장된 파일 (여기서는 음원파일들이 되겠죠) 들을 로컬 파일시스템처럼 mount 하여 read / write 할 수 있게 해주는 유틸리티입니다.  그리고 minidlna는 음원파일을 dlna 프로토콜로 broadcast 하여 네트워크 플레이어에서 재생할 수 있도록 해주는 프로그램입니다. 

rclone을 이용해 클라우드(구글 드라이브나 원드라이브 등) 에 저장된 음원파일을 로컬에 마운트하고, 그렇게 마운트 한 디렉토리를 minidlna를 이용해 dlna 프로토콜로 제공하여, 네트워크 플레이어에서 이를 재생하는 구조입니다.

 

위 두 프로그램들을 설치한 다음, 설정을 해줘야 하는데 먼저 rclone에는 음원을 저장한 클라우드 디렉토리를 라즈베리파이의 특정 디렉토리로 마운트 합니다. 

rclone config 명령어를 통해서, interactive하게 본인이 사용하는 클라우드를 로컬 파일 시스템으로 사용하도록 설정할 수 있습니다.

rclone 자체에서도 dlna기능을 지원하긴 하는데, 명확하게 이유는 모르겠지만 flac등의 파일을 지원하지 않아서 rclone은 클라우드 저장소를 마운트만 하고, dlna는 minidlna 프로그램을 이용했습니다.

minidlna는 config 파일에 rclone에서 마운트한 디렉토리만 넣어주고, minidlna에서 사용하는 데이터베이스와 로그가 저장되는 디렉토리만 설정해주면 됩니다.

 

준비가 다 되면, 마지막으로 crontab에 아래 항목을 추가해서 라즈베리파이가 부팅될 때 마다 두 프로그램이 자동으로 기동 되도록 해줍니다.

 

@reboot /usr/bin/rclone mount onedrive:/Music /onedrive &

@reboot sleep 10;/usr/sbin/minidlnad -r

 

rclone 부분은 개인의 설정에 따라 디렉토리 이름이나 클라우드 이름이 다르므로 맞춰서 작성해야 하며, minidla에 -r 옵션을 넣은 것은 재기동할 때마다 데이터베이스를 refresh 해주기 위해서입니다. 그렇지 않으면 클라우드에 추가된 파일이 인식되지 않더라고요.

 

클라우드에 충분한 용량이 있다면 따로 NAS를 설치해서 쓰는 것 보다 훨씬 간편하고 적은 비용으로 뮤직 서버를 구축할 수 있는 방법으로 추천드립니다. 라즈베리파이가 있다면 한번 시도해 보세요.