요새 회사에서 도커를 많이 쓰다보니 잘 쓰면 참 편하고 좋더라. 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