YGH

[홈서버 만들기] 13. 미디어 서버

2020년 11월 17일

개요

앞에서 설치한 Transmission으로 예능이나 드라마를 다운 받고 Nextcloud로 파일을 분류했다.

그럼 이제 열심히 다운받고 분류해 놓은 것을 봐야 하지 않겠나?

이 때 유용한 서비스가 Plex이다.

Plex는 동영상 파일과 그 파일의 이름에 정보들을 토대로 다음 웹사이트에서 검색한 후 출연진, 줄거리 등을 가져와 깔끔하게 분류를 해주어서 감상하기에 매우 적합하다.

더더욱 스마트폰, 스마트TV, 웹 브라우저 등을 가리지 않고 다양한 기기에서 지원이 되며 트랜스코딩까지 괜찮은 편이라 인터넷 환경에 고려해 화질 전환도 자유롭다.

설치해서 직접 체험해보면 후회 없을 것이다.

Plex 설치

우선 보편적인 방법으로는 Plex 공식 홈페이지에서 .deb 파일을 wget 명령어로 다운 받아서 dpkg 명령어를 사용해서 설치를 한다.

하지만 이 방법은 추후 업데이트때도 이렇게 해야 하며 매우 귀찮아서 그냥 업데이트 안하고 산다.

Plex의 패키지 저장소 정보를 홈서버 apt에 추가하면 항상 쓰던 명령어로 손쉽게 업데이트가 가능하다.

참고 링크: https://support.plex.tv/articles/235974187-enable-repository-updating-for-supported-linux-server-distributions/

Plex 공식 홈페이지에서 제공하는 사항대로 진행해보자.

$ echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
$ curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
$ sudo apt update
$ sudo apt install plexmediaserver

아래와 같이 설치 과정 중 스크립트로 생성된 패키지 저장소 정보에 대해 물어볼 것이다.

이때 그냥 엔터 눌러주면 우리가 추가한 패키지 저장소 정보를 사용하도록 설정된다.

방화벽 설정

32400 포트는 Plex에 접속하는 가장 중요한 포트라고 생각하면 된다.

나중에 리버스 프록시를 구성해 결국 https로 접속하겠지만 그것은 웹 브라우저만 해당하는 사항이고, 스마트폰이나 스마트TV 등의 다른 기기들은 이 포트로 접근해야 사용이 가능하다.

$ sudo iptables -A INPUT -p tcp --dport 32400 -j ACCEPT
$ sudo netfilter-persistent save
$ sudo netfilter-persistent reload

포트포워딩

공유기 관리자 페이지에서 32400/tcp 포트를 홈서버로 향하도록 설정해주자.

Plex 초기 설정

홈서버와 같은 네트워크에 연결되어 있는 PC에서 웹 브라우저로 아래 주소에 접속하자.

http://[홈서버 내부 IP주소]:32400/web

만약 내부 네트워크 환경에 접근할 수 없어 외부 환경이라면 PuTTY의 SSH Tunneling 기능을 사용해보면 되는데 여기서 다루진 않을 것이니 구글링 해보도록 해라.

그럼 접속 하고 초기 설정을 진행해보자.

로그인까지 마쳤다면 아래와같이 Plex 메인 화면을 확인할 수 있다.

여기서 왼쪽에 [더 보기] 를 선택하면 자신의 홈서버가 등록 되있을 것이다.

Plex 폴더 생성

우선 클라우드 스토리지 데이터 폴더에 Plex 관련 폴더를 만들어서 웹 브라우저에서 파일 관리하기 유용하게 만들어 보자.

Transmission 설치할 때처럼 폴더의 소유자와 그룹은 www-data로 지정해서 Nextcloud에서 파일을 관리할 수 있게 하고 plex 계정을 www-data 그룹에 추가하여 Plex에서 읽기 가능한 상태로 만들어 줄 것이다.

$ su –
# cd /mnt/sdb/nextcloud-data/[Nextcloud계정명]/files/Plex
# sudo -u www-data mkdir -m 750 Movie TvShow 
# usermod -a -G www-data plex

권한과 소유자 그룹이 잘 설정되었는지 확인하자.

# ls -l
drwxr-x--- 2 www-data www-data 4096 Sep 28 23:11 Movie
drwxr-x--- 2 www-data www-data 4096 Sep 28 23:11 TvShow

plex 계정이 www-data 그룹에 추가된 것도 확인하자.

# id plex
uid=997(plex) gid=997(plex) groups=997(plex),33(www-data),44(video),109(render)

Nginx 설정

Transmission 처럼 리버스 프록시를 구성해서 32400포트로 접근하는 대신 https로 접근할 수 있게 구성해보자.

server {
        listen 80;
        server_name plex.ygh.kr;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        server_name plex.ygh.kr;

        ssl_certificate /etc/letsencrypt/live/ygh.kr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ygh.kr/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/ygh.kr/chain.pem;
        ssl_dhparam /etc/ssl/dhparam.pem;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_ecdh_curve secp384r1;
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header Strict-Transport-Security max-age=15552000;
        add_header X-Content-Type-Options "nosniff" always;

        gzip on;
        gzip_vary on;
        gzip_min_length 1000;
        gzip_proxied any;
        gzip_types text/plain text/css text/xml application/xml text/javascript application/x-javascript image/svg+xml;
        gzip_disable "MSIE [1-6]\.";

        client_max_body_size 0;

        location / {
                proxy_pass http://127.0.0.1:32400;

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "Upgrade";

                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
                proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
                proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;

                proxy_redirect off;
                proxy_buffering off;
        }
}
# ln -s /etc/nginx/sites-available/plex.ygh.kr /etc/nginx/sites-enabled/
# nginx -t
# service nginx restart

Plex 시작

이제 외부환경 웹 브라우저로 https://plex.[도메인] 와 같이 자신의 홈서버 Plex 주소로 접속한 후 Plex용으로 만든 폴더를 라이브러리로 등록시켜보자.

[더 보기] 란을 클릭하고 홈서버에 + 모양을 누른 뒤 영화 라이브러리부터 등록하자.

영화는 /mnt/sdb/nextcloud-data/[Nextcloud계정명]/files/Plex/Movie 라고 직접 입력하고

TV쇼는 /mnt/sdb/nextcloud-data/[Nextcloud계정명]/files/Plex/TvShow 라고 입력하자.

이제 새로운 파일이 생겼을 경우 라이브러리를 자동으로 스캔하는 기능을 켜자.

체크한 후 아래로 내려서 변경 저장 버튼을 클릭하면 적용된다.

Plex 플러그인

Plex 폴더에 영상이 추가되면 파일명을 토대로 다음 영화 사이트에서 정보를 가져오도록 설정해주는 작업을 할 것이다.

이 때 필요한 것이 Github의 hojel님께서 제작하신 DaumMovie 플러그인이다.

$ su -
# cd /var/lib/plexmediaserver/Library/Application\ Support/Plex\ Media\ Server/Plug-ins
# git clone https://github.com/axfree/DaumMovie.bundle
# chown plex:plex DaumMovie.bundle/

번들 폴더가 잘 만들어졌는지 확인하자.

# ls -l
drwxr-xr-x 4 plex plex 4096 Sep 29 12:04 DaumMovie.bundle

서비스를 재시작 하여 적용하자.

# service plexmediaserver restart

웹 브라우저로 접속해서 학인 해보면 잘 설치된 것을 확인할 수 있다.

이제 영화와 TV쇼 각 라이브러리에 적용하자.

홈 화면에서 왼쪽에 영화 부분에 마우스를 대고 점3개를 누른 뒤 [라이브러리 관리] > [편집…] 에 들어간다.

영화 와 TV쇼 모두 에이전트를 Daum Movie 로 지정해주자.

Plex 사용

Nextcloud, Transmission, Plex까지 열심히 설치해 보았다.

힘들게 설치했으니 이제 재밌게 써보도록 하자.

토렌트 다운로드

우선 영상 파일을 다운로드 받아야한다.

구글링 해서 알아서 잘 받도록 하자.

다운로드가 다되면 아래처럼 삭제를 하자.

따라서 Remove From List… 를 선택하면 된다.

파일 분류

이제 Nextcloud에서 Plex/Downloads 폴더에 들어가면 다운받은 파일이 보일 것이다.

보이지 않는 다면 F5를 눌러 갱신을 해보면 된다.

그래도 안보이면 Nextcloud 설정 중 filesystem_check_changes 값을 조정하지 않아서 그럴 수 있으니 Nextcloud 설치편으로 가서 확인해보면 된다.

사실 필자도 이거 모르고 불편하게 쓰다가 이번 설치 때 알게 되었다.

이 파일을 TvShow/[제목] 폴더로 옮기자.

여기서도 권한 문제 때문에 고생할 수 있는데 만약 문제가 생길 경우 아래 사항대로 모든 것을 해보아라.

  1. Plex 폴더 생성부터 권한 설정까지 체크
  2. transmission-deamon 서비스 재시작
  3. 홈서버 재부팅

시청

이제 Plex에 접속해서 TV 쇼 라이브러리에 들어가서 확인해보자.

한층 더 멋진 미디어 생활이 가능 해졌다.

스마트폰과 스마트TV에 연결하는 법은 구글링 하면 쉽게 나온다.

Window PC에서 사용할 경우 웹으로 접속해서 사용하지 말고 Plex 공식 홈페이지에서 Window용 프로그램을 설치해서 사용하는 것이 호환성과 성능면에서 좋다.

그럼 모두 즐거운 미디어 생활하길 바라며 홈서버 만들기는 여기서 마치도록 하겠다.

개발자의 경우 vscode-server 을 설치하여 웹 기반으로 언제 어디서든 홈서버의 vscode를 웹으로 접속하여 사용할 수 있다.

shinobi 라는 cctv 관련 서비스도 있는데 cctv 모니터링 및 녹화는 기본이고 opencv와 yolo 까지 연결해서 모션감지 녹화기능도 제공해준다.

우분투 서버에는 많은 기능들이 있으니 알아보고 필요한 것을 추가해서 사용하면 된다.