상세 컨텐츠

본문 제목

도커로 Plex Media Server 설치하기

카테고리 없음

by 목장주 2019. 5. 8. 07:35

본문

요새 회사에서 도커를 많이 쓰다보니 잘 쓰면 참 편하고 좋더라. docker-compose.yml 파일 하나만 가지고 있으면 서버 새로 설치해도 다시 똑같은 설정을 편하게 할 수 있다. 자꾸 써야 익숙해지는 법. 집 서버를 윈도우 10에서 다시 우분투로 바꾸는 김에 Plex 설치도 도커로 하기로 했다. 다행히 Plex 개발사에서는 plexinc/pms-docker라는 공식 도커 이미지를 배포하고 있다.  

도커 파일이 저장된 github 저장소 나 plexinc/pms-docker docker hub 페이지에 가면 커맨드라인에서 실행하는 방법이 설명되어 있다. 서버가 부팅되면 Plex도 다시 시작시켜야 하고, 실행 시 넘겨줘야할 변수가 여럿 되기 때문에 커맨드라인 보다는 docker-compose를 사용하는 것이 편하다. 그리고 docker-compose.yml을 가지고 있으면 새로 설치할 때도 docker-compose up 명령어만 내리면 되기 때문에 편하다.

도커로 pms-docker 이미지를 실행시킬 때는 host와 bridge 모드 중 고를 수 있다. 기본은 bridge모드로 설정되어 있다. OS X에서 해봤는데 host 모드가 잘 작동이 안 된다. 해결 방법 찾는 것이 귀찮고 어차피 우분투에서 쓸 것이므로 host 모드는 패스. 우분투는 host나 bridge 모드 둘 다 잘 작동한다. bridge 모드로 할 경우 Plex가 사용하는 모든 포트를 다 매칭 시켜줘야 한다. 그래서 더욱더 docker-compose를 이용하는 것이 편하다. 

github에 있는 docker-copmose-host.yml.template 예제 파일을 참고해서 최소한의 정보만 고쳐보자. 

version: '2'

services:  
  plex:
    # 생설될 컨테이너 이름
    container_name: plex
    
    # 받아올 이미지
    image: plexinc/pms-docker
    
    # 도커 데몬 시작시 자동 시작
    restart: unless-stopped
    
    # 환경 변수
    environment:
      # 시간대
      - TZ=<timezone>
      
      # https://plex.tv/claim 에서 받아올 claim
      - PLEX_CLAIM=<claimToken>
    
    # host 모드 사용
    network_mode: host
    
    # 컨테이너가 사용할 저장 장소
    volumes:
      # 설정 파일 저장 장소      
      - <path/to/plex/database>:/config
      
      # transcoding 결과물 저장 장소
      - <path/to/transcode/temp>:/transcode
      
      # 실제 동영상, 사진, 음악 파일들이 있는 장소
      - <path/to/media>:/data

 

<>로 묶인 부분만 값을 치환해서 docker-compose 를 실행하면 된다.

 

시간대는 대륙/도시의 형식으로 값을 적어 주면 된다. 예를 들어 한국은 Asia/Seoul, 시카고는 America/Chicago 가 시간대 값이다. 

 

environment:
  - TZ=America/Chicago

 

예를 들어 /media/av 에 비디오가 저장된 외장 하드가 연결(mount) 되어있다고 가정하자. 그러면 아래와 같이 연결(mapping)시켜줘야 한다.

 

volumes: 
  - /media/av:/data 


별도의 응용 프로그램을 위해 있는 /opt 폴더에 Plex의 설정 파일을 저장하도록 매핑하려면 다음과 같이 하면 된다. 

 

volumes:
  - /opt/plex/config:/config

 

pms-docker 컨테이너가 시작할 때 /opt/plex/config 폴더가 없으면 알아서 생성해준다. 

트랜스 코딩을 한다면 트랜스 코딩된 파일이 저장될 공간도 매핑해 준다. 

volumes:
  - /opt/plex/transcode:/transcode

 

Plex 처음 실행 시 Claim Token을 받아와야 한다. Claim Token을 통해 해당 유저가 생성된 Plex 서버임을 확인하게 된다. 이 토큰은 유효 기간이 5분 밖에 안 된다. 토큰 값은 제일 마지막에 받아와야 한다. https://plex.tv에 접속하면 토큰을 받을 수 있다. 생성된 토큰은 

environment:
  - PLEX_CLAIM=xxxxxxxx


최종 완성된 docker-compose.yml의 모습은 아래와 같다. 

 

version: '2'
services:
  plex:
    container_name: plex
    image: plexinc/pms-docker
    restart: always
    environment:
      - TZ=America/Chicago
      - PLEX_CLAIM=xxxxxxxxxxxx
    network_mode: host
    volumes:
      - /opt/plex/config:/config
      - /opt/plex/transcode:/transcode
      - /media/av:/data      


이제 docker-compose.yml 파일이 위치한 곳에서 docker-compose up -d 또는 docker-compose up -d plex라고 명령어를 실행시키면 백그라운드 작업으로 Plex가 시작한다. 

tz, claim, config, transcode, data 이 모든 값을 .env 파일을 만들어서 저장해 놓고 docker-compose.yml에서 변수를 불러와서 사용해도 된다 .

 

.env 파일

PLEX_TZ=America/Chicago
PLEX_CLAIM=xxxx
PLEX_CONFIG=/opt/plex
PLEX_TRANSCODE=/opt/plex/transcode
PLEX_DATA=/media/av

 

변경된 docker-compose.yml 파일

version: '2'
services:
  plex:
    container_name: plex
    image: plexinc/pms-docker
    restart: always
    environment:
      - TZ=$PLEX_TZ
      - PLEX_CLAIM=$PLEX_CLAIM
    network_mode: host
    volumes:
      - $PLEX_CONFIG:/config
      - $PLEX_TRANSCODE:/transcode
      - $PLEX_DATA:/data