IT Info & Tips/리눅스 & NAS Info

Jellyfin 설치 (for Synology with docker) v2

00. 설치에 앞서서

몇 안되는 설치형 미디어 서버 중에서 하드웨어 트랜스코딩같은 기능을 제공하면서 무료로 사용이 가능한 Jellyfin을 설치하는 방법을 간단하게 소개하도록 한다. 젤리핀의 전신은 Emby 미디어 서버로, 해당 서비스가 오픈 소스를 포기하고 상업용으로 돌아서면서 포크되어 나온 오픈소스 미디어 서버가 지금 소개하는 젤리핀이다.

 

젤리핀에 대한 장단점 소개나 사용법 등등은 기회가 될때 다른 글에서 다루기로 하고, 이번 글에서는 시놀로지 제품군에서 도커를 활용해 설치하는 방법에 대해 알아보도록 한다. 그저 명령어만 나열하지 않고, 왜 이렇게 입력해야하고 실행해야하는지에 대해서 가능한한 상세하게 설명을 포함함으로써 도커 사용법에 대한 감을 잡도록 한 글이니 참고하시길 바란다. (그런 의미에서 숙련자분들은 보실 필요가 없다.)

 

** 테스트 환경 **

- Docker가 설치된 시놀로지 920+

- 역방향 프록시를 사용해야하니 미리 인증서 적용 작업이 되어 있어야 한다. (ex. Let's Encrypt..)

- 젤리핀 외부 접속에 사용할 도메인 또는 DDNS 주소

- SSH 접속을 위한 환경 구성 및 Putty 설치

 

01. 공식 이미지 vs linuxserver.io 이미지

젤리핀을 도커에서 설치하기 위해서는 도커 허브에서 알맞는 이미지를 선택해야하는데 본인이 추천하는 이미지는 두가지이다. 하나는 젤리핀 github에서 제공하는 공식 이미지가 그것이고 나머지 하나는 www.linuxserver.io 에서 제공하는 별도의 컨테이너 이미지다.

 

도커를 이용할때 오피셜 이미지가 있음에도 linuxserver에서 제공하는 별도 이미지를 사용하는 경우가 많은데 대체적으로 관리의 편의성 또는 내부적으로 최적화된 이미지를 제공되기 때문이다. 또한 해당 이미지의 도커 세팅에 대한 보다 상세한 문서를 제공하고 있어서 다루기가 쉬운편이다. config 관련해서 항상 일관된 설정 환경을 제공하는 것도 특징이다. linuxserver 에서 제공하는 도커 이미지를 하나 사용해봤다면 다른 이미지들 세팅도 쉽게 감을 잡을수 있다. 

 

- 매 업데이트때마다 어플리케이션 업데이트 이미지 제공

- 손쉬운 유저 맵핑 (PGID, PUID)

- S6 오버레이로 관리되는 베이스 이미지

- linuxserver에서 제공되는 모든 이미지는 매주 OS 차원에서 각종 최적화를 위한 업데이트가 제공됨

- 정기적인 보안 업데이트

 

업데이트 속도도 오피셜과 비교했을때 큰 차이가 없으니 원하는 이미지로 설치하면 된다. 오피셜도 사용해봤고 linuxserver 이미지도 사용해봤는데 젤리핀은 이미 활성화된 커뮤니티와 문서가 다양하기 때문에 어느쪽을 이용해도 큰 차이가 없으리라 본다. 다만 이번 글에서는 본인의 편의상 linuxserver 이미지를 기본으로 함을 알린다.

 

02. Docker-Compose 도커 컴포즈를 이용한 설치

도커에서 이미지를 설치할때는 커맨드 라인에서 하나 하나 입력하는 Docker CLI 방식이 있고, 미리 명세서를 작성해서 한꺼번에 실행하는 Docker-compose 방식이 있다. 개인적으로는 컴포즈 방식을 선호하고 나중에 재설치나 유지보수를 위해서라도 이쪽을 권장하며 이 글에서도 해당 방법을 통해 설치하도록 한다. 

 

Docker-Compose 라고하니 뭔가 거창해보이지만 사실 간단한 방법이다. 설치에 필요한 세팅 사항들을 하나의 텍스트 파일로 만들고 docker-compose.yml 이라는 파일로 저장하면 끝이다. 이후 커맨드 라인에서 docker-compose up -d 라는 명령어만 내리면 자동으로 설치가 완료된다. 에러가 뜨면 에러 문구를 확인하고 yml 파일을 수정해서 재실행하면 그만이니 겁내지말고 하나씩 해보도록 하자.

 

아래는 linuxserver 에서 제공하는 도커 컴포즈 예제 파일이다. 이를 기본으로 수정하면 된다. 

 

---
version: "2.1"
services:
  jellyfin:
    image: ghcr.io/linuxserver/jellyfin
    container_name: jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
      - JELLYFIN_PublishedServerUrl=192.168.0.5 #optional
    volumes:
      - /path/to/library:/config
      - /path/to/tvseries:/data/tvshows
      - /path/to/movies:/data/movies
      - /opt/vc/lib:/opt/vc/lib #optional
    ports:
      - 8096:8096
      - 8920:8920 #optional
      - 7359:7359/udp #optional
      - 1900:1900/udp #optional
    devices:
      - /dev/dri:/dev/dri #optional
      - /dev/vcsm:/dev/vcsm #optional
      - /dev/vchiq:/dev/vchiq #optional
      - /dev/video10:/dev/video10 #optional
      - /dev/video11:/dev/video11 #optional
      - /dev/video12:/dev/video12 #optional
    restart: unless-stopped

03. 설치 폴더 생성 및 yml 파일 생성

먼저 docker 폴더 아래에 jellyfin 폴더를 하나 생성하고 그 아래에 config 폴더를 생성한 뒤 작업을 시작하자. ssh로 접속해서 mkdir 명령어로 만들어도 되고, 그냥 시놀로지의 파일 스테이션에서 직접 만들어도 된다. 편한 방식으로 만들자. 생성된 jellyfin 폴더에 위 예시 파일을 생성하도록 한다. 역시 ssh에서 vi 에디터로 만들어도 되고, 시놀로지의 패키지중에 텍스트 편집기를 설치하고 생성해도 된다. 개인적으로는 텍스트 에디터로 만드는것이 편리해서 애용하고 있다. 다만 vi 에디터를 한번 배워두면 리눅스 환경에서 두고두고 편리하게 쓸수 있으니 기회가 되면 한번쯤 알아보시길 권한다. 저장 파일명은 docker-compose.yml 이다. 

 

04. Docker-compose.yml 수정

이제 설치에 앞서 본격적으로 yml 파일을 수정해보록 하자. 

 

PUID와 PGID는 ssh에서 확인 작업이 필요로 하다. ssh로 접속한후 id 라고 입력하면 현재 본인이 사용중인 puid와 pgid가 표시되는데 해당 숫자를 기입하면 된다. 

 

서버의 시간은 기본적으로 정확해야하니 타임존을 아시아/서울로 변경한다. 

 

- TZ=Asia/Seoul

 

그 아래줄에 있는 JELLYFIN_PublishedServerUrl=192.168.0.5 #optional 은 주석에도 선택사항이라 적혀있다시피 삭제해도 무방하다. 도메인이나 IP로 검색시 걸리는 주소를 적어주는건데 어차피 우리는 시놀로지에서 역방향 프록시로 https 연결할 예정이라 필요가 없다.

 

volumes: 아래에는 젤리핀의 설정 파일이 들어갈 폴더와 각종 미디어 자료들이 있는 위치를 가상으로 매칭시켜줘야 한다. 도커가 일종의 가상환경이기 때문에 실제 경로와 도커 컨테이너 내부의 가상 경로를 매칭시켜주는 부분이다. 맨 앞에 실제 경로를 쓰고 :으로 구분한뒤 뒤에 도커 컨테이너에서 사용되는 경로를 적어주는 형식이다. 이는 젤리핀뿐만 아니라 다른 도커 서비스에서도 빈번하게 사용되는 요소이니 확실하게 익혀두면 좋을듯 하다.

 

뮤직비디오 파일이 있는 경로가 /volume1/media/mv 라고 가정하면 아래와 같은 형식이 된다.

 

- /volume1/media/mv:/data/music video

 

: 뒤에 오는 경로는 설치 이후 젤리핀에서 보이는 경로이다. 즉, 젤리핀에서 /data/music video 라는 경로를 선택하면 실제로는 /volume1/media/mv 폴더가 연결된다. 이 부분만 잘 이해하면 앞으로 젤리핀에 원하는 미디어 경로를 추가하기 편할것이다. 지금 이 글에서는 시놀로지 나스에서의 실행을 전제로하고 있으니 - /opt로 시작하는 추가 라인은 삭제하도로 한다. 라즈베리 파이를 위한 옵션이다.

 

ports: 항목은 내외부로 이어지는 네트워크를 지정해주는 옵션이다. 필수로 입력하도록 한다. 

 

외부포트:내부포트 순서인데 8096과 8920은 젤리핀이 사용하는 http와 https 의 기본 포트이다. https는 역방향 프록시를 사용할것이니 필요가 없고 실질적으로 8096 포트만 맵핑해주면 된다. 그아래 udp는 dlna 같은 별도 서비스에서 사용되는 포트인데 대체할 서비스들이 많으니 굳이 사용할 필요는 없지 싶다. 결과적으로 - 8096:8096 하나만 입력하면 된다. 다만 보안을 위해서 널리 알려진 8096 포트 대신 다른 임의의 포트를 기입해서 사용하면 좋다. 예를 들면 15555:8096 등등으로 맵핑하면 된다.

 

devices: 항목은 하드웨어 트랜스코딩에 사용되는 경로를 지정해주는 것으로 시놀로지는 vaapi 를 사용하기 때문에 첫번째 줄에 있는 /dev/dri:/dev/dri 만 맵핑해주면 된다. 젤리핀 설치 이후 웹 UI에서 하드웨어 트랜스코딩을 활성화해줘야 한다. 

 

설정이 끝났으면 텍스트 편집기에서 yml 파일로 저장하자. 저장 위치는 앞서 만들어둔 jellyfin 폴더다.

 

05. Docker-compose 실행

이제 ssh로 접속한후 jellyfin 폴더로 이동해서 컨테이너를 설치하면 된다. 명령어는 아래와 같다.

 

$> sudo docker-compose up -d

 

sudo를 입력해 관리자 권한으로 실행시켰기 때문에 관리자 패스워드를 입력해야 한다. 이제부터는 도커 컴포즈가 알아서 이미지를 다운로드하고 이를 바탕으로 컨테이너를 생성한뒤 위에서 설정했던 환경 변수들을 자동으로 입력해준다. 1~2분쯤 기다리면 작업이 끝났다는 메시지가 뜬다. 

 

06. 역방향 프록시 설정

젤리핀에 접속하기에 앞서서 먼저 역방향 프록시 작업을 해줘야 한다. 시놀로지 제어판에서 응용프로그램 - 응용프로그램 포털 - 역방향 프록시 메뉴를 찾아들어간다. 

 

위와 같은 창이 뜨는데 아래 내용을 참고해서 순서대로 입력해준다.

설명 : jellyfin

프로토콜 : http 를 https로 변경

호스트이름 : 서브도메인 이름 또는 본인 ddns의 서브도메인 (아래 추가 설명 참조)

포트 : 위 세팅 파일에서 사용한 외부 포트 입력 (15555:8096이면 15555 입력)

hsts 및 http/2 모두 체크

 

대상 아래 항목에서

프로토콜 : http

호스트이름 : localhost

포트 : 위 세팅 파일에서 사용한 내부 포트입력 (15555:8096이면 8096입력)

 

** 서브 도메인이란?

도메인을 구매해서 사용하고 있는 유저라면 자신의 도메인 구매처에서 제공하는 DNS 관리 항목에서 서브 도메인을 생성할 수 있다. coolwarp.net 을 예로 들자면 synology.coolwarp.net 처럼 루트 도메인 앞에 자신이 쓰고 싶은 명칭을 추가해서 사용할 수 있다. 나스에서 하나의 ip로 여러가지 서비스를 사용하고자 한다면 필수로 사용하는 방법이다. 만약 이러한 서브 도메인을 사용하지 않는다면 매번 ip뒤에 각 서비스의 포트를 입력해야하는 번거로움이 있으며 보안측면에서도 취약해진다. 개인적으로는 나스를 오랫동안 운용할 계획이고 여러 서비스를 사용한다는 전제하에 저렴한 도메인 하나쯤 구매하는것이 좋다고 생각한다.

 

시놀로지는 자체적으로 자신의id.synology.me 라는 ddns 서비스를 제공하는데 이를 이용하면 굳이 도메인을 구매하지 않더라도 무료로 자신만의 도메인 주소를 사용할 수 있다. 다만 보다시피 주소 형식이 고정되어 있어서 길이가 길어지는 단점이 있다. 서브도메인.자신의id.synology.me 의 형식이 되기 때문이다. 한가지 장점이라면 별도의 dns 세팅이 필요없고 위 호스트이름에 원하는 서브도메인을 입력하면 바로 적용된다는 점.

 

세팅이 끝났으면 적용을 눌러 저장하고 자신의 공유기에서 포트포워딩 항목을 찾아 젤리핀의 외부 포트를 열어주도록 한다. ip는 시놀로지의 ip를 입력하고 외부포트 입력 항목에 위에서 사용한 외부포트 번호를 입력하고 저장하면 된다.

 

07. 젤리핀 실행

모든것이 끝났다면 위에서 입력한 서브도메인을 주소창에 입력해보자. 혹시 에러가 나고 접속이 안된다면 주소앞에 https://를 붙여서 접속해보자. 한번만 입력하면 추후 접속시 생략하고 주소만 입력하면 된다.

 

화려한 조명...이 아니라 밋밋한 젤리핀의 로그인 화면이 등장할것이다. 사용자 계정을 생성한뒤 로그인해서 사용하면 된다. 젤리핀의 사용법이나 그외 세팅 방법에 대해서는 다음에 기회가 되면 다시 다뤄보도록 하겠다. 

 

 

08. 젤리핀 업데이트

업데이트 절차는 ssh 접속을 통해 cli 상태에서 진행할 것을 권장한다. 명령어 몇줄이면 간단하게 끝난다. 다만 만약을 위해 도커 상에서 설정 백업 정도는 해두도록 하자. 도커 이미지를 정지시키고 삭제후 최신 이미지를 pull 한 다음 다시 설치하는 것 순서다.

 

$> sudo docker-compose pull jellyfin

 

을 입력하면 자동으로 latest stable 버전을 다운로드 한다. 원하는 버전이 있다면 태그를 바꿔주면 되지만 쓸데없는 짓은 삼가하도록 하자. stable 버전만 사용하자.

 

위에서 젤리핀 설치한 디렉토리로 이동한 다음 아래 명령어를 입력한다.

 

$> sudo docker-compose up -d

 

자동으로 최신 젤리핀 linuxserver 이미지가 설치되고 실행된다. 이제 젤리핀 제어판으로 들어가서 업데이트 버전을 확인하면 된다.

 

 

반응형