Skip to content

생초보를 위한 sjva 안내서 – 1

제목 그대로 생초보를 위한 sjva 안내서입니다. 그리고 중요 사항들을 링크로 처리하는 등, 매우 불친절합니다 😉 이건 1편이고 전체 4편 정도로 예상하고 있습니다.

이 정도는 알고 시작하자

일단 sjva를 돌릴 기기가 있어야 하겠죠. NAS(저장장치)에 등장하는 기기 중 하나를 사용하게 될 겁니다. 네트워크로 연결된 NAS를 관리하려면 ssh 클라이언트 연결은 필수입니다. 시놀로지 NAS SSH 접속 방법 같은 글을 읽고 이게 뭔지 감이라도 잡아야 합니다. 네트워크로 연결된 기기에 IP 주소를 사용하여 연결하여 관리한다는 개념을 확장하면, 네트워크 연결된 기기에 sjva를 설치해서 원격에서 관리한다는 개념에 이르게 됩니다. sjva는 기본적으로 네트워크 기기이므로 네트워크 지식도 필수입니다. 공인 IP, 사설 IP, 고정 IP, 유동 IP, DDNS로 고정 IP 서버 구축하기 정도의 글은 읽고 정신을 유지할 수 있어야 합니다.

sjva는 미디어 관리를 돕는 프로그램이기 때문에 plex, transmission 등과 같은 프로그램과 함께 사용하게 됩니다. 따라서 이러한 녀석들을 실제로 설치하고 설정하려면 유닉스 (Unix) / 리눅스 (Linux) 주요 기본 명령어 정도는 알고 있어야 합니다. 물론 Windows에서도 이런 일을 할 수 있지만 닭 잡는 데 소 잡는 칼 휘두르는 격입니다. 되려 쉽지 않다는 뜻입니다.

DDNS

sjva를 사용하려면 DDNS가 필수입니다. 무료 서비스가 여럿 있지만 전 Duck DNS를 추천합니다. 구글 아이디로 로그인해서 지금 하나 만드세요. 시놀로지 DuckDNS 등록하는 방법도 참조하시구요.

일반적인 경우 DDNS 서비스를 무엇을 사용하든 DDNS 주소가 반환하는 것은 공유기에 할당된 공인 IP여여 합니다. 예를 들어 제가 사용하는 nnote.duckdns.org라는 주소가 제 공유기에 할당된 공인 IP로 설정되도록 아래 명령을 한 시간에 한 번씩 실행합니다.

echo url="https://www.duckdns.org/update?domains=nnote&token=5292ghlsgow-gqhgk&ip=" | curl -k -o /root/duckdns/duck.log -K -

DDNS에 할당된 주소를 업데이트 명령은 서비스마다 다르지만 본질적으로 공유기에 할당된 공인 IP를 서비스에 전달하는 행위입니다. 이걸 기억하세요. 공인 IP, 사설 IP를 아직 이해하지 못한다면 DDNS를 제대로 사용할 수 없습니다. 인터넷 검색을 통해 꼭 무엇인지 이해하셔야 합니다. 이 개념은 NAS 사용에 필수적입니다.

DDNS와 sjva 연결

nnote.duckdns.org라는 DDNS 주소가 있다고 합시다. 이 주소로 도커에 설치된 sjva에 연결하려면 어떻게 해야 할까요? 예를 들어, sjva.me에서 플러그인을 설치할 때 제가 입력한 nnote.duckdns.org라는 주소로 sjva.me 사이트의 프로그램이 제 sjva까지 연결해야 할 것입니다. 여러번 말한 것처럼 nnote.duckdns.org라는 DDNS 주소는 결국 제 공유기의 공인 IP입니다. 따라서 sjva.me의 설치 요청은 제 공유기까지 도착할 것입니다. 이제 공유기가 이 요청을 내부 네트워크의 올바른 프로그램(이 경우 도커의 sjva)으로 전달해야 합니다. 이걸 공유기에 지시하는 방법은 두 가지입니다. 하나는 공유기의 포트 포워딩을 이용하는 것이고, 다른 하나는 아래에서 설명할 NPM 같은 프록시 서버를 사용하는 것입니다.

공유기 포트 포워딩

포트 포워딩은 주소와 함께 딸려온 포트를 사용해 내부 네트워크로 신호를 전달하는 기능입니다. 이 기능을 사용하려면 DDNS 주소와 함께 포트를 사용해야 합니다. 예를 들어, http://nnote.duckdns.org:1234라는 주소:포트를 형태를 사용해 외부에서 sjva에 연결한다고 가정합니다. sjva는 내부 IP 주소가 192.168.0.109인 호스트에 아래와 같이 설치되어 있습니다.

sudo docker run -d \
  --name sjva-nova \
  -p 7002:9999 \
  -p 7008:9998 \
  -p 7007:9997 \
  -v sjva-nova_data:/app/data \
  soju6jan/sjva:0.2

호스트 포트 7002가 도커 내부 포트 9999에 매핑되어 있습니다.

이 경우 포트 포워딩 설정(SJVA for Venus)은 다음과 같습니다.

dce17e24c0408e28687d756b966f0a32_1578849756_4075.png

이 설정의 의미는 단순합니다. 1234 포트를 달고 공유기에 도착한 신호를 내부 네트워크 192.168.0.1097002 포트로 전달한다는 의미입니다.

공유기 포트 포워딩 기능을 이용하면 DDNS와 포트 조합 형태로 내부 네트워크의 서비스(예: sjva, transmission 등)를 외부에 노출할 수 있습니다. NPM과 같은 프록시 서버는 여기서 한 단계가 더 필요하며, 이 경우 장점은 포트 없이 주소만 사용하기 때문에 기억하기 쉽고 깔끔하다는 것입니다. 이에 대해서는 관련 프로그램과 함께 아래에서 설명합니다.

도커 vs 네이티브

요즘 대세는 간편한 도커 기반이고, 필요한 경우 네이티브로 설치할 수 있습니다. 도커는 리눅스 기반의 간단한 가상화 플랫폼이라고 생각하시면 됩니다. 이 글은 진철 모드가 아니므로 설치 관련해서는 링크로 대신합니다. 어떤 형태로 설치하든 구동 데이터-이후 설명-만 잘 보존하면, 원할 때 다른 형태로 쉽게 전환할 수 있으니 설치 형태에 대해서는 너무 고민하지 마시기 바랍니다.

  • 시놀로지(헤놀로지) 도커에 SJVA 0.2설치 – 시놀로지 NAS에서 도커를 이용해 sjva 최신 버전을 설치하고 설정하는 과정을 자세하게 설명하고 있습니다. Putty와 같은 관련 프로그램 설치/사용법도 나와 있습니다.

이 글에서는 도커 브릿지 모드로 설치한다고 가정하고 진행합니다.

도커 볼륨

Docker에 대해 알아보자(이론편)Docker 정리 #3 (도커 볼륨) 글을 먼저 읽으셨으면 합니다. 도커는 사용하기 쉽지만 애초에 리눅스 관리자를 위해 만들어진 여러 완성된 기술의 집합체입니다. 이미 기반 개념에 익숙한 대상을 가정하여 만들어졌다는 뜻이므로, 저를 비롯한 무지랭이들이 이해하기 어려운 부분이 있는건 당연합니다. 일반 사용자는 최종적인 사용에 필요한 중요 개념 몇 개에 집중하는 것이 필요합니다. 그 중 하나가 ‘볼륨’이라는 용어입니다. 도커는 읽기 전용 이미지에서 시작하여 실시간으로 여러 계층을 만들어 나가는 방식으로 실행됩니다. sjva를 예로 들면, 읽기 전용 이미지 안에 /app/data라는 폴더가 있고, 모두 설정과 데이터가 기본적으로 이 폴더에 저장됩니다. 이 폴더를 따로 저장하지 않는다면 컨테이너를 실행하여 설정을 한 후 컨테이너를 종료하면 설정한 내용이 다 사라져버리게 됩니다. 도커 계층의 이런 휘발성 때문에 볼륨이 필요합니다. 볼륨은 읽기 전용 상태인 컨테이너 이미지의 파일 시스템(폴더 또는 파일)을 호스트의 정적 파일 시스템에 연결하는 방법입니다. docker run 명령에서는 -v <호스트 파일 시스템>:<컨테이너 파일 시스템> 형식으로 지정하게 됩니다. 이 매핑을 통해 컨테이너가 종료된 후에도 /app/data 폴더를 호스트에 유지할 수 있고, 컨테이너를 실행할 때 다시 동일한 볼륨을 매핑하면 이전 설정 상태를 그대로 사용할 수 있게 됩니다. 이런 이유 때문에 모든 sjva 도커 설치 명령에 /app/data 폴더를 매핑하는 -v 옵션이 있는 것입니다.

도커 볼륨의 또다른 용도는, 호스트의 저장 위치를 컨테이너에 전달하는 것입니다. sjva의 vod 다운로드 옵션은 몇 가지 OTT 서비스의 VOD를 다운로드할 수 있게 해 줍니다. 다운로드한 파일이 컨테이너 실행 시 만들어지는 실시간 계층에만 저장된다면 컨테이너가 종료될 때 다운로드한 파일도 사라지게 됩니다. 그래서 이런 파일을 저장할 호스트의 위치를 sjva 컨테이너의 임의 위치로 연결하여 사용하게 됩니다. 이때 연결하는 위치는 sjva 컨테이너에 존재하는 위치일 수도 있고 사용자가 임의로 지정하는 위치일 수도 있습니다. 컨테이너에 없는 위치라면 실행 시 자동으로 만들어져 연결됩니다.

중요한 것은 도커 볼륨에 두 가지 종류가 있다는 것을 이해하는 것입니다. 하나는 컨테이너 실행과 관련된 설정 데이터를 저장하는 볼륨, 또 하나는 데이터 저장을 위해 컨테이너에 연결한 볼륨. 이 둘을 구분할 수 있어야 합니다. 예를 들어, 도커 컨테이너를 백업한다는 것은 설정 데이터가 저장된 볼륨을 백업한다는 것이고, 이 설정 데이터 볼륨이 있다면 언제라도 컨테이너를 같은 상태로 복원할 수 있습니다.

주요 용어

이 글에서 다음과 같은 용어는 가능하면 엄밀하게 사용하려고 노력했습니다.

  • 호스트 – 도커가 설치되어 있고 sjva 컨테이너를 설치하는 시스템을 의미합니다. 대개 NAS일 것입니다.
  • 호스트 IP 주소 – 공유기 내부 네트워크에서 할당된 호스트의 IP 주소입니다. 셸에서 hostname -I 명령으로 확인할 수 있습니다.
  • DDNS 주소 – 외부 네트워크에서 호스트에 연결할 때 사용하는 주소입니다. duckdns와 같은 DDNS 서비스에 등록할 필요가 있습니다. 최신 공유기들은 자체적으로 DDNS 서비스를 제공하기도 합니다. 결과적으로 이 주소는 공유기에 할당된 공인 IP를 반환해야 하고, 내부 네트워크로의 연결은 공유기 포트포워딩 설정과 프록시 서버와 같은 구성 요소들이 처리합니다. 이 문서에서는 공유기 포트포워딩 설정과 NPM(Nginx Proxy Manager) 도커를 사용하여 이를 처리합니다.

설치

먼저 sjva, transmission, plexmediaserver 도커를 운영할 브릿지 네트워크(예: sjva-tier)를 하나 따로 만듭니다. 같은 브릿지 네트워크에 속하는 도커들은 이름만으로 통신이 가능하기 때문에 편리합니다.

sudo docker network create sjva-tier

저는 컨테이너마다 도커 자체 볼륨을 따로 만들어서 관리합니다. 이건 취향이니 따라 하실 이유는 없습니다.

sudo docker volume create --name sjva-nova_data

sjva 도커를 설치합니다. sjva의 설정은 /app/data 폴더에 저장된다는 것을 기억하십시오.

sudo docker run -d \
  --name sjva-nova \
  --network=sjva-tier \
  -p 7002:9999 \
  -p 7008:9998 \
  -p 7007:9997 \
  -v sjva-nova_data:/app/data \
  -v /mnt/sata/downloads:/downloads \
  -v /mnt/toshiba:/toshiba \
  soju6jan/sjva:0.2

포트 매핑은 sjva 자체(9999)와 sjva에 포함된 두 가지 구성 요소(9998, 9997)에 필요한 포트 매핑입니다. 호스트에서 사용하지 않는 포트를 확인하여 설정하시면 됩니다.
설치가 완료되면 호스트 IP 주소와 지정한 포트(예: http://192.168.0.109:7002)를 사용하여 접속합니다.

인증

앞으로 인증 방법이 바뀌게 되겠지만 현재는 사이트 개설에 공개된 임시 인증 코드를 사용하여 인증할 수 있습니다. 인증을 안 하면 프로세스가 종료되니 빨리-3분컷이던가요?- 인증하셔야 됩니다. 프로세스가 종료되어 접속할 수 없다는 오류가 표시되면 아래 명령으로 컨테이너를 다시 시작하셔야 합니다.

sudo docker restart sjva-nova

dce17e24c0408e28687d756b966f0a32_1578849716_363.png

초기 접속 아이디/암호는 sjva/sjva입니다. 접속되었으면 즉시 시스템 > 설정으로 이동하여 인증 입력란에 사이트 개설 게시물에 나와 있는 인증 코드를 넣고 저장을 클릭하세요.

초기 설정

시스템 > 설정일반 탭에서 다음을 설정합니다.

  • 로그인 ID/로그인 암호 – 보안을 위해 반드시 변경하셔야 합니다.
  • DDNS – sjva의 여러 기능에서 외부 연결이 필요하므로 필수입니다. 전 nnote.duckdns.org를 미리 등록해 두었습니다. 등록하실 때 아래 이미지처럼 https:// 또는 http:// 부분 꼭 입력하세요. 이건 없음 안 됩니다. 리버스 프록시를 사용하지 않고 포트를 사용하는 경우, 공유기 포트 포워딩도 잊지 마시구요.
  • URL FileBrowser – 도커 컨테이너의 파일 구조를 탐색할 수 있는 도구입니다. 도커 설치할 때 지정한 포트가 여기서 필요합니다. http:<호스트 IP>:포트 형식으로 지정합니다. 처음 접속하면 admin/admin으로 로그인해야 합니다. 로그인한 후 바로 Settings로 이동하여 Change Password 실행하세요. 여기서 언어도 한국어로 설정할 수 있습니다.
  • URL Celery Monitoring – 모니터링 도구인 것 같은데 뭔지 잘 모릅니다. 위와 같은 형식으로 지정합니다.
  • 자동 재시작 시간 – sjva를 자동으로 재시작하는 간격입니다. 6을 지정하면 6시간마다 한 번씩 재시작합니다.
  • 로그 레벨 – 각 구성 요소의 로그 탭에서 확인할 수 있는 로그의 상세 출력 수준을 지정합니다.
  • 토큰 – 보안 또는 인증 용도로 여러 구성 요소에서 사용됩니다. 이 위치에 있다는 것을 기억해 두시면 됩니다.

DDNS를 등록하고 관련 설정은 한 후부터는 DDNS로 접속해서 작업하는 것이 편리합니다. 저는 INFO로 사용합니다.

설정이 완료된 일반 탭의 모습니다.

dce17e24c0408e28687d756b966f0a32_1578849716_2599.png

제 DDNS 주소는 https://sjva.nnote.duckdns.org입니다. duckdns는 하위 주소(sjva)를 자유롭게 만들어 쓸 수 있습니다. https://plex.nnote.duckdns.org 형태도 만들어 쓸 수 있다는 의미입니다. 다만 이렇게 하위 도메인을 내부 네트워크의 서로 다른 호스트 또는 호스트의 서로 다른 컨테이너에 연결하려면 프록시 서버가 필요합니다. 시놀로지 NAS에 해당 기능이 있는 것으로 압니다만, 여기서 소개하는 Ngnix Proxy Manager 도커는 웹 서버를 포함하며 인증서까지 처리하므로 설치하여 사용할 것을 적극 권장합니다.

Nginx Proxy Manager

DDNS를 사용하여 sjva, plexmediaserver, transmission을 외부에서도 사용할 수 있도록 만들 것입니다. 이를 위해 프록시 서버가 필요합니다. 여기서 사용하는 것은 Nginx Proxy Manager(NPM) 도커입니다. 아래와 같이 만듭니다.

docker volume create nginx-proxy-manager_data
docker run -d --name=nginx-proxy-manager \
    -p 8181:8181 \
    -p 8180:8080 \
    -p 8443:4443 \
    -v nginx-proxy-manager_data:/config:rw \
    jlesage/nginx-proxy-manager

8181은 관리 인터페이스 접속 포트이고, 8180, 8443은 각각 http, https 프로토콜에 할당된 포트입니다. http://호스트-IP:8181로 접속해 보세요. Default Administrator Account에 따르면 처음 접속할 때 아이디와 암호로 admin@example.com/changeme를 사용해야 합니다. 자동으로 관리자 만들기 페이지로 연결됩니다.

잘 연결되었으면 이제 공유기 포트포워딩 메뉴에서 HTTP와 HTTPS를 Nginx Proxy Manager로 연결해줍니다.

dce17e24c0408e28687d756b966f0a32_1578849740_3299.png

설치한 후 공유기에서 http/https를 NPM 컨테이너로 리디렉션해 주어야 이후의 인증서 설정, 사이트 설정 등에서 오류가 발생하지 않습니다. 이제 도메인 이름을 사용하는 모든 연결을 NPM이 처리하게 됩니다.

도메인 연결

미리 Duck DNS에서 nnote.duckdns.org라는 DDNS를 등록하고 공유기 공인 IP로 설정되도록 스크립트를 실행했습니다. DuckDNS 와 시놀로지 연결하기를 참고하세요.

이제 sjva.nnote.duckdns.org를 방금 전에 만든 sjva와 연결할 것입니다. 참고로, duckdns는 xxx.duckdns.org를 등록하면 yyy.xxx.duckdns.org 형태를 사용할 수 있습니다. yyy는 아무 문자열이나 상관 없습니다. 공유기의 포트 포워딩 서비스가 특정 포트로 들어오는 신호를 내부 호스트:포트로 전달하는 서비스라면, 프록시 서비스는 도메인 이름을 내부 호스트:포트로 연결하는 서비스라고 생각하시면 됩니다.

NPM(Nginx Proxy Manager)에서 HostsProxy Hosts를 클릭하세요.

dce17e24c0408e28687d756b966f0a32_1578850151_4467.png

Proxy Hosts 페이지 왼쪽에 있는 Add Proxy Host 단추를 클릭합니다.

Details 페이지에서 아래와 같이 설정합니다.

dce17e24c0408e28687d756b966f0a32_1578849716_1514.png

SSL 페이지에서 아래와 같이 설정합니다.

dce17e24c0408e28687d756b966f0a32_1578849716_1946.png

Save를 클릭합니다.

적용되면 아래와 같은 목록이 나타납니다.

dce17e24c0408e28687d756b966f0a32_1578850477_2284.png

sjva.nnote.duckdns.org 링크를 클릭하면 방금 전에 만든 sjva 페이지가 나타납니다. 주소 표시줄을 확인해보면 https로 연결된 것을 알 수 있다. 휴대폰의 와이파이를 끄고 데이터 통신으로 접속해 보세요. 이 상태에서 잘 연결되면 프록시 서버가 제대로 작동하는 것입니다(일부 공유기는 외부에서만 제대로 연결되고 내부에서 도메인을 사용할 수 없는 경우가 있음).

selenium

sjva의 여러 서비스에서 필요합니다. 아래와 같이 설치합니다. 호스트 포트 4444만 적절한 값으로 바꿔주면 됩니다.

docker run -d --name selenium -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome

설치한 후 sjva의 시스템 > 설정Advanced 탭에서 주소를 입력해 주세요. 제 호스트 주소는 192.168.0.109입니다.

dce17e24c0408e28687d756b966f0a32_1578849716_2825.png

GO를 클릭하여 접속되는지 확인한 후 저장을 클릭하세요.

그린터널 via 이치로

토렌트 > RSS 기능에서 대한민국의 차단 정책을 피해 사이트를 등록하려면 필수입니다. sjva 내부에도 그린터널을 설정하는 기능이 있으나 차단을 피할 일은 많으니 도커로 설치해서 사용합시다.

저는 아래와 같이 설치했습니다.

docker run -d \
     --name=ctunnel \
     -p 8008:8008 \
     -e PROXY_USER=user \
     -e PROXY_PASS=password \
     wiserain/ctunnel:latest

userpassword, 호스트 포트(8008)를 적절한 값으로 지정하시면 됩니다.

이 도커는 인증 기능이 있으므로 아래와 같이 공유기 포트 포워딩을 설정하여 외부에서도 그린터널을 사용할 수 있습니다.

dce17e24c0408e28687d756b966f0a32_1578849740_3299.png

크롬과 에지는 시스템 프록시 설정을 사용하기 때문에 자체 프록시 기능이 있는 Firefox를 예로 들면, 설정 > 네트워크 설정설정 단추를 클릭하고 아래와 같이 DDNS 주소와 포트를 지정하여 외부에서 그린터널을 이용할 수 있습니다.

dce17e24c0408e28687d756b966f0a32_1578849740_3522.png

이렇게 설정하고 Firefox를 실행하면 도커를 만들 때 설정한 아이디와 암호를 묻는 대화 상자가 나타납니다. 아이디와 암호를 입력하면 대부분의 차단을 피할 수 있습니다. 이 상태에서도 막히는 사이트가 있다면 Opera 브라우저의 VPN 기능을 이용하시기 바랍니다. 속도는 느리지만 만능입니다.

시스템 > 설정의 기타 메뉴

탭에서 sjva에 사용할 테마를 지정할 수 있습니다. 저는 Darkly가 취향입니다.

메뉴 탭에서 사용할 메뉴 항목을 설정/해제할 수 있습니다. Toggle 단추를 클릭하고 사용할 메뉴들을 활성화하세요. 적용하려면 재시작이 필요합니다.

dce17e24c0408e28687d756b966f0a32_1578849716_3051.png

간혹 이 메뉴를 몰라서 기능이 아무 것도 없다고 하시는 분들이 있는데 여기서 활성화할 수 있습니다. On으로 설정한 후 저장을 클릭하고 sjva를 재시작해야 적용된다는 것 잊지 마십시오.

링크 – 자주 방문하는 주소를 등록하면 메인 링크 메뉴 아래에 나타납니다.

다운로드 – sjva 관련 프로그램들을 다운로드할 수 있는 메뉴입니다.

마무리

dce17e24c0408e28687d756b966f0a32_1578849740_3791.png

이제 sjva 사용에 필요한 기본적인 설정을 마쳤습니다. 시작 화면이 아름답네요. 이후에는 토렌트, PLEX, 파일 처리, 툴의 순으로 알아보겠습니다.

토렌트

sjva 토렌트 관련 기능의 핵심은 다음과 같습니다.

  • 웹의 토렌트 정보 사이트 게시판을 분석하여 RSS 형식으로 제공 – 이 정보는 sjva 자체에도 사용되고 외부 프로그램에서도 사용할 수 있습니다. 대부분의 다운로드 자동화에서 rss 주소를 이용한다는 점에서 sjva는 기반 프로그램입니다.
  • 등록된 토렌트 다운로드 프로그램에 다운로드 정보를 전달하는 기능
  • sjva 메인 텔레그램 봇이 전달하는 토렌트 정보를 수신하여 목록으로 만드는 기능
  • 텔레그램 봇이 전달하는 토렌트 정보를 바탕으로 자동으로 다운로드하는 기능

sjva가 일반적인 다운로드 자동화와 다른 점은 텔레그램 봇을 통해 다운로드를 자동화한다는 점입니다. rss를 필터링하여 다운로드를 자동화하는 기존 기능에 익숙한 입장에선 처음에 이해하기 쉽지 않습니다. sjva에서 rss를 등록하여 자동으로 다운로드할 수 있는 기능은 offcloud 기능이 유일합니다. 나머지는 텔레그램 봇을 통해 전달된 정보를 사용하여 자동으로 다운로드하거나 사용자가 텔레그램 클라이언트/앱 또는 sjva 웹 인터페이스에서 클릭하여 다운로드를 지시해야 합니다. sjva로 만든 rss를 필터링하여 다운로드하려면 torressen 같은 다운로더를 함께 사용해야 합니다.

아래에서는 이 과정을 단계별로 나누고 관련된 sjva 인터페이스를 보여줍니다.

  1. 먼저 텔레그램에 가입하고 정보 전달에 필요한 봇을 등록합니다. 이 과정에서 얻은 정보를 > Telegram Bot설정 페이지에 입력하고 스케줄링을 실행합니다.
    dce17e24c0408e28687d756b966f0a32_1578849756_4347.png
  2. 시간이 지나면 텔레그램을 통해 RSS 정보가 수신됩니다. 이 정보는 토렌트 > RSSBot 탭에서 확인할 수 있습니다.
    dce17e24c0408e28687d756b966f0a32_1578849740_3039.png
  3. 이 정보를 기반으로 토렌트 > 다운로드 영화설정 탭에서 아래와 같이 자동 다운로드 사용을 켜고 조건을 설정하면 조건에 맞는 RSS 항목이 다운로드 프로그램으로 자동으로 전달되어 다운로드됩니다.
    dce17e24c0408e28687d756b966f0a32_1578849756_4347.png
  4. 토렌트 > 다운로드 영화목록 탭을 보면 자동 다운로드 기능이 봇을 통해 전달된 정보를 패스하거나 요청하는 것을 확인할 수 있습니다.
    dce17e24c0408e28687d756b966f0a32_1578849740_2607.png
  5. 현재 다운로드 상황은 토렌트 > 다운로드상태에서 확인할 수 있습니다.

자동 다운로드는 지나치게 많은 파일을 받을 수 있기 때문에 텔레그램에서 정보를 확인하고 다운로드 지시를 내리는 형태가 원래 sjva의 용도라고 생각하시면 맞을 겁니다.

sjva의 rss를 다른 다운로더에서 이용하는 방법은 따로 누군가 다룰거라고 생각합니다. 여기에서는 텔레그램을 등록하고 관련 정보를 sjva에 입력하는 것만 다룹니다.

RSS 수집

sjva는 두 가지 방식으로 rss 수집 기능을 구현합니다. 하나는 사용자가 직접 크롤링(탐색)하여 rss를 만드는 방식이고, 또 하나는 텔레그램 봇을 이용해 sjva 관리 봇(?)이 제공하는 rss 정보를 수신하는 방식입니다. 관련하여 개발자이신 소주6잔님이 쓰신 글을 먼저 봅시다. 0.1.2 업데이트 & 텔레그램 봇, 텔레그램으로 토렌트 받기, 베타 RSS 추가. 쓰신 시간순으로 나열한 것인데 마지막 글을 보면 아래와 같은 교시(?)가 있습니다.

저는 사용자가 직접 크롤링하여 사용하는건 권장하지 않고, 텔레그램으로 정보를 받아서 사용하라고 말씀드렸습니다.
……
즉, 국내TV / 영화 / JAV-Censored 들의 영상은 텔레그램 봇으로 정보를 받으시고 이외는 직접 크롤링방식을 사용하는 걸 권장합니다.

소주6잔 via 베타 RSS 추가

실제로 제가 직접 크롤링도 사용해보고 봇도 사용해보니 두 정보가 겹칩니다. 소주6잔님이 제공한 사이트 정보만 사용하니 당연한 결과겠죠. 그러니까, 먼저 봇을 설정해서 rss 정보를 받고 필요에 따라 직접 크롤링으로 rss를 만들어 사용하시면 됩니다.

텔레그램 ID 만들기

텔레그램을 통해 정보를 받으려면 먼저 텔레그램에 가입해서 ID를 만들어야겠죠. 텔레그램 한글사이트를 방문해서 사용하는 스마트폰에 앱을 받아 설치하고 PC용 클라이언트를 받아서 설치하세요. 가입은 스마트폰에서 하고, 그렇게 만든 ID를 사용해 PC용 클라이언트를 실행하시면 됩니다. PC용 클라이언트가 필요한 이유는, 봇을 서로 연결하고 관련 정보를 받아 입력하려면 스마트폰 앱이 불편하기 때문입니다. 가입과 관련해서는 검색하면 많은 글이 나오고, 해 보면 아는 과정이기 생략합니다. 그리고 설치와 가입을 마쳤으면 텔레그램 알림을 해제하세요. 이렇게 해두지 않으면 알림 정말 많이 옵니다 😉

텔레그램 봇 등록

아래 글은 소주6잔님이 작성하신 0.1.2 업데이트 & 텔레그램 봇 – Soju6jan을 허락 없이 재활용한 것입니다. 따라서, 소주6잔님 글을 보셔도 됩니다.

텔레그램은 누구나 봇이라고 하는 가상 사용자를 만들어 자동화에 이용할 수 있게 만들어 놓았습니다. 봇은 텔레그램 서버에서 실행되면서 필요한 정보(대화)를 전달해주는 가상 사용자입니다.

sjva의 > Telegram Bot 메뉴로 이동하면 맨 아래에 세 개의 단추가 있습니다.

img

PC에서 BotFather 단추를 클릭하여 PC 클라이언트에서 BotFather를 연 다음 새 봇을 만드는 명령인 /newbot을 입력합니다.

아래 이미지에서 볼 수 있는 것처럼 아버지봇은 새로 만들 봇 이름을 묻습니다. 봇은 가상이지만 사용자이니 사용자 이름도 묻습니다. 봇 사용자 이름은 bot을 끝나야 한다고 알려주네요. 이 과정을 마치면 아버지봇은 자식봇의 정보를 반환해줍니다. 복사해서 기록해 두세요. 예제 이미지에서 봇 이름과 봇 사용자 이름 모두 sjva_test_bot입니다.

img

위 이미지에서 볼 수 있는 HTTP API 토큰이 바로 Bot Token입니다. 복사해서 sjva의 입력란에 붙여넣으시면 됩니다.

img

My Chat IDSJVA Bot Channel 관리 봇 단추를 클릭하여 sjva 메인 관리 봇과 아무 대화나 하면 알 수 있습니다.

img

이 정보를 My Chat ID에 입력하고 저장을 클릭하세요.

이제 이렇게 만든 내 봇을 sjva 봇 채널에 등록해야 합니다. 채널 등록에는 두 가지 sjva 봇이 필요합니다. 하나는 이미 대화를 하고 있는 SJVA Bot Channel 관리 봇이고 다른 하나는 실제로 내 봇에 대화를 전달해주는 SJVA 채널 봇입니다.

SJVA Bot Channel 단추를 클릭하여 SJVA 채널 봇을 시작하세요. 이 채널 봇과는 대화를 할 수 없습니다. 이 채널 봇을 연 상태에서 SJVA Bot Channel 관리 봇 단추를 클릭합니다. SJVA Bot Channel 관리 봇에게 /add 명령을 내립니다. 그럼 SJVA 채널 봇에서 내 봇을 등록할 수 있는 상태가 됩니다.

img

SJVA 채널 봇 채널로 돌아가 참가자 추가를 선택하고 앞서 만든 봇 이름을 입력합니다.

img

봇 권한은 그대로 두고 관리자로 세우기 > 저장을 차례로 클릭합니다.

img

이제 완료되었습니다.

SJVA 채널 봇에서 나갑니다.

3130688d7818925c9c3d1ad1ec874dec_1578733080_5756.png

SJVA Bot Channel 관리 봇을 종료합니다.

3130688d7818925c9c3d1ad1ec874dec_1578733080_5517.png

이 작업을 마쳤으면 이제 스케줄링을 실행하여 실제로 rss 정보를 받아올 수 있습니다.

3130688d7818925c9c3d1ad1ec874dec_1578735507_8593.png

스케쥴링 작동, 시작시 자동실행은 제목 그대로이고, 토렌트On으로 설정해주어야 토렌트 정보를 받아옵니다. 수신 타입은 토렌트 정보의 범주인데 all로 받으면 모든 범주를 받고, 각 범주 정보는 그대로 유지되므로 특별히 한 범주만 받아야 하는 경우가 아니라면 all로 설정하세요.

Offcloud 캐쉬 정보는 Offcloud가 있으시면 설정하시면 됩니다. 이게 설정되어 있으면 오프클라우드 캐시 정보가 내 텔레그램 봇에게 전달되고, 사용자는 메시지에 있는 링크를 클릭하여 Offcloud에 다운로드 명령을 내릴 수 있습니다.

스케줄링은 sjva 메인 봇으로부터 rss 정보를 수신하는 기능입니다. 수신정보 알림은 이 정보 수신(토렌트 및 Offcloud 캐시) 상황을 내 텔레그램 봇에게 메시지로 전달해주는 기능입니다. 텔레그램 봇에서 미디어를 확인하고 링크를 클릭하여 다운로드 받는 시나리오를 사용하고 싶다면 수신정보 알림을 켜세요.

알람 Disable은 알림 소리를 해제하는 기능인 것 같은데 전 소리, 진동을 기본으로 끄고 사용하기 때문에 정확히 어떤 기능인지 모릅니다.

스케줄링을 설정하고 꽤 오래 기다리셔야 정보가 들어옵니다. 반 나절 이상이 걸릴 수 있으니 넉넉히 하루 정도 두고 보세요.

RSS 주소 얻기

이렇게 수신된 RSS 정보는 토렌트 > RSS 메뉴의 Bot 탭에서 확인할 수 있습니다.

3130688d7818925c9c3d1ad1ec874dec_1578737892_0974.png

범주 목록을 클릭하여 열고 원하는 범주를 선택한 다음 검색 단추를 클릭하면 옆에 필요한 rss 주소가 나타납니다. 보시다시피 범주가 깔끔하게 정리되어 있습니다. 직접 크롤링하여 이런 범주를 구현한다면 꽤 귀찮은 작업을 거쳐야 합니다. sjva 게시판에 공개된 수집 주소로 얻을 수 있는 목록과 봇을 통해 얻는 정보는 크게 다르지 않으니 가능하면 봇을 통해 RSS 정보를 받으시길.

이제 처음에 설명한 것처럼 자동 다운로드 설정하여 사용하거나 텔레그램 메신저에서 다운로드를 지시할 수 있습니다.

자동 다운로드를 아래와 같이 설정합니다. 이것은 영화의 경우이고, 드라마/예능은 Plex 라이브러리 정보를 활용하여 중복 다운로드를 방지할 수 있습니다.

dc1f21a26f9c445d6fcb80ff1b1c6651_1578829073_0927.png

스케줄링 실행 주기에 지정된 간격마다 새 정보가 있는지 확인하여 처리합니다.

텔레그램 수신시 – 이 옵션은 잘 모르겠습니다 -.-a 아마 텔레그램에서 전송된 다운로드 지시를 실행하지 않고 무시하거나, 스케쥴링 작동On일 때만 다운로드 지시를 실행하거나, 스케쥴링 작동Off여도 다운로드 지시를 실행한다는 의미 아닌가 싶습니다.

자동 다운로드 사용 아래에 있는 조건은 쉽게 이해할 수 있습니다.

텔레그램 메시지On으로 설정하면 토렌트 다운로드 처리 상황을 텔레그램으로 알려줍니다.

sjva의 토렌트 기능은 rss를 제공하는 기능이고, 자동 다운로드는 텔레그램 봇을 통해 이루어진다는 것을 이해했다면 왜 torrssen2나 showdown이 필요한지도 아실 수 있을 것입니다.

3, 4편은 다음 주말에나 올리겠네요. 글 쓰는 도중에 다른 일에 꽂혀서 -.-a

네트워크

sjva는 단독으로도 훌륭한 프로그램이지만 transmission, plex 등과 함께 할 때 더 빛을 발합니다. 이런 프로그램들과의 연동이 필수적입니다. 문제는 plex입니다. 이걸 도커로 설치해서 호스트 설치된 plex와 구분하고 역시 도커에 설치한 sjva와 통신하게 만들 방법이 뭔지 떠오르지 않더군요. 보통 plex를 더 설치할 때는 virtualbox 브릿지 네트워크에 설치해서 공유기에서 IP를 직접 받는 방식을 사용했습니다. 아니면 물리적 호스트를 하나 더 만들던가요.

이러던 와중에 macvlan을 이용한 docker-pi-hole 설치하기를 보게 되었습니다. 글쓴이가 sjva 도커를 만들고 계시는 이치로님이시네요 😉 보자마자 macvlan 하나를 만들고 sjva, plex, transmission 기타 등등을 설치해서 사용하면 되겠구나 싶은 생각이 들더군요. macvlan은 어렵게 생각할 것 없이 허브나 브릿지 모드로 연결한 공유기 역할을 한다고 생각하면 될 것 같습니다. macvlan에 속한 컨테이너들은 공유기에서 직접 IP를 받습니다. 이치로님 글에도 있듯이 이 네트워크의 가장 큰 난점은 호스트가 macvlan 네트워크와 통신할 수 없다는 점이고, 제거 보기에 이걸 해결하는 방법이 깔끔해 보이지 않았습니다. 그렇다면 호스트와 직접 통신할 필요가 없게 만들면 되는 것 아닌가 싶어서 필요한 것들을 한 macvlan 아래에 호스트 모드로 설치하는 되겠다고 생각했고, 생각대로 잘 됩니다. 아래 관련 글도 참고하시구요. (뭔가 생초보라는 타이틀에서 벗어난 것 같은…)

# 현재 네트워크 인터페이스 상태 확인(BMRU - promiscuous 모드 활성화 안 됨)
root@venus:/mnt/sata/opt# netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
enp2s0    1500 28828920      0      0 0      12633994      0      0      0 BMRU

# promiscuous 모드 활성화(비활성화는 -promisc)
root@venus:/mnt/sata/opt# ifconfig enp2s0 promisc

# 확인(BMPRU)
root@venus:/mnt/sata/opt# netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
enp2s0    1500 28830497      0      0 0      12635320      0      0      0 BMPRU

# 확인 2(PROMISC)
root@venus:/mnt/sata/opt# ifconfig
enp2s0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet 192.168.0.109  netmask 255.255.255.0  broadcast 192.168.0.255
# macvlan 생성
root@venus:/mnt/sata/opt# docker network create -d=macvlan --subnet=192.168.0.0/24 -o parent=enp2s0 homenet

macvlan을 만들었으니 NPM을 이 네트워크로 옮깁니다. 개별 IP를 받으니 포트 신경 쓸 필요 없이 호스트 모드로 설치합니다. 이미 말했듯이 도커는 데이터 볼륨만 유지하면 언제라도 설정을 유지하면서 새로 만들 수 있습니다. 참고로 저는 아래와 같이 DHCP 할당 범위를 좁혀서 사용하고 있습니다.

dc1f21a26f9c445d6fcb80ff1b1c6651_1578806888_0019.png

macvlan 네트워크에는 201에서 시작하는 주소를 사용할 것입니다.

원래 NPM은 아래와 같이 만들었습니다.

docker volume create nginx-proxy-manager_data
docker run -d --name=nginx-proxy-manager \
    -p 8181:8181 \
    -p 8080:8080 \
    -p 4443:4443 \
    -v nginx-proxy-manager_data:/config:rw \
    jlesage/nginx-proxy-manager

기존 도커를 중지시키고 삭제한 후(중지된 도커만 삭제 가능) 새로 만듭니다.

docker stop nginx-proxy-manager
docker rm nginx-proxy-manager
docker run -d --name=nginx-proxy-manager \
  --network=homenet \
  --ip=192.168.0.201 \
  -v nginx-proxy-manager_data:/config:rw \
  jlesage/nginx-proxy-manager

자신의 네트워크 장치, 호스트 IP 주소를 확인하여 적절히 수정하여 명령을 실행하십시오. promiscuous 모드 관련해서는 이치로님 글 정독하시구요. docker 명령에서 config 폴더와 transcode 폴더는 필수이고 나머지는 데이터 볼륨입니다. 호스트의 /mnt/sata/opt/plex 폴더에는 chown -R plex:plex plex 명령으로 소유권을 주었습니다.

docker run -d \
  --name=plex \
  --network=homenet \
  --ip=192.168.0.110 \
  -e VERSION=latest \
  -e PUID=112 -e PGID=118 \
  -e TZ=Asia/Seoul \
  -v /mnt/sata/opt/plex/config:/config \
  -v /mnt/sata/opt/plex/transcode:/transcode \
  -v /mnt/plexdrive:/data/plexdrive \
  -v /mnt/sata:/data/sata \
  -v /mnt/toshiba:/data/toshiba \
  -p 32400:32400 \
  -p 32400:32400/udp \
  --restart unless-stopped \
  linuxserver/plex

도커 실행 후 http://192.168.0.110:32400/web 페이지에 접속하면 새 플렉스 서버를 등록하는 과정이 시작됩니다. 한 컴퓨터에 plex 두 개 설치해 본 분이라면 macvlan이 얼마나 편한 기능인지 금방 눈치채실겁니다. 이제 같은 방식으로 이 네트워크 아래에 몇 개라도 plex 서버를 설치할 수 있습니다. 진짜 도커 만세네요.

뭔가 본말이 전도된 것 같지만 이제 transmission과 plex를 sjva에 연결해 보겠습니다.

설명을 위해 필요하기 때문에 도커로 linuxserver/transmission를 설치했습니다.

docker run -d \
  --name=transmission \
  --network=sjva-tier \
  -e PUID=0 \
  -e PGID=0 \
  -e TZ=Asia/Seoul \
  -e TRANSMISSION_WEB_HOME=/transmission-web-control/ \
  -p 9091:9091 \
  -p 51413:51413 \
  -p 51413:51413/udp \
  -v /mnt/sata/opt/transmission/config:/config \
  -v /mnt/sata/downloads:/downloads \
  -v /mnt/sata/downloads/watch:/watch \
  --restart unless-stopped \
  linuxserver/transmission

plex는시리즈와 Synology NAS에서 Plex Media Server를 Docker로 설치하기 참고해서 아래와 같이 설치했습니다. IP가 하나인데 어떻게 plex 두 개를 설치하나 싶었는데 sjva 도커를 배포하고 계신 이치로님이 macvlan이란 좋은 걸 알려주셔서 응용할 곳이 많습니다.

글 내보낸 후 수정

StackEdit에서 Export As HTML > Styled HTML로 내보낸 후 파일을 열어 내용을 복사하여 게시판에 붙여넣고, HTML 모드의 콘텐츠를 복사하여 편집기에 붙여넣고 <pre로 검색하여 그 안에 있는 code 태그의 background-color 정보를 제거한다.

Published inblah-blah

Be First to Comment

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다