VPS에 Jellyfin 설치 및 미디어 서버 구축 가이드
Docker를 사용하여 VPS에 Jellyfin을 구축하는 방법을 설명합니다. 파일 권한 설정부터 CPU 트랜스코딩을 피하고 Direct play를 최적화하는 전략까지 실무적인 운영 노하우를 정리했습니다.
구축할 내용
VPS에 Jellyfin 미디어 서버를 구축합니다. 컨테이너 1개, 볼륨 3개, 그리고 영화와 TV 프로그램을 저장할 블록 스토리지 디스크로 구성되며, 모든 브라우저나 Jellyfin 앱에서 접근할 수 있습니다. 설치는 15줄짜리 compose 파일 하나로 완료됩니다. 이후 발생하는 모든 문제는 두 가지 원인에서 비롯됩니다. 컨테이너가 읽을 수 없는 파일 권한 문제, 그리고 GPU가 없는 VPS에 감당할 수 없는 비디오 트랜스코딩을 요청하는 경우입니다. 이 가이드의 대부분은 이 두 가지 문제를 다룹니다. 기술 지원 요청의 대부분이 여기서 발생하기 때문입니다.
Jellyfin은 무료 오픈 소스 소프트웨어이며, 계정 요구, 유료 기능, 텔레메트리 수집이 없습니다. 이것이 바로 Jellyfin이 2026년에 직접 호스팅할 가치가 있는 것들 목록에 거의 항상 포함되는 이유입니다. 사용자가 소유한 미디어를 재생하는 용도입니다. Jellyfin은 콘텐츠를 제공하지 않으며, 이 가이드 또한 콘텐츠 확보와는 무관합니다.
트랜스코딩의 현실: 대여 전 고려 사항
무엇을 구매할지 결정하기 전에 이 내용을 먼저 읽어 보십시오. 미디어 서버는 재생 버튼을 누를 때 두 가지 작업 중 하나를 수행합니다. Direct play는 파일을 있는 그대로 스트리밍합니다. VPS는 디스크에서 바이트를 읽어 네트워크로 전송하기만 하므로 CPU 자원을 거의 소모하지 않습니다. Transcoding은 비디오를 실시간으로 다시 인코딩합니다. 새로운 해상도나 코덱으로 변환하거나 자막을 영상에 입히는 작업이며, 이는 순수하게 CPU를 사용하는 작업입니다.
일반적인 VPS에는 GPU가 없습니다. 따라서 모든 트랜스코딩은 libx264/libx265를 사용하여 CPU에서 실행되며, 소프트웨어 인코딩은 비용이 많이 듭니다. 1080p H.264 트랜스코딩 하나만으로도 공유 vCPU 여러 개를 점유할 수 있습니다. 4K나 HEVC 트랜스코딩은 일반적으로 실시간 재생 속도를 따라가지 못하므로 재생이 멈추고 계속 버퍼링이 발생합니다. Intel iGPU나 Nvidia 카드가 장착된 가정용 장비에서 저렴하게 트랜스코딩을 가능하게 하는 하드웨어 가속은, GPU 인스턴스를 대여하는 제공업체를 이용하지 않는 한 사용할 수 없습니다.
따라서 VPS 운영의 핵심 전략은 트랜스코딩을 피하는 것입니다. 라이브러리를 클라이언트가 기본적으로 재생할 수 있는 코덱(H.264 비디오, AAC 또는 AC3 오디오, MP4 또는 MKV 컨테이너)으로 유지하십시오. 또한 Android TV, iOS, Roku용 Jellyfin 공식 앱이나 Infuse, Kodi, 데스크톱용 Jellyfin Media Player와 같이 Direct play를 지원하는 클라이언트 앱을 선택하십시오. 이렇게 하면 VPS는 ffmpeg를 실행할 필요가 없으며, 2 vCPU 정도의 사양으로도 여러 명에게 동시에 스트리밍할 수 있습니다. 트랜스코딩을 계획한다면 훨씬 크고 비싼 장비가 필요하며, 그마저도 4K 재생은 원활하지 않을 가능성이 큽니다.
대역폭 계산도 해야 한다. 이것이 또 다른 예상 밖의 문제다. 직접 재생에서는 파일의 원래 비트레이트로 파일을 전송한다. 압축된 1080p 파일은 8-12 Mbps를 사용한다. 1080p Blu-ray remux는 20-30 Mbps를 사용한다. 4K HDR은 40-80 Mbps를 사용한다. 10 Mbps 파일을 3명이 직접 재생하면 VPS에서 지속적으로 30 Mbps의 업로드 트래픽이 발생한다. 요금제에서 2가지 수치를 확인한다. 포트 속도가 30 Mbps를 업로드할 수 있는지 확인한다. 월간 전송량 제한도 확인한다. 10 Mbps 영화 1편을 2시간 동안 재생하면 외부로 약 9 GB가 전송된다. 따라서 전송량이 과금되는 1 TB/월 요금제에서는 한 달에 이러한 영화를 100편 조금 넘게 볼 수 있다. 하루 기준으로는 3-4편이다. 가정에서 4K 영상을 시청하면 비트레이트가 4-8배이므로 전송량이 훨씬 빠르게 소진된다. 같은 서버에서 외부로 전송되는 다른 트래픽도 모두 같은 한도에서 차감된다고 계산해야 한다. 여기에는 self-hosted RustDesk relay도 포함된다. 2개의 피어가 직접 연결되지 못하면 전체 원격 데스크톱 세션을 전달하기 때문이다.
사전 준비 사항
- root 또는 sudo 권한이 있는 최신 Ubuntu 24.04 KVM VPS와 Docker 및 Compose 플러그인이 설치되어 있어야 합니다.
- 미디어 파일을 저장할 블록 스토리지 볼륨이 필요하며, 라이브러리 크기에 맞춰 용량을 할당하십시오(아래 용량 산정 참조). VPS와 함께 제공되는 작은 루트 디스크는 영화 저장용이 아닙니다.
- 공개적인 HTTPS 접근을 원한다면 도메인 이름이 필요하며, 전체 서비스를 비공개로 유지하려면 동일한 VPS의 WireGuard VPN을 사용하십시오.
- 스트리밍할 법적 권한이 있는 미디어, 직접 추출한 파일, 직접 녹화한 영상, 본인 소유의 파일이어야 합니다.
블록 스토리지를 먼저 마운트하십시오
제공자의 제어판에서 볼륨을 연결한 다음, 해당 볼륨을 찾아 마운트하십시오. lsblk에서 장치 이름을 확인하십시오. /dev/sdb 또는 /dev/vdb와 같은 형태일 것이며, 루트 디스크는 절대 아닙니다.
lsblk
sudo mkfs.ext4 /dev/sdb # ONLY on a new, empty volume — this ERASES it
sudo mkdir -p /mnt/media
sudo blkid /dev/sdb # copy the UUID shown for this device장치 이름은 재부팅 시 순서가 바뀔 수 있어 잘못된 디스크를 포맷하거나 마운트할 위험이 있으므로, /dev/sdb이 아닌 UUID를 사용하여 마운트하십시오. /etc/fstab에 다음 한 줄을 추가하십시오:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/media ext4 defaults,nofail 0 2sudo mount -a
df -h /mnt/medianofail 설정은 중요합니다. 이 설정이 없으면 블록 볼륨이 분리되었을 때 서버가 부팅되지 않고 긴급 셸로 진입합니다. 여기서 가장 흔한 실수는 이미 데이터가 있는 볼륨에 mkfs.ext4를 실행하는 것인데, 이는 데이터를 모두 삭제합니다. 새 볼륨만 포맷하십시오. 디스크에 이미 라이브러리가 저장되어 있다면 포맷 과정을 건너뛰고 바로 fstab 줄을 추가하십시오.
Jellyfin이 요구하는 방식으로 미디어 배치하기
Jellyfin은 폴더와 파일 이름을 기준으로 메타데이터를 일치시킵니다. 배치가 잘못되면 영화가 제목 없는 파일로 나타나 포스터가 표시되지 않거나, 에피소드가 잘못된 시리즈로 연결될 수 있습니다. 규칙은 정확히 세 가지입니다. 각 영화는 일치하는 파일 이름을 가진 고유한 Name (Year) 폴더에 있어야 합니다. 시즌 폴더는 S01가 아닌 Season 01로 명명해야 합니다. 에피소드 파일은 S01E01 형식을 사용하며, 스페셜 에피소드는 Season 00에 배치합니다.
/mnt/media
├── Movies
│ ├── Blade Runner (1982)
│ │ └── Blade Runner (1982).mkv
│ └── Arrival (2016)
│ └── Arrival (2016).mkv
└── Shows
└── Severance (2022)
├── Season 01
│ ├── Severance - S01E01.mkv
│ └── Severance - S01E02.mkv
└── Season 00
└── Severance - The Lexington Letter.mkv영화 이름 뒤의 (Year)는 장식이 아닙니다. 이는 리메이크 작품을 구분하여 매칭 엔진이 올바른 제목을 가져오도록 합니다. Movies과 Shows은 별도의 최상위 폴더로 유지하십시오. 각 폴더는 특정 콘텐츠 유형의 Jellyfin 라이브러리가 되며, 이를 섞으면 메타데이터 제공자가 혼동을 일으킵니다. Jellyfin은 사진이 담긴 세 번째 폴더도 문제없이 색인하지만, 전용 사진 서버에 비하면 기능이 제한적입니다. 따라서 사진 앨범이 중요하다면 PhotoPrism 또는 Immich를 실행하는 별도의 서버를 구축하고, 이 서버는 영화와 TV 프로그램 전용으로 사용하는 것이 좋습니다.
권한: 라이브러리가 비어 있는 가장 흔한 이유
사람들이 저녁 시간을 낭비하게 만드는 오해가 있습니다. 공식 jellyfin/jellyfin 이미지는 PUID/PGID 환경 변수를 지원하지 않습니다. 해당 변수는 LinuxServer.io 이미지(lscr.io/linuxserver/jellyfin) 전용입니다. 공식 이미지에서는 compose 파일의 user: 키를 사용하여 사용자를 제어하며, 이를 생략하면 컨테이너는 root 권한으로 실행됩니다. 어떤 이미지를 사용하든 규칙은 동일합니다. 컨테이너가 실행되는 uid/gid는 모든 미디어 디렉터리를 읽고 탐색할 수 있어야 합니다.
여기서는 일반적인 Ubuntu 환경의 첫 번째 비-root 사용자인 uid/gid 1000으로 실행하겠습니다. 본인의 uid/gid를 확인하고 소유권을 설정하십시오:
id # confirm your user is uid=1000 gid=1000
sudo chown -R 1000:1000 /mnt/media
sudo find /mnt/media -type d -exec chmod 755 {} \;
sudo find /mnt/media -type f -exec chmod 644 {} \;
mkdir -p ~/jellyfin/config ~/jellyfin/cache
sudo chown -R 1000:1000 ~/jellyfin디렉터리에는 읽기 권한뿐만 아니라 실행(execute) 비트(755의 x)가 필요합니다. 이 권한이 없으면 컨테이너는 폴더 이름을 나열할 수는 있어도 폴더 내부로 진입할 수 없습니다. 전체 라이브러리가 비어 버리는 함정은 상위 디렉터리에 있습니다. 컨테이너의 uid가 마운트 지점 자체를 탐색할 수 없으면 /media/Movies나 /media/Shows에 도달하지 못하며, 로그에 Access to the path ... is denied이 기록되면서 모든 라이브러리가 즉시 비어 있는 상태로 나타납니다. 읽을 수 없는 미디어 폴더는 하나라도 발견되면 로그에 기록된 뒤 건너뛰어집니다. 따라서 root 권한으로 복사된 파일 묶음이 라이브러리에서 조용히 사라지는 현상이 발생합니다. 이것이 개별 폴더를 수정하는 대신 재귀적으로 chown을 수행하고 모든 디렉터리에 실행 비트를 설정해야 하는 이유입니다.
docker-compose 파일
services:
jellyfin:
image: jellyfin/jellyfin:10
container_name: jellyfin
user: "1000:1000"
restart: unless-stopped
ports:
- "127.0.0.1:8096:8096"
volumes:
- ./config:/config
- ./cache:/cache
- /mnt/media:/media:ro
environment:
- JELLYFIN_PublishedServerUrl=https://jellyfin.example.com한 줄씩 살펴보겠습니다. user: "1000:1000"은 위에서 설정한 소유권에 맞춰 실제 파일 권한을 설정하는 부분입니다. /config는 서버 전체, 계정, 라이브러리, 메타데이터, 시청 상태를 모두 담고 있으므로 쓰기 권한이 필수이며, 백업 대상이기도 합니다. /cache은 임시 작업 공간입니다. 미디어 마운트인 :ro을 읽기 전용(read-only)으로 설정한 데에는 이유가 있습니다. Jellyfin은 기본적으로 아트워크와 메타데이터를 /config 아래에 저장하므로 라이브러리에 직접 쓸 필요가 없으며, 읽기 전용 설정을 통해 실수로 파일을 삭제하거나 잘못된 플러그인으로 인해 파일이 손상되는 것을 방지할 수 있습니다. 포트는 의도적으로 127.0.0.1에 바인딩했습니다. Jellyfin의 웹 로그인은 일반 HTTP를 사용하므로 8096 포트를 공용 인터넷에 직접 노출하지 않습니다. JELLYFIN_PublishedServerUrl는 서버가 로컬 자동 검색(LAN UDP 브로드캐스트)을 위해 알리는 주소입니다. 인터넷상의 클라이언트는 이 주소를 볼 수 없으며, 앱에 직접 입력한 URL을 사용하게 됩니다. 클라이언트가 인식해야 할 주소를 설정하고, 원격 기기에서는 해당 URL을 직접 입력하십시오.
compose 디렉터리에서 서비스를 실행합니다.
docker compose up -d
docker logs -f jellyfin첫 실행: 설정 마법사와 라이브러리
포트가 localhost에 바인딩되어 있으므로, 방화벽을 개방하는 대신 노트북에서 SSH 터널을 통해 마법사에 접속하십시오:
ssh -L 8096:127.0.0.1:8096 you@your-vps-ip이제 http://localhost:8096로 접속합니다. 마법사가 언어 설정을 안내한 뒤 강력한 암호를 사용하는 관리자 계정 생성을 요청합니다. 이 계정이 서버의 관리 권한을 가지므로 일회용 암호를 재사용하지 마십시오. 첫 번째 라이브러리를 추가합니다. 콘텐츠 유형을 Movies로 선택하고, /media/Movies(호스트 경로가 아닌 컨테이너 내부 경로)을 지정합니다. Shows도 /media/Shows 경로로 동일하게 반복합니다. 설정을 마치면 Jellyfin이 스캔을 시작합니다. 라이브러리 규모가 작다면 1~2분 내에 포스터와 제목이 정상적으로 표시됩니다. 라이브러리 추가나 수정은 나중에 Dashboard → Libraries에서 수행할 수 있으며, Scan All Libraries를 눌러 강제로 다시 스캔할 수 있습니다.
트랜스코딩 기능을 사용한다면 Dashboard → Playback → Transcoding을 열고 트랜스코딩 임시 경로를 /cache/transcodes로 설정하십시오. 이렇게 하면 /config의 용량이 낭비되지 않고 캐시 볼륨에 데이터가 기록됩니다. 하드웨어 가속은 가속에 사용할 GPU가 없으므로 None으로 유지하십시오.
원격 접속: TLS 리버스 프록시 또는 VPN 사용
외부에서 Jellyfin에 접속하는 안전한 방법은 두 가지가 있으며, 피해야 할 안전하지 않은 방법이 하나 있습니다. 안전하지 않은 방법은 8096 포트를 인터넷에 직접 노출하는 것입니다. 이 경우 로그인 정보가 평문으로 전송되며, 몇 시간 내에 무차별 대입 공격(brute-force)을 받게 됩니다.
옵션 A, TLS 리버스 프록시. Docker 앱을 위한 자동 TLS 설정이 포함된 Traefik 또는 Certbot으로 발급받은 Let's Encrypt 인증서를 사용하는 nginx 뒤에 Jellyfin을 서브도메인으로 배치하십시오. Jellyfin은 실시간 업데이트를 위해 WebSockets를 사용하므로, 프록시는 업그레이드 헤더를 전달해야 합니다. Traefik은 이를 자동으로 처리하지만, nginx는 명시적인 설정이 필요하며 업그레이드가 정상적으로 이루어지도록 업스트림에 HTTP/1.1을 사용해야 합니다.
location / {
proxy_pass http://127.0.0.1:8096;
proxy_http_version 1.1;
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 Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}JELLYFIN_PublishedServerUrl을 https:// 주소로 설정하여 로컬 자동 검색이 올바른 URL을 알리도록 하고, 원격 앱이 사용자가 지정한 주소를 사용하게 하십시오. 또한 로그인에 대한 무차별 대입 공격을 늦추기 위해 fail2ban을 추가하십시오. 서버가 공개되면 Uptime Kuma를 해당 URL에 연결하여 사용자가 알기 전에 관리자가 먼저 서비스 중단을 인지할 수 있도록 하십시오.
옵션 B, VPN을 통한 비공개 유지. 8096 포트를 전혀 노출하지 마십시오. 동일한 서버에서 종료되는 WireGuard 터널을 통해서만 Jellyfin에 접속하십시오. 가정용으로는 이것이 가장 간단하고 안전한 선택이며, 인증서도 필요 없고 외부 노출도 없으며 무차별 대입 공격 표면도 없습니다. 컨테이너를 터널 주소나 localhost에 바인딩하고 VPN을 통해 연결하십시오. 터널 설정 자체는 개인 VPS를 위한 WireGuard VPN 설정을 참조하십시오.
스토리지 용량 산정 및 백업
파일 개수가 아닌 품질을 기준으로 예산을 책정합니다. 압축된 1080p 영화는 편당 4-15 GB, 1080p remux는 20-40 GB, 1080p TV 시리즈 한 시즌은 15-40 GB, 4K 영상은 영화 한 편당 40-100 GB를 차지합니다. 수백 편의 영화와 일부 TV 시리즈로 구성된 라이브러리에는 2-4 TB 볼륨이 적당하며, 나중에 마이그레이션하는 것보다 처음에 블록 볼륨을 넉넉하게 할당하는 것이 비용 면에서 유리합니다.
/config는 서버의 전체 상태를 담고 있으므로 반드시 백업해야 하는 유일한 항목입니다. 스냅샷을 생성하거나 서비스를 중지한 뒤 tar로 압축하여 서버 외부로 복사본을 보관하십시오.
docker compose down
sudo tar czf jellyfin-config-$(date +%F).tgz -C ~/jellyfin config
docker compose up -d/cache 및 트랜스코딩 폴더는 일회성 데이터입니다. /mnt/media에 저장된 미디어 파일은 별도로 백업하거나, 용량이 크기 때문에 다시 리핑할 수 있다고 가정하고 백업하지 않는 경우가 많습니다. 업그레이드는 docker compose pull && docker compose up -d를 따릅니다. 위에서 사용한 :10 태그는 10.x 메이저 버전 내에서 유지되므로, 다음 메이저 버전으로 이동하려면 태그를 의도적으로 수정해야 합니다. 메이저 버전 업데이트 시 라이브러리 스키마 마이그레이션이 발생할 수 있으므로, 수정 전에 Jellyfin 릴리스 노트를 반드시 확인하십시오. 고정된 태그와 백업된 상태 디렉터리 하나만 있으면 상시 가동되는 모든 컨테이너를 관리할 수 있으며, 이는 재부팅 후에도 셀프 호스팅 에이전트의 메모리와 스케줄을 유지하는 방법의 기반이 되는 동일한 패턴입니다.
실패 유형 및 확인 가능한 메시지
스캔 후 라이브러리가 비어 있습니다. Dashboard → Logs(또는 ~/jellyfin/config/log/log_*.log)의 로그에 다음 메시지가 표시됩니다.
System.UnauthorizedAccessException: Access to the path '/media/Movies' is denied.컨테이너의 uid가 해당 경로를 읽을 수 없습니다. 원인: 미디어 소유자가 root이거나 user: 값과 다른 uid인 경우, 디렉터리에 실행 권한(execute bit)이 없는 경우, 또는 상위 마운트 지점에 해당 uid가 접근할 수 없는 경우입니다. 해결 방법: chown -R 1000:1000 /mnt/media, 디렉터리 755, 파일 644 권한을 조정한 뒤 다시 스캔하십시오.
재생 시 CPU 점유율이 치솟고 버퍼링이 발생합니다. docker stats jellyfin에서 CPU 점유율이 코어 수의 100%에 근접하고, Dashboard → Playback에서 세션이 Transcode 상태이며 속도가 1.0x 미만으로 표시됩니다. 클라이언트가 다이렉트 재생(direct-play)을 하지 못해 VPS가 실시간보다 느리게 CPU 트랜스코딩을 수행하며 처리에 실패하는 상황입니다. 원인: 지원되지 않는 코덱이나 컨테이너, 자막 강제 입히기(burn-in), 또는 HDR 톤 매핑 때문입니다. 해결 방법: 다이렉트 재생이 가능한 클라이언트로 변경하고, 소스 파일을 H.264/AAC 형식으로 유지하며, 강제 변환을 유발하는 이미지 자막(PGS/VOBSUB) 대신 텍스트 자막(SRT)을 사용하십시오. 또한 CPU만 사용하는 환경에서는 4K HDR 재생을 피하십시오.
"No compatible streams are available." 전체 메시지는 보통 "This client isn't compatible with the media and the server isn't sending a compatible media format."입니다. 클라이언트가 소스 재생을 거부했고, 대체 수단인 트랜스코딩 시작도 실패한 경우입니다. 원인: ffmpeg 명령 오류, 읽을 수 없는 파일, 또는 사용자 프로필에서 비디오 변환이 차단된 경우입니다. 해결 방법: Dashboard → Logs에서 ffmpeg 명령줄을 확인하고, 파일 자체가 정상적으로 재생되는지 확인하십시오. 트랜스코딩에 의존하는 경우 사용자의 재생 권한을 확인하고, 브라우저 코덱 문제인지 확인하기 위해 다른 클라이언트에서 재생을 시도하십시오.
영화 포스터가 없거나 잘못된 포스터가 표시됩니다. 메타데이터가 일치하지 않는 경우입니다. 원인: 영화가 별도의 Name (Year) 폴더에 있지 않거나, 시즌 폴더 이름이 Season 01이 아닌 S01으로 되어 있거나, 에피소드가 S01E01 형식이 아니거나, 연도 정보가 누락된 경우입니다. 해결 방법: 위에서 설명한 구조로 이름을 변경한 뒤 Refresh metadata → Replace all을 실행하거나, 개별 항목에서 Identify를 사용하여 올바른 TMDB/TVDB 항목을 지정하십시오.
FAQ
GPU 없이 VPS에서 비디오 트랜스코딩을 할 수 있습니까?
네, 가능하지만 CPU만 사용해야 하므로 비용이 많이 듭니다. 1080p 소프트웨어 트랜스코딩 하나만으로도 여러 vCPU를 점유할 수 있으며, 4K나 HEVC는 보통 실시간 재생 속도를 따라가지 못해 재생 버퍼링이 발생합니다. 가장 좋은 방법은 트랜스코딩을 피하는 것입니다. 라이브러리를 H.264/AAC 형식으로 유지하고, VPS가 단순히 바이트를 스트리밍하도록 다이렉트 플레이(direct-play)를 지원하는 클라이언트 앱을 사용하십시오. 실시간 트랜스코딩이 반드시 필요한 경우에만 GPU 인스턴스를 대여하십시오.
스캔 후 Jellyfin 라이브러리가 비어 있는 이유는 무엇입니까?
거의 대부분 권한 문제입니다. 공식 jellyfin/jellyfin 이미지는 사용자가 설정한 user:(또는 root) 권한으로 실행되는데, 해당 uid가 파일에 접근할 수 없으면 스캔 로그에 Access to the path ... is denied 오류가 기록되고 파일이 건너뛰어집니다. chown -R 1000:1000 /mnt/media로 소유권을 수정하고 디렉터리에 실행 권한(755)을 부여한 뒤 다시 스캔하십시오. 상위 디렉터리도 확인해야 합니다. 컨테이너의 uid가 /mnt/media 자체를 통과할 수 없으면 라이브러리 폴더에 도달하지 못해 모든 항목이 비어 있는 상태로 나타납니다. 두 번째로 흔한 원인은 Jellyfin이 예상하는 구조와 폴더 레이아웃이 일치하지 않는 경우입니다.
Jellyfin에 원격으로 안전하게 접속하려면 어떻게 해야 합니까?
두 가지 좋은 방법이 있습니다. 첫째, 서브도메인에서 TLS 리버스 프록시 뒤에 배치하여 로그인과 스트리밍을 암호화하고 fail2ban을 추가하십시오. 비밀번호가 평문으로 전송되는 8096 포트를 직접 노출해서는 안 됩니다. 둘째, 완전히 비공개로 유지하고 VPN을 통해서만 접속하는 방법인데, 가정용으로는 가장 간단하고 안전한 선택입니다. 앱에 공인 주소를 직접 입력하십시오. 자동 검색(autodiscovery)은 로컬 네트워크 브로드캐스트 방식이므로 인터넷을 통해 들어오는 클라이언트에는 도달하지 않습니다.
Jellyfin VPS에는 어느 정도의 디스크와 대역폭이 필요합니까?
디스크 용량은 화질에 따라 다릅니다. 압축된 1080p 영화는 편당 4-15 GB, 리먹스(remux)는 20-40 GB, 4K는 40-100 GB를 예상해야 하므로 대부분의 라이브러리는 2-4 TB의 블록 스토리지가 필요합니다. 대역폭은 다이렉트 플레이 비트레이트에 의해 결정되는데, 1080p 스트림당 8-12 Mbps가 필요하며 4K는 훨씬 더 많은 대역폭이 필요합니다. 따라서 포트 속도가 동시 시청자 수를 감당할 수 있는지 확인하고 월간 데이터 전송 제한량을 주시하십시오. 트랜스코딩을 계획 중이라면 CPU 여유 자원을 확보하고, 다이렉트 플레이를 계획 중이라면 코어 수보다 대역폭을 우선순위에 두십시오.
VPS에서 Jellyfin을 운영하는 것은 합법입니까?
Jellyfin 자체는 자유 오픈 소스 소프트웨어이며 이를 운영하는 것은 완전히 합법입니다. 중요한 것은 콘텐츠입니다. 본인이 소유하거나 라이선스를 보유한 미디어, 직접 리핑한 디스크, 녹화물 또는 권리를 가진 파일만 스트리밍하십시오. Jellyfin은 어떠한 미디어도 제공하지 않으며 미디어를 획득할 방법도 제공하지 않습니다. Jellyfin은 이미 본인이 소유한 라이브러리를 위한 재생기일 뿐입니다.