찾아보게 된 계기

라즈베리 파이로 plex 서버 운영

저는 라즈베리파이로 Plex 서버를 운영하고 있습니다.
라즈베리파이는 CPU 성능이 좋지 못해 트랜스코딩이 불가능합니다
되더라도 해상도가 720p로 낮아지고 용량은 더 크게 증가하죠.

그래서 트랜스코딩 부분은 관심이 없었습니다.
그런데 Direct Play(직접 재생)이 아닌 Direct Stream(다이렉트 스트림)만 되어도 Transcoder temporary directory를 사용합니다.
Direct Stream은 영상 인코딩과 음성 인코딩을 변환하지는 않고, 컨테이너만 바꾸는 경우입니다.

트랜스 코딩 아닌데 트랜스코딩 성능 부족?

컨테이너만 바꾸는데에는 정말로 cpu 5%도 쓸까 말까 합니다.
CPU는 당연히 아니고 부족한건 네트워크 아니면 스토리지 성능일 수 밖에 없습니다.

저는 영상은 구글드라이브에 놓고 plex에서 재생을 누르면 구글 드라이브에서 영상을 받아서 plex에서 전달하는 방식으로 운영중입니다.
그러다보니 구글에서 영상 다운로드하고 영상 재생하는 기기로 업로드 할 때의 네트워크 성능이 문제일 수 있습니다.
하지만 그런 경우 다이렉트 플레이일 때도 문제가 발생해야 합니다.

결국 스토리지 성능이 부족하다는 것을 깨닳았습니다.
라즈베리파이의 경우 스토리지가 sd card이니까요.

그래서 트랜스코딩 위치를 램디스크(tmpfs)로 바꾸기로 결정합니다.

램디스크를 마운트하기

먼저 플렉스 서버 설정에서 Transcoder temporary directory를 /transcode로 바꿔두었습니다.

실패: -v /dev/shm/plex-transcode:/transcode

/transcode 폴더가 있음에도 /tmp/transcode를 임시 경로로 하여 트랜스코딩을 합니다.
쓰기 권한이 없기 때문입니다.
Docker 데몬이 /dev/shm/plex-transcode 폴더를 만들면 당연히 root 소유자로 생성이 되는데, 제 plex의 uid는 1000이었기 때문입니다.
그렇다고 라즈베리파이를 부팅 할 때마다 /dev/shm/plex-transcode 폴더를 만들고 권한을 바꿔줄 수는 없었습니다.

그러던 중 찾은 것이 docker tmpfs였습니다.

성공: tmpfs

Docker-compose: Mounting a tmpfs usable by non-root user
tmpfs를 이용하면 uid, gid, 권한, 용량, 경로를 설정할 수 있습니다.

--mount type=tmpfs,destination=/app,tmpfs-mode=770,tmpfs-size=1M
(docker commanddptj uid, gid를 설정하는 방법은 모르겠습니다)
docker-compose에서는 아래와 같이 설정할 수 있습니다.

version: "3.3"
services:
  my_app:
    image: my_app
    tmpfs:
      - /transcode:mode=770,size=1k,uid=1000,gid=1000

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
100% Free SEO Tools - Tool Kits PRO