개요
Plex Media Server는 모르는 분이 없을 정도로 개인 미디어 라이브러리 구축에 있어서는 유명한 프로그램입니다. 네이티브로 OS위에 바로 설치할 수도 있고, 도커로도 운용할 수 있죠.
저는 스토리지 서버로 TrueNAS를 사용 중이고, 모든 미디어 파일을 TrueNAS에 보관하고 있습니다. 이 파일들을 이용할 땐, Dataset을 SMB공유로 끌어가서 사용하는 편입니다.
그.런.데.
원래는 한 개의 서버를 운용하고 있었고, TrueNAS도 Proxmox내부의 VM으로 운용되고 있었기 때문에, 다른 VM에서 TrueNAS의 자료를 SMB로 읽어도 실제 내부 내트워크에서 트래픽이 발생하진 않았습니다…만, 서버를 스토리지/가상화로 이분화한 뒤, 가상화 서버쪽의 VM이 이 파일을 끌어갈 때 네트워크에서 실제 트래픽이 발생하기 시작했습니다. 이와 동시에 내부 네트워크망의 속도제한을 적용받기 시작하면서 거실에서 4K블루레이 원본영상을 보는데 약간의 버퍼링이 걸릴 정도가 되더군요 ㅠ_ㅠ
블루레이 원본의 초당 전송률은 초당 100메가 안쪽이기 때문에, 버퍼링이 발생할 가능성이 낮지만,
미디어가 스토리지 서버 → Plex VM → 거실 Shield Pro로 오는 것과, 서버 내 다른 작업이 합쳐질 경우 이런 문제가 생기는 걸로 추정됩니다.
그래서 TrueNAS위에 바로 Plex를 설치해 보겠습니다.
Plex Media Server 설치 준비
Dataset 준비
아래와 같이 3개의 dataset을 설정했습니다.
이 글에서는 Plex를 apps계정으로 사용할 예정이라 이 dataset에 아래처럼 권한도 주겠습니다.
- User : apps – Full control
- Group : apps – Modify
plex dataset 밑에 child dataset으로 만들었기 때문에, plex dataset에서 Apply permissions to child datasets 옵션을 활용하면 편합니다.
만일 apps계정 외 다른 계정으로 설정하려면, 다른 계정의 id를 확보하여 설정하시면 됩니다.
또, 실제로 Plex 미디어 라이브러리로 사용될 dataset(쉽게 말해 영상 파일이 있는 dataset)에도 권한을 설정해 줍니다.
여기까지 진행했다면, dataset 준비는 끝났습니다.
Token 준비
설치 과정 중 넣어 줄 키(token)이 필요합니다. 이걸 넣지 않고 설치해도 Plex 활성화를 할 수는 있으나, 넣고 하는 것이 조금 더 간편합니다.
링크로 접속해 로그인해 줍니다.
그러면 아래와 같이 바로 token값이 나옵니다.
잘 복사해 두었다가 사용하면 될 것 같지만, 사실 준비하다보면 4분이 지나서 expire당합니다.
최종적으로 deploy전에 다시 와서 받으시면 됩니다 =ㅅ=
Plex Media Server 설치
Plex Media Server 찾기
이미지는 검색으로 바로 찾을 수 있습니다.
Plex Media Server 설치 – 환경설정
뭐가 좀 굉장히 많아보이는데! 느낌이 들지만 하나씩 쉽게 채워넣을 수 있습니다.
Plex Configuration
먼저, Claim Token은 위에서 발급받은 Token값을 넣어주시면 됩니다.
Image의 경우 두 가지가 있는데,
- Plex Official Image : Stable, Latest 버전을 사용
- Plex Pass Image : Plex Pass유저가 사용할 경우, Preview, Beta 버전을 사용할 수 있음, Stable 이전에 가장 최신 버전으로 업데이트 됨
의 특징이 있습니다. 저는 Plex Pass유저지만, 안정적인 것이 최고라서 =ㅅ=, Official로 설치하겠습니다.
User and Group Configuration
앱을 실행할 계정을 넣어줍니다. 해당 계정의 권한에 따라 사용할 dataset에도 권한 설정이 필요합니다. (568은 apps입니다.)
이대로 실행해도 되고, 다른 계정을 넣어도 됩니다.
예를 들어, 미디어가 저장된 dataset의 소유권자를 넣어도 되고, 별도로 권한 설정 예정이라면 해당 id를 넣으셔도 됩니다.
다른 계정의 id는 쉘에서 아래와 같이 입력하면 됩니다.
root@fentanas[~]# id apps
uid=568(apps) gid=568(apps) groups=568(apps)
Network Configuration
Network Configuration은 이대로 놔두시면 됩니다.
Storage Configuration
Storage Configuration을 하나씩 설정해보겠습니다.
먼저, Plex Data Storage는 라이브러리에서 파일을 읽고 포스터 이미지, metadata 등을 구축해 저장하는 저장소입니다.
이 글에서는 위에서 미리 만들어둔 plex/data를 할당하겠습니다.
Plex Configuration Storage는 설정 등의 데이터가 저장되는 경로입니다.
plex/config로 설정하겠습니다.
Plex Logs Storage는 Plex에서 작성되는 로그를 저장하는 곳으로 plex/logs dataset을 할당하겠습니다.
Plex Transcode Storage의 경우 트랜스코딩 과정에서 발생하는 임시 파일을 저장하는 곳입니다.
이 저장소의 경우, 속도가 생명이기 때문에 램디스크를 할당하겠습니다.
Type을 emptyDir로 설정하면 아래처럼 Memory를 선택하실 수 있습니다.
용량은 개인의 환경에 따라 설정하시면 됩니다.
Additional Storage에서 Add를 클릭한 뒤, 실제 미디어 파일들이 저장된 dataset을 Host Path로 넘겨줍니다.
Mount Path의 경우 pod내부 경로를 설정하는 것으로, 저는 /mnt/media로 설정했습니다.
Resources Configuration
Resources Configuration Limits
pod에 할당할 CPU와 Memory 자원을 설정하면 됩니다.
GPU Configuration
아래처럼 pod에 할당할 그래픽카드를 설정할 수 있습니다.
Plex는 기본적으로 NVIDIA 그래픽카드를 이용한 트랜스코딩을 지원하고 있고, 저도 이를 위해 TrueNAS서버에 쿼드로 P1000을 장착해 놓았습니다.
그래서 아래처럼 할당할 수 있는 GPU자원이 표시됩니다.
카드는 한 장이지만, 가용할 수 있는 자원은 총 5개로 표시됩니다.
과거 레딧을 찾아보니, GPU를 pod에 독점적으로 할당하지 않고, 여러 pod에 나누어 share하는 팁이 있었던 것으로 보이는데, 해당 기능을 TrueNAS에서 정식으로 지원하게 된 것으로 보입니다.
저는 다른 쪽에서 GPU를 사용할 예정이 없어 5개를 모두 할당해주었습니다.
이제 Install을 눌러 설치를 시작하면 됩니다.
Plex Media Server 설정 – 미디어 풀 확인
Web Portal을 클릭해 Plex Media Server를 열어 줍니다.
Token을 입력해서 설치 했기 때문에, 아래처럼 바로 서버를 인식해 줍니다. 보유한 Plex계정으로 로그인 할 경우 서버 초기 설정 페이지로 진입합니다.
Plex 초기 설정 및 사용법에 대한 내용은 쉽게 찾을 수 있으므로 생략하겠습니다.
Additional Storage에서 pod에 /mnt/media로 매핑시켰던 라이브러리를 그대로 인식할 수 있습니다.
NVIDIA 그래픽카드 트랜스코딩 확인하기
서버 설정 – 트랜스코더 항목에서 그래픽카드를 인식하고 있는 것을 확인할 수 있습니다.
제가 좋아하는 영화인 어벤져스:엔드게임입니다.
소스는 4k 블루레이 원본이고, 네트워크 망 밖에서(LTE) SD화질로 트랜스코딩해도 CPU(8코어)와 RAM(8기가) 점유율이 낮은 것을 볼 수 있습니다.
Tautulli 연동
소개
Tautulli는 Plex의 3rd party plugin 같은 것으로, 서버 환경의 변화(장애 등)가 발생하거나, 라이브러리 변동 사항 발생, 유저의 행동(재생, 일시정지, 버퍼링 등)에 대해 알람을 제공해주고, 시청 통계도 간단하게 내주는 좋은 플러그인입니다.
원래 도커로 사용하고 있던 제 Plex에서도 사용하던 것인데, TrueNAS 공식 카탈로그에도 있으니까 사용하지 않을 이유는 없죠. 내친김에 같이 설치해 보겠습니다.
Tautulli 설치하기
Dataset 설정
어차피 Plex와 같이 사용할 플러그인이니, 미리 만들어두었던 plex dataset 아래에 child dataset으로 생성해 주겠습니다.
ACL도 그대로 상속받으므로 별도의 추가 설정 없이도 필요한 권한을 상속받을 수 있습니다.
dataset을 새로 만들 때, 아무리 Passthrough로 설정해놔도 Restricted로 바뀌는 이 부분만 수동으로 설정해 주시면 됩니다.
Tautulli 설치 – 환경설정
Tatulli를 검색하면 아래처럼 쉽게 앱을 찾을 수 있습니다.
개별 환경상 크게 달라진 부분이 없다면 아래 내용은 이대로 놔두시면 됩니다.
포트도 사용중이 아니라면 건들지 않으셔도 됩니다.
Storage는 조금 전 위에서 생성했던 plex/tautulli로 설정해 주면 됩니다.
Install을 클릭해 설치를 진행하면 됩니다.
Tautulli 설정하기
초기 설정
Tautulli의 설치가 완료되었다면 Web Portal 버튼을 클릭해 열어줍니다.
아래처럼 초기 설정 페이지에 진입하게 됩니다.
Tautulli에서 admin으로 사용할 계정을 설정해 줍니다.
Sign In With Plex 버튼을 클릭해 Plex로그인을 진행해 줍니다.
아래와 같은 메세지를 확인하면 별다른 이상 없이 진행할 수 있습니다.
운영중인 Plex Media Server의 IP를 입력하도록 되어 있는데, 클릭해보면 내부 네트워크에서 잡히는 Plex Media Server를 전부 볼 수 있습니다.
별다른 이상이 없다면, TrueNAS의 Kubernetes 상의 IP를 잡아 줍니다.
서버를 찾았다면, Verify버튼을 클릭해 ‘Server found’ 메세지를 확인하고 넘어갑니다.
Logging은 기본값으로 넘겨 주시고, 알람은 설정 페이지 가서 설정하라는 말도 넘겨 주시고, 기존 환경 import 문구도 무시해 주시 초기 설정이 완료됩니다.
이후 등장하는 로그인 창으로 다시 한 번 로그인 해 줍니다.
알람 설정
우측 상단의 Settings를 클릭하면 설정창을 확인할 수 있는데, 이 중 좌측 목록에서 Notification Agents를 클릭합니다.
Add a Notification Agent를 클릭하면 아래와 같이 알람수단으로 사용할 수 있는 어플리케이션을 확인할 수 있습니다.
우선 제일 만만한 E-mail을 설정해 보겠습니다.
- From Name : 메일을 수신했을 때 발신자 이름으로 표시되는 항목
- From : 메일 수신 시 발신자 주소로 표시되는 항목 (주로 SMTP서버 쪽 이메일 주소를 그대로 사용함)
- To : 알림 메일을 받을 주소 (이 옵션의 경우 Plex계정의 E-mail주소와 바인딩 되어 있음)
- CC : 참조
아래의 SMTP 설정 내용은 사용하시는 E-mail 서비스에서 확인하셔야 합니다.
주로 IMAP설정 쪽에 그 내용이 있으며, 예시로 제가 사용하는 다음 메일의 설정값을 같이 스샷으로 남겨놓겠습니다.
설정을 완료하고 상단의 Trigger 탭을 클릭해, 알람을 수신할 상황을 체크해 주면 됩니다.
예를 들어, Tracode Decision Change를 활성화 한다면, 누군가 내 Plex에서 시청할 때, 트랜스코딩 품질을 바꿀 때마다 알람을 수신할 수 있습니다.
혹은 SMI(혹은 PGS)자막, 미지원 오디오 코덱 등으로 인한 트랜스코딩이 발생할 경우에도 알람을 수신할 수 있습니다.
E-mail로는 너무 많은 알람을 수신할 상황은 피하시는게 좋습니다(Playback Start와 Stop을 수신할 경우, 누군가 영상을 보다가 카톡답장하고 와서 다시 재생하고 등의 행동을 반복한다고 생각해보세요…)
E-mail 서비스 제공자로부터 차단을 당할 수도 있습니다 =ㅅ=
그 옆, Conditions 탭에서는 특정 조건을 설정할 수 있습니다.
예를 들어, 아래처럼 Transcodes / is greater than / 조합을 사용한다면, 입력하는 값보다 트랜스코딩 세션이 많아지면 알람을 받을 수 있는 겁니다.
기타 그 외, Discord, Telegram등 수많은 어플리케이션을 지원하니 사용하시는 환경에 맞게 설정하시면 됩니다.
저는 E-mail와 Telegram 두 가지를 사용합니다. 잦은 알람을 받아야 하는 상황은 대부분 Telegram으로 받고, 빈도가 낮은 알람은 E-mail로 수신중입니다.
마무리
사실 Plex에 트랜스코딩이 꼭 필요한가? 라고 물으면 아니라고 답하고 다닙니다.
Plex로 외부에서 영상을 볼 경우는 대부분 핸드폰일 경우가 높고, 데이터 무제한 요금제를 사용하는 분들이 많기 때문에, 굳이 서버에 부하를 줘가며 트랜스코딩을 일으키고, 보는 사람은 화질을 저하시켜 볼 이유가 없거든요.
오히려, 어쩔 수 없이 트랜스코딩이 일어나는 경우는 주로 SMI형식의 자막을 사용하거나, 재생 기기의 오디오코덱 미지원(TrueHD, DTS-HD 등)으로 발생하는 경우가 많죠.
이러한 경우의 트랜스코딩은 빈도가 낮다보니, 차라리 CPU파워를 올려서 해결하는 쪽이 간편하고 빠른 해결방법입니다.
(다만, 헤놀로지를 네이티브로, 모든 걸 다 쑤셔넣어서 운영하는 환경에서는, DSM의 커널도 낮고 Plex가 자원을 끌어서 쓰는 능률도 낮다보니 어렵죠.)
하지만, 중고장터에 저렴하게 풀리는 낮은 급의 쿼드로 그래픽카드들은 트랜스코딩 같은 작업에 좋은 성능을 보여주고, 설정이 어렵지 않아 이렇게 활용하면 유용하게 사용할 수 있습니다.
(추가 전원 연결도 없음)
또, 일반적으로 헤놀로지, OMV 등의 NAS를 베어메탈로 운영하면서 올인원으로 사용하지 않는 이상, 미디어 풀과 Plex가 돌아가는 VM이 분리되어 있기 마련이고,
SMB/NFS로 미디어 풀을 마운트 해와서 사용하게 되는데, 이 경우 미디어 풀에 파일 변동사항이 발생해도 Plex는 이걸 알아채지 못합니다.
원격 저장소니까요.
그렇지만, 이 글처럼 TrueNAS위에서 같이 작동되는 Plex는 파일 변동사항을 즉각 알아채고 라이브러리에 표시해 줍니다. 새로운 파일을 추가할 때마다 수동으로 라이브러리 스캔을 작동시키거나, 일정 시간마다 작동되는 라이브러리 스캔을 기다리지 않아도 된다는 거죠.
TrueNAS의 스냅샷을 이용해 망가진 metadata, db나 실수로 날아간 미디어 파일을 아주 손쉽게 복구할 수 있는 환경은 덤이구요!