개요

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 데이터셋 구성을 위한 사용자 및 그룹 권한 설정 Plex 데이터셋에 apps 계정 권한 부여 설정

이 글에서는 Plex를 apps계정으로 사용할 예정이라 이 dataset에 아래처럼 권한도 주겠습니다.

  • User : apps – Full control
  • Group : apps – Modify

plex dataset 밑에 child dataset으로 만들었기 때문에, plex dataset에서 Apply permissions to child datasets 옵션을 활용하면 편합니다.

만일 apps계정 외 다른 계정으로 설정하려면, 다른 계정의 id를 확보하여 설정하시면 됩니다.

Plex 미디어 라이브러리 데이터셋의 접근 권한 설정
truenas plex setup 4

또, 실제로 Plex 미디어 라이브러리로 사용될 dataset(쉽게 말해 영상 파일이 있는 dataset)에도 권한을 설정해 줍니다.

Plex 미디어 서버 클레임 토큰 발급 로그인

여기까지 진행했다면, dataset 준비는 끝났습니다.

Token 준비

설치 과정 중 넣어 줄 키(token)이 필요합니다. 이걸 넣지 않고 설치해도 Plex 활성화를 할 수는 있으나, 넣고 하는 것이 조금 더 간편합니다.

링크로 접속해 로그인해 줍니다.

발급된 Plex 미디어 서버 클레임 토큰 값

그러면 아래와 같이 바로 token값이 나옵니다.

잘 복사해 두었다가 사용하면 될 것 같지만, 사실 준비하다보면 4분이 지나서 expire당합니다.

최종적으로 deploy전에 다시 와서 받으시면 됩니다 =ㅅ=

TrueNAS 앱 목록에서 Plex 미디어 서버 검색

Plex Media Server 설치

Plex Media Server 찾기

이미지는 검색으로 바로 찾을 수 있습니다.

Plex 미디어 서버 환경설정의 클레임 토큰 입력란

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로 설치하겠습니다.

Plex 파드의 이미지 버전을 Official로 선택

User and Group Configuration

앱을 실행할 계정을 넣어줍니다. 해당 계정의 권한에 따라 사용할 dataset에도 권한 설정이 필요합니다. (568은 apps입니다.)

이대로 실행해도 되고, 다른 계정을 넣어도 됩니다.

예를 들어, 미디어가 저장된 dataset의 소유권자를 넣어도 되고, 별도로 권한 설정 예정이라면 해당 id를 넣으셔도 됩니다.

다른 계정의 id는 쉘에서 아래와 같이 입력하면 됩니다.

root@fentanas[~]# id apps
uid=568(apps) gid=568(apps) groups=568(apps)
Plex 앱 실행을 위한 사용자 및 그룹 ID 구성

Network Configuration

Network Configuration은 이대로 놔두시면 됩니다.

Plex 미디어 서버의 네트워크 포트 설정 유지

Storage Configuration

Storage Configuration을 하나씩 설정해보겠습니다.

Plex 데이터 저장을 위한 스토리지 경로 구성

먼저, Plex Data Storage는 라이브러리에서 파일을 읽고 포스터 이미지, metadata 등을 구축해 저장하는 저장소입니다.

이 글에서는 위에서 미리 만들어둔 plex/data를 할당하겠습니다.

Plex 설정 데이터 저장을 위한 스토리지 경로 구성

Plex Configuration Storage는 설정 등의 데이터가 저장되는 경로입니다.

plex/config로 설정하겠습니다.

Plex 로그 저장을 위한 스토리지 경로 구성

Plex Logs Storage는 Plex에서 작성되는 로그를 저장하는 곳으로 plex/logs dataset을 할당하겠습니다.

Plex 트랜스코딩 임시 파일을 위한 램디스크 스토리지 구성

Plex Transcode Storage의 경우 트랜스코딩 과정에서 발생하는 임시 파일을 저장하는 곳입니다.

이 저장소의 경우, 속도가 생명이기 때문에 램디스크를 할당하겠습니다.

Type을 emptyDir로 설정하면 아래처럼 Memory를 선택하실 수 있습니다.

용량은 개인의 환경에 따라 설정하시면 됩니다.

미디어 파일 데이터셋을 호스트 경로로 추가 마운트

Additional Storage에서 Add를 클릭한 뒤, 실제 미디어 파일들이 저장된 dataset을 Host Path로 넘겨줍니다.

Mount Path의 경우 pod내부 경로를 설정하는 것으로, 저는 /mnt/media로 설정했습니다.

Plex 파드에 할당할 CPU 및 메모리 자원 제한 구성

Resources Configuration

Resources Configuration Limits

pod에 할당할 CPU와 Memory 자원을 설정하면 됩니다.

Plex 하드웨어 트랜스코딩을 위한 외장 그래픽카드 할당

GPU Configuration

아래처럼 pod에 할당할 그래픽카드를 설정할 수 있습니다.

TrueNAS에 장착된 NVIDIA GPU 가용 자원 표시

Plex는 기본적으로 NVIDIA 그래픽카드를 이용한 트랜스코딩을 지원하고 있고, 저도 이를 위해 TrueNAS서버에 쿼드로 P1000을 장착해 놓았습니다.

그래서 아래처럼 할당할 수 있는 GPU자원이 표시됩니다.

Plex 파드에 가용 GPU 자원을 전부 할당한 상태

카드는 한 장이지만, 가용할 수 있는 자원은 총 5개로 표시됩니다.

과거 레딧을 찾아보니, GPU를 pod에 독점적으로 할당하지 않고, 여러 pod에 나누어 share하는 팁이 있었던 것으로 보이는데, 해당 기능을 TrueNAS에서 정식으로 지원하게 된 것으로 보입니다.

저는 다른 쪽에서 GPU를 사용할 예정이 없어 5개를 모두 할당해주었습니다.

이제 Install을 눌러 설치를 시작하면 됩니다.

Plex Media Server 설정 – 미디어 풀 확인

Web Portal을 클릭해 Plex Media Server를 열어 줍니다.

초기 설정 완료 후 Plex 웹 포털 진입 버튼

Token을 입력해서 설치 했기 때문에, 아래처럼 바로 서버를 인식해 줍니다. 보유한 Plex계정으로 로그인 할 경우 서버 초기 설정 페이지로 진입합니다.

클레임 토큰으로 서버가 자동 인식된 상태

Plex 초기 설정 및 사용법에 대한 내용은 쉽게 찾을 수 있으므로 생략하겠습니다.

Plex 미디어 서버 초기 설정 마법사 시작 단계 마운트된 미디어 라이브러리 경로 인식 및 추가

Additional Storage에서 pod에 /mnt/media로 매핑시켰던 라이브러리를 그대로 인식할 수 있습니다.

Plex 서버 설정의 트랜스코더 항목에서 외장 그래픽카드 인식 Plex를 통해 어벤져스 엔드게임 영상을 트랜스코딩 재생 중인 상태 외장 그래픽카드 트랜스코딩에 따른 낮은 시스템 리소스 점유율 지표

NVIDIA 그래픽카드 트랜스코딩 확인하기

서버 설정 – 트랜스코더 항목에서 그래픽카드를 인식하고 있는 것을 확인할 수 있습니다.

Tautulli 앱 설치를 위한 하위 데이터셋 추가 생성

제가 좋아하는 영화인 어벤져스:엔드게임입니다.

소스는 4k 블루레이 원본이고, 네트워크 망 밖에서(LTE) SD화질로 트랜스코딩해도 CPU(8코어)와 RAM(8기가) 점유율이 낮은 것을 볼 수 있습니다.

Tautulli 데이터셋의 ACL 권한 상속 설정 유지 Tautulli 데이터셋의 수동 접근 권한 구성

Tautulli 연동

소개

Tautulli는 Plex의 3rd party plugin 같은 것으로, 서버 환경의 변화(장애 등)가 발생하거나, 라이브러리 변동 사항 발생, 유저의 행동(재생, 일시정지, 버퍼링 등)에 대해 알람을 제공해주고, 시청 통계도 간단하게 내주는 좋은 플러그인입니다.

원래 도커로 사용하고 있던 제 Plex에서도 사용하던 것인데, TrueNAS 공식 카탈로그에도 있으니까 사용하지 않을 이유는 없죠. 내친김에 같이 설치해 보겠습니다.

Tautulli 설치하기

Dataset 설정

어차피 Plex와 같이 사용할 플러그인이니, 미리 만들어두었던 plex dataset 아래에 child dataset으로 생성해 주겠습니다.

ACL도 그대로 상속받으므로 별도의 추가 설정 없이도 필요한 권한을 상속받을 수 있습니다.

TrueNAS 앱 검색 목록에서 Tautulli 선택

dataset을 새로 만들 때, 아무리 Passthrough로 설정해놔도 Restricted로 바뀌는 이 부분만 수동으로 설정해 주시면 됩니다.

Tautulli 앱 설치를 위한 기본 환경설정 유지

Tautulli 설치 – 환경설정

Tatulli를 검색하면 아래처럼 쉽게 앱을 찾을 수 있습니다.

Tautulli 네트워크 통신을 위한 포트 번호 유지

개별 환경상 크게 달라진 부분이 없다면 아래 내용은 이대로 놔두시면 됩니다.

Tautulli 데이터 저장을 위한 스토리지 경로 할당

포트도 사용중이 아니라면 건들지 않으셔도 됩니다.

Tautulli 앱 설치 완료 후 웹 포털 접속 시작

Storage는 조금 전 위에서 생성했던 plex/tautulli로 설정해 주면 됩니다.

Tautulli 웹 포털 진입 후 초기 설정 마법사 시작

Install을 클릭해 설치를 진행하면 됩니다.

Tautulli 설정하기

초기 설정

Tautulli의 설치가 완료되었다면 Web Portal 버튼을 클릭해 열어줍니다.

Tautulli 관리자 계정 생성을 위한 사용자 정보 입력

아래처럼 초기 설정 페이지에 진입하게 됩니다.

Tautulli 연동을 위한 Plex 계정 로그인

Tautulli에서 admin으로 사용할 계정을 설정해 줍니다.

Tautulli에 Plex 계정 연동 완료 메세지 표시

Sign In With Plex 버튼을 클릭해 Plex로그인을 진행해 줍니다.

내부 네트워크에서 검색된 Plex 미디어 서버 IP 목록

아래와 같은 메세지를 확인하면 별다른 이상 없이 진행할 수 있습니다.

Tautulli에서 쿠버네티스 환경의 Plex 서버 IP 선택

운영중인 Plex Media Server의 IP를 입력하도록 되어 있는데, 클릭해보면 내부 네트워크에서 잡히는 Plex Media Server를 전부 볼 수 있습니다.

별다른 이상이 없다면, TrueNAS의 Kubernetes 상의 IP를 잡아 줍니다.

서버를 찾았다면, Verify버튼을 클릭해 ‘Server found’ 메세지를 확인하고 넘어갑니다.

Tautulli에서 Plex 서버 연결 확인 메세지 표시 Tautulli 초기 설정 중 로깅 기본값 유지 단계 Tautulli 초기 알람 설정 무시 안내 통과 단계

Logging은 기본값으로 넘겨 주시고, 알람은 설정 페이지 가서 설정하라는 말도 넘겨 주시고, 기존 환경 import 문구도 무시해 주시 초기 설정이 완료됩니다.

기존 Tautulli 데이터 가져오기 생략 및 설정 완료 Tautulli 초기 설정 완료 후 관리자 로그인

이후 등장하는 로그인 창으로 다시 한 번 로그인 해 줍니다.

Tautulli 설정 메뉴에서 Notification Agents 항목 진입

알람 설정

우측 상단의 Settings를 클릭하면 설정창을 확인할 수 있는데, 이 중 좌측 목록에서 Notification Agents를 클릭합니다.

Notification Agents 추가를 위한 지원 어플리케이션 목록 알람 수단으로 이메일 에이전트 추가 선택

Add a Notification Agent를 클릭하면 아래와 같이 알람수단으로 사용할 수 있는 어플리케이션을 확인할 수 있습니다.

이메일 알람 발송을 위한 송수신자 메일 주소 설정

우선 제일 만만한 E-mail을 설정해 보겠습니다.

  • From Name : 메일을 수신했을 때 발신자 이름으로 표시되는 항목
  • From : 메일 수신 시 발신자 주소로 표시되는 항목 (주로 SMTP서버 쪽 이메일 주소를 그대로 사용함)
  • To : 알림 메일을 받을 주소 (이 옵션의 경우 Plex계정의 E-mail주소와 바인딩 되어 있음)
  • CC : 참조
이메일 알람 발송을 위한 SMTP 서버 통신 정보 설정

아래의 SMTP 설정 내용은 사용하시는 E-mail 서비스에서 확인하셔야 합니다.

주로 IMAP설정 쪽에 그 내용이 있으며, 예시로 제가 사용하는 다음 메일의 설정값을 같이 스샷으로 남겨놓겠습니다.

다음 메일 서비스의 SMTP 연결 설정 예시 Tautulli 알람 발송 조건 구성을 위한 Trigger 탭 설정

설정을 완료하고 상단의 Trigger 탭을 클릭해, 알람을 수신할 상황을 체크해 주면 됩니다.

예를 들어, Tracode Decision Change를 활성화 한다면, 누군가 내 Plex에서 시청할 때, 트랜스코딩 품질을 바꿀 때마다 알람을 수신할 수 있습니다.

혹은 SMI(혹은 PGS)자막, 미지원 오디오 코덱 등으로 인한 트랜스코딩이 발생할 경우에도 알람을 수신할 수 있습니다.

E-mail로는 너무 많은 알람을 수신할 상황은 피하시는게 좋습니다(Playback Start와 Stop을 수신할 경우, 누군가 영상을 보다가 카톡답장하고 와서 다시 재생하고 등의 행동을 반복한다고 생각해보세요…)

E-mail 서비스 제공자로부터 차단을 당할 수도 있습니다 =ㅅ=

Tautulli 알람 세부 조건 부여를 위한 Conditions 탭 진입 트랜스코딩 세션 초과 시 알람을 발송하는 구체적 조건 구성

그 옆, Conditions 탭에서는 특정 조건을 설정할 수 있습니다.

예를 들어, 아래처럼 Transcodes / is greater than / 조합을 사용한다면, 입력하는 값보다 트랜스코딩 세션이 많아지면 알람을 받을 수 있는 겁니다.

Tautulli에서 지원하는 다양한 서드파티 알림 에이전트 목록

기타 그 외, 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나 실수로 날아간 미디어 파일을 아주 손쉽게 복구할 수 있는 환경은 덤이구요!