Plex media server
미디어 서버는 우리가 구성한 서버 또는 가상 머신(VM)을 넷플릭스나 IPTV처럼 이용 가능하게 만들어주는 서비스 플랫폼입니다. 어느 기기에서나 동영상을 바로 시청할 수 있도록 서버 측에서 실시간으로 트랜스 코딩해서 스트리밍을 해주기 때문에 모바일 기기를 포함한 TV 등에서도 편리하게 영상을 재생할 수 있습니다.
여기서는 가장 널리 쓰이는 미디어 서버 프로그램인 Plex를 Docker를 이용해 설치하도록 하겠습니다.
※ 물론 사진과 음악도 스트리밍이 가능합니다.
※ Jellyfin도 무료 OpenSource라는 점에서 고려하였으나 집에서 사용하는 LG TV App을 현재 미지원하기 때문에 사용할 수 없었습니다.
사전 작업
Docker 설치
앞선 글 Docker 및 Portainer 설치하기를 참조합니다.
웹서버 (Nginx) 설치 및 설정
앞선 글 웹 서버 설치 및 설정 - Nginx (1/2)와 웹 서버 설치 및 설정 - Nginx (2/2)의 내용을 참조합니다.
서브도메인 생성
Plex는 데이터 입출력이 빈번하므로 별도의 Nginx 서버 블록으로 만드는 것이 좋습니다. Digital Ocean의 DNS에 Plex 접속용 서브도메인을 위한 레코드를 추가합니다.
※ 본 글에서는 plex.example.com
을 생성한 것으로 가정합니다.
외부 접속을 위한 포트 개방
Plex가 사용하는 통신 포트를 개방합니다. 오라클의 가상 클라우드 네트워크의 접근 규칙과 iptables 방화벽에 서비스가 사용하는 해당 포트를 허용하는 규칙을 생성합니다.
- 오라클 가상 클라우드 네트워크 접근 규칙 수정
※ 메뉴 접근 방법은
Oracle Cloud Infrastructure에서 특정 포트로 접근 허용하기를 참조합니다.
메뉴 접근 후, 설정할 항목은 다음과 같습니다.
TCP
- 소스 CIDR :
0.0.0.0/0
- IP프로토콜 :
TCP
- 대상 포트 범위 :
3005
,8324
,32400
,32469
UDP
- 소스 CIDR :
0.0.0.0/0
- IP프로토콜 :
UDP
- 대상 포트 범위 :
1900
,5353
,32410
,32412
,32413
,32414
- iptables 방화벽 포트 허용
sudo iptables -A INPUT -p tcp -m tcp -m multiport --dports 3005,8324,32400,32469 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp -m multiport --dports 1900,5353,32410,32412,32413,32414 -j ACCEPT
- iptables 방화벽의 설정 내용을 저장하고 다시 불러옵니다.
sudo netfilter-persistent save
sudo netfilter-persistent reload
사용자 및 그룹 확인
Plex 이미지의 설정을 위해 현재 사용자(ubuntu
)의 uid
및 gid
를 확인해야 합니다. 출력된 값을 기록해 놓습니다.
$ id ubuntu
uid=1001(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),110(lxd),114(netdev)
Plex 설치 및 설정
Plex 설치
- 포테이너 관리자 페이지(
https://example.com/portainer
)에 접속하여, [Stacks] → [+ Add stack]으로 이동합니다. 다음 그림과 같이 항목별 내용을 모두 입력한 후, 창 하단의 [Deploy the stack] 버튼을 누릅니다.
[Name]
: plex[Web editor]
:
version: "2.1"
services:
plex:
image: linuxserver/plex
container_name: plex
environment:
- PUID=1001
- PGID=1001
- VERSION=docker
- UMASK_SET=022 #optional
- PLEX_CLAIM= #optional
volumes:
- /home/ubuntu/docker/plex/config:/config
- /home/ubuntu/docker/MySMB/tv:/tv
- /home/ubuntu/docker/MySMB/movies:/movies
ports:
- 32400:32400
- 1900:1900/udp
- 3005:3005
- 5353:5353/udp
- 8324:8324
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
- 32469:32469
restart: unless-stopped
이때, 자신의 상황에 맞추어 수정할 값은 다음과 같습니다.
PUID
, PGID
앞서 확인하였던 uid
와 gid
값을 넣어 줍니다.USER
, PASS
트랜스 미션의 웹 관리자 화면에 접속 시 사용할 ID와 암호를 넣습니다.
volumes
항목의 내용은 다음과 같습니다.
/home/ubuntu/docker/Transmission/config
: 트랜스미션의 설정 파일이 공유되는 폴더입니다./home/ubuntu/docker/MySMB/Torrent
: 트랜스 미션을 통해 다운로드된 파일들이 저장될 폴더입니다./home/ubuntu/docker/MySMB/Watch
: 토렌트 시드 파일을 해당 폴더에 복사하면 트랜스미션이 이를 인식하여 다운로드를 시작합니다.
Plex 기본 설정
Plex는 내부 IP 주소를 사용하여 http 접속 시 기본 설정을 변경할 수 있습니다. 저는 Oracle의 VM에 Plex를 설치하였기 때문에 Local Port forwarding (SSH 터널링)을 통해 여기에 접근합니다.
웹브라우저를 사용할 수 있는 PC에서 SSH로 VM에 접속합니다. 이때, -L
옵션을 사용하여 터널링을 수립합니다.
ssh ubuntu@example.com -L 8888:localhost:32400
SSH 터미널을 닫지 않은 상태에서 웹브라우저에 다음과 같이 입력하면 Plex의 기본 설정 화면에 접속할 수 있어 라이브러리를 추가할 수 있습니다.
http://localhost:8888/web
리버스 프록시 설정
앞서 설명하였던 이유로 도메인을 이용할 경우 직접 http 접속이 되지 않습니다. 따라서 이번에도 Nginx를 이용해 리버스 프록시를 설정합니다.
별도의 설정 파일을 생성합니다.
$ vim ~/docker/nginx-ssl/etc/nginx/conf.d/plex.example.com.conf
# make sure that your dns has a cname set for plex
# if plex is running in bridge mode and the container is named "plex", the below config should work as is
# if not, replace the line "set $upstream_app plex;" with "set $upstream_app <containername>;"
# or "set $upstream_app <HOSTIP>;" for host mode, HOSTIP being the IP address of plex
# in plex server settings, under network, fill in "Custom server access URLs" with your domain (ie. "https://plex.yourdomain.url:443")
server {
listen 80;
server_name plex.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name plex.*;
include conf.d/ssl-params.conf;
client_max_body_size 0;
proxy_redirect off;
proxy_buffering off;
# enable for ldap auth, fill in ldap details in ldap.conf
#include /config/nginx/ldap.conf;
# enable for Authelia
#include /config/nginx/authelia-server.conf;
location / {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable the next two lines for ldap auth
#auth_request /auth;
#error_page 401 =200 /ldaplogin;
# enable for Authelia
#include /config/nginx/authelia-location.conf;
set $upstream_app plex.example.com;
set $upstream_port 32400;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header X-Plex-Client-Identifier $http_x_plex_client_identifier;
proxy_set_header X-Plex-Device $http_x_plex_device;
proxy_set_header X-Plex-Device-Name $http_x_plex_device_name;
proxy_set_header X-Plex-Platform $http_x_plex_platform;
proxy_set_header X-Plex-Platform-Version $http_x_plex_platform_version;
proxy_set_header X-Plex-Product $http_x_plex_product;
proxy_set_header X-Plex-Token $http_x_plex_token;
proxy_set_header X-Plex-Version $http_x_plex_version;
proxy_set_header X-Plex-Nocache $http_x_plex_nocache;
proxy_set_header X-Plex-Provides $http_x_plex_provides;
proxy_set_header X-Plex-Device-Vendor $http_x_plex_device_vendor;
proxy_set_header X-Plex-Model $http_x_plex_model;
}
}
프록시 변경사항을 반영하기 위하여 포테이너를 사용하여 Nginx Container를 재실행합니다.
[Containers]에서 [nginxssl_nginx_1]을 체크, [Restart]로 nginx 서비스를 재시작합니다.
참고
'기타' 카테고리의 다른 글
[자작 NAS] 8. 클라우드 코딩 환경 - VSCode (0) | 2020.09.24 |
---|---|
도커 설치 후, 실행시 오류 (0) | 2020.09.23 |
[자작 NAS] 5. 웹 서버 설치 및 설정 - Nginx (2/2) (0) | 2020.09.15 |
[자작 NAS] 4. Docker 및 Portainer 설치하기 (0) | 2020.09.12 |
[자작 NAS] 1. 우분투 서버 마련하기 (0) | 2020.09.12 |