VPSలో Jellyfin మీడియా సర్వర్ సెటప్ చేయడం ఎలా?
VPSలో Docker ద్వారా Jellyfin సెటప్ చేసే విధానం ఇక్కడ ఉంది. ఫైల్ పర్మిషన్లు, బ్లాక్ స్టోరేజ్ కాన్ఫిగరేషన్ మరియు CPU ట్రాన్స్కోడింగ్ సమస్యలను ఎలా పరిష్కరించాలో ఈ గైడ్ వివరిస్తుంది.
మీరు ఏమి నిర్మిస్తున్నారు
ఒక VPSలో Jellyfin మీడియా సర్వర్: ఒక కంటైనర్, మూడు వాల్యూమ్లు, మరియు మీ సినిమాలు, షోలను నిల్వ ఉంచే ఒక block-storage డిస్క్. దీనిని ఏ బ్రౌజర్ లేదా Jellyfin యాప్ నుంచైనా యాక్సెస్ చేయవచ్చు. ఈ ఇన్స్టాలేషన్ పదిహేను లైన్ల compose ఫైల్తో పూర్తవుతుంది. ఆ తర్వాత తలెత్తే సమస్యలన్నీ ప్రధానంగా రెండు కారణాల వల్ల వస్తాయి: కంటైనర్ చదవలేని ఫైల్ పర్మిషన్లు, మరియు GPU లేని VPSపై వీడియో ట్రాన్స్కోడింగ్ చేయడానికి ప్రయత్నించడం. ఈ గైడ్లో ఎక్కువ భాగం ఈ రెండు అంశాలకే కేటాయించబడింది, ఎందుకంటే చాలా వరకు సపోర్ట్ టిక్కెట్లు వీటి వల్లే వస్తాయి.
Jellyfin ఉచితం మరియు పూర్తిగా ఓపెన్ సోర్స్. ఇందులో అకౌంట్ అవసరం లేదు, పే-వాల్ ఫీచర్లు లేవు, మరియు టెలిమెట్రీ ఉండదు. అందుకే ఇది 2026లో self-host చేయడానికి విలువైన విషయాల జాబితాలో దాదాపు ప్రతిచోటా కనిపిస్తుంది. ఇది మీరు కలిగి ఉన్న మీడియాను ప్లే చేస్తుంది. ఇది ఎటువంటి కంటెంట్ను అందించదు, మరియు ఈ గైడ్ కంటెంట్ను ఎలా పొందాలో చెప్పదు.
ఏదైనా అద్దెకు తీసుకునే ముందు, ట్రాన్స్కోడింగ్ వాస్తవికత
దీనిని ముందుగా చదవండి, ఎందుకంటే ఇది మీరు ఏమి కొనుగోలు చేయాలో నిర్ణయిస్తుంది. మీరు ప్లే బటన్ నొక్కినప్పుడు మీడియా సర్వర్ రెండు పనులలో ఒకటి చేస్తుంది. Direct play ఫైల్ను ఉన్నది ఉన్నట్లుగా స్ట్రీమ్ చేస్తుంది: VPS డిస్క్ నుండి బైట్లను చదివి నెట్వర్క్ ద్వారా పంపుతుంది, దీనికి CPU వినియోగం దాదాపు ఉండదు. Transcoding వీడియోను ఆన్-ది-ఫ్లై (on the fly) లో మళ్ళీ ఎన్కోడ్ చేస్తుంది, అంటే కొత్త రిజల్యూషన్, కొత్త కోడెక్ లేదా సబ్టైటిల్స్ను వీడియోలో కలిపేస్తుంది, ఇది పూర్తిగా 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. ఇలా చేస్తే VPS ఎప్పుడూ ffmpeg ని ఉపయోగించదు, మరియు ఒక సాధారణ 2 vCPU బాక్స్ ఒకేసారి పలువురికి స్ట్రీమ్ చేయగలదు. ట్రాన్స్కోడింగ్ చేయాలని ప్లాన్ చేస్తే మీకు చాలా పెద్ద, ఖరీదైన బాక్స్ అవసరమవుతుంది, అప్పుడు కూడా 4K స్ట్రీమింగ్ కష్టమే.
బ్యాండ్విడ్త్ గణన కూడా చేయాలి, ఎందుకంటే ఇది మరోసారి ఊహించని సమస్యగా మారవచ్చు. Direct play సమయంలో ఫైల్ తన స్వంత bitrate తోనే పంపబడుతుంది. Compressed 1080p ఫైల్ 8-12 Mbps నెట్వర్క్ ట్రాఫిక్ను ఉపయోగిస్తుంది; 1080p Blu-ray remux 20-30 Mbps; 4K HDR 40-80 Mbps. 10 Mbps ఫైళ్లను ముగ్గురు వ్యక్తులు direct play చేస్తే, మీ VPS నుంచి నిరంతరంగా 30 Mbps upload అవుతుంది. మీ ప్లాన్లోని రెండు సంఖ్యలను పరిశీలించండి: port speed (upstreamలో 30 Mbps పంపగలదా?) మరియు monthly transfer cap. రెండు గంటల 10 Mbps సినిమా బయటకు సుమారు 9 GB డేటాను పంపుతుంది. కాబట్టి 1 TB/month పరిమితి ఉన్న metered allowanceలో నెలకు వందకు కొద్దిగా ఎక్కువ సినిమాలు మాత్రమే పంపవచ్చు. అంటే రోజుకు మూడు లేదా నాలుగు సినిమాలు. 4Kను చూసే householdలో bitrate నాలుగు నుంచి ఎనిమిది రెట్లు ఎక్కువగా ఉంటుంది. అందువల్ల allowance మరింత వేగంగా ఖాళీ అవుతుంది. అదే box నుంచి బయటకు వెళ్లే ఇతర network trafficనూ ఇదే బడ్జెట్లో లెక్కించండి. ఇందులో self-hosted RustDesk relay కూడా ఉంటుంది. రెండు peers నేరుగా connect కాలేనప్పుడు ఇది మొత్తం remote desktop sessionను relay చేస్తుంది.
ముందస్తు అవసరాలు
- root లేదా sudo అనుమతులు కలిగిన కొత్త Ubuntu 24.04 KVM VPS, మరియు Docker తో పాటు Compose plugin ఇన్స్టాల్ అయి ఉండాలి.
- మీ లైబ్రరీ పరిమాణానికి సరిపోయే block-storage volume ఉండాలి (కింద ఉన్న sizing చూడండి). VPS తో వచ్చే చిన్న root disk లో మీ సినిమాలు ఉంచకూడదు.
- మీకు పబ్లిక్ HTTPS యాక్సెస్ కావాలంటే ఒక domain name ఉండాలి, లేదా మొత్తం సర్వర్ను ప్రైవేట్గా ఉంచాలనుకుంటే అదే VPSలో WireGuard VPN ఉండాలి.
- మీరు చట్టబద్ధంగా స్ట్రీమ్ చేయడానికి అర్హత ఉన్న మీడియా, అంటే మీ స్వంత rips, మీ స్వంత రికార్డింగ్లు, మరియు మీకు యాజమాన్యం ఉన్న ఫైళ్లు.
ముందుగా బ్లాక్ స్టోరేజ్ను మౌంట్ చేయండి
మీ ప్రొవైడర్ ప్యానెల్లో వాల్యూమ్ను అటాచ్ చేసి, ఆపై దానిని గుర్తించి మౌంట్ చేయండి. 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) ఫోల్డర్లో, సరిపోయే ఫైల్ పేరుతో ఉండాలి; సీజన్ ఫోల్డర్లను Season 01 అని పిలవాలి, S01 అని కాదు; ఎపిసోడ్ ఫైళ్లు 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 నడుపుతున్న ప్రత్యేక సర్వర్ను ఉపయోగించండి మరియు దీనిని కేవలం సినిమాలు మరియు టీవీ షోల కోసం వదిలేయండి.
అనుమతులు: లైబ్రరీలు ఖాళీగా కనిపించడానికి ప్రధాన కారణం
చాలామంది ఒక సాయంత్రం సమయాన్ని వృథా చేసుకునే అపోహ ఇది. అధికారిక jellyfin/jellyfin ఇమేజ్ PUID/PGID ఎన్విరాన్మెంట్ వేరియబుల్స్ను గౌరవించదు, అవి LinuxServer.io ఇమేజ్కు (lscr.io/linuxserver/jellyfin) చెందినవి. అధికారిక ఇమేజ్లో మీరు compose ఫైల్లోని user: కీ ద్వారా యూజర్ను నియంత్రిస్తారు, ఒకవేళ మీరు దానిని పేర్కొనకపోతే కంటైనర్ root యూజర్గా రన్ అవుతుంది. మీరు దేనిని ఉపయోగించినా, నియమం ఒక్కటే: కంటైనర్ రన్ అయ్యే uid/gid కి ప్రతి మీడియా డైరెక్టరీని చదివే మరియు అందులోకి ప్రవేశించే (traverse) సామర్థ్యం ఉండాలి.
మనం uid/gid 1000గా రన్ చేస్తాము, ఇది స్టాక్ Ubuntu బాక్స్లో మొదటి నాన్-రూట్ యూజర్. మీ వివరాలను నిర్ధారించుకుని, యాజమాన్యాన్ని (ownership) ఇలా సెట్ చేయండి:
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 చేసి, execute బిట్ను సెట్ చేస్తాము.
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" అనేది ఫైల్ అనుమతులను సెట్ చేస్తుంది, ఇది పైన పేర్కొన్న ownership తో సరిపోలుతుంది. /config మొత్తం సర్వర్, ఖాతాలు, లైబ్రరీలు, మెటాడేటా, వాచ్ స్టేట్ వంటి వాటిని కలిగి ఉంటుంది, కాబట్టి దీనికి రైట్ (write) అనుమతులు ఉండాలి మరియు మీరు బ్యాకప్ తీసుకోవాల్సింది ఇదే. /cache అనేది తాత్కాలిక వర్కింగ్ స్పేస్. మీడియా మౌంట్ :ro (read-only) గా ఉద్దేశపూర్వకంగానే సెట్ చేయబడింది: Jellyfin డిఫాల్ట్గా ఆర్ట్వర్క్ మరియు మెటాడేటాను /config కింద స్టోర్ చేస్తుంది, కాబట్టి ఇది మీ లైబ్రరీలో ఎటువంటి మార్పులు చేయాల్సిన అవసరం లేదు, మరియు read-only మోడ్ మీ ఫైళ్లను పొరపాటున డిలీట్ కాకుండా లేదా ఏదైనా చెడు ప్లగిన్ నుండి రక్షిస్తుంది. పోర్ట్ 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 స్కాన్ చేయడం ప్రారంభిస్తుంది. చిన్న లైబ్రరీ అయితే ఒకటి లేదా రెండు నిమిషాల్లో పోస్టర్లు మరియు టైటిల్స్ కనిపిస్తే అది సరిగ్గా పనిచేస్తున్నట్లు అర్థం. లైబ్రరీలను తర్వాత జోడించడానికి లేదా సవరించడానికి Dashboard → Libraries కి వెళ్లండి, మరియు Scan All Libraries ద్వారా బలవంతంగా రీస్కాన్ చేయవచ్చు.
మీరు ట్రాన్స్కోడింగ్ (transcoding) పై ఆధారపడుతుంటే, Dashboard → Playback → Transcoding కి వెళ్లి, ట్రాన్స్కోడ్ టెంప్ పాత్ను /cache/transcodes కి సెట్ చేయండి. దీనివల్ల డేటా /config ని నింపకుండా, కాష్ వాల్యూమ్లో నిల్వ చేయబడుతుంది. హార్డ్వేర్ యాక్సిలరేషన్ను None గానే ఉంచండి, ఎందుకంటే యాక్సిలరేషన్ కోసం ఇక్కడ GPU లేదు.
రిమోట్ యాక్సెస్: TLS రివర్స్ ప్రాక్సీ, లేదా VPNలో ఉంచడం
Jellyfinను బయటి నుంచి యాక్సెస్ చేయడానికి మీకు రెండు సురక్షితమైన మార్గాలు ఉన్నాయి, ఒకటి మాత్రం అస్సలు చేయకూడదు. 8096 పోర్ట్ను నేరుగా ఇంటర్నెట్కు పబ్లిష్ చేయడం అసురక్షితం: లాగిన్ వివరాలు క్లియర్టెక్స్ట్లో ప్రయాణిస్తాయి మరియు కొన్ని గంటల్లోనే ఈ పోర్ట్ బ్రూట్-ఫోర్స్ దాడులకు గురవుతుంది.
ఆప్షన్ A, TLS రివర్స్ ప్రాక్సీ. Jellyfinను ఒక సబ్డొమైన్లో ఉంచి, దాని వెనుక Traefik with automatic TLS for your Docker apps లేదా Let's Encrypt certificate issued by Certbot తో కూడిన nginxను వాడండి. Jellyfin రియల్-టైమ్ అప్డేట్స్ కోసం WebSocketsను ఉపయోగిస్తుంది, కాబట్టి ప్రాక్సీ తప్పనిసరిగా upgrade హెడర్లను ఫార్వర్డ్ చేయాలి. 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 to slow brute-force attempts ను జోడించండి. సర్వర్ పబ్లిక్ అయిన తర్వాత, Uptime Kuma ను ఆ URLకు పాయింట్ చేయండి, తద్వారా మీ వినియోగదారుల కంటే ముందే మీకు డౌన్టైమ్ గురించి తెలుస్తుంది.
ఆప్షన్ B, VPN ద్వారా ప్రైవేట్గా ఉంచడం. 8096 పోర్ట్ను అస్సలు పబ్లిష్ చేయకండి; అదే బాక్స్పై టెర్మినేట్ అయ్యే WireGuard టన్నెల్ ద్వారా మాత్రమే Jellyfinను యాక్సెస్ చేయండి. ఒక ఇంటి అవసరాలకు ఇది అత్యంత సులభమైన మరియు సురక్షితమైన మార్గం. ఇందులో సర్టిఫికేట్లు అవసరం లేదు, పబ్లిక్ ఎక్స్పోజర్ ఉండదు, మరియు బ్రూట్-ఫోర్స్ దాడులకు అవకాశం ఉండదు. కంటైనర్ను టన్నెల్ అడ్రస్కు లేదా localhostకు బైండ్ చేసి, VPN ద్వారా కనెక్ట్ అవ్వండి. టన్నెల్ ఏర్పాటు కోసం WireGuard VPN setup for a private VPS చూడండి.
స్టోరేజ్ సైజింగ్ మరియు బ్యాకప్లు
ఫైళ్ల సంఖ్యను బట్టి కాకుండా, నాణ్యతను బట్టి బడ్జెట్ను నిర్ణయించుకోండి. కంప్రెస్ చేసిన 1080p సినిమాలు ఒక్కొక్కటి 4-15 GB ఉంటాయి; 1080p remux ఫైళ్లు 20-40 GB ఉంటాయి; 1080p టీవీ షోల సీజన్ 15-40 GB ఉంటుంది; 4K కంటెంట్ ఏదైనా సినిమాకు 40-100 GB వరకు ఉంటుంది. కొన్ని వందల సినిమాలు మరియు కొన్ని టీవీ షోల లైబ్రరీకి 2-4 TB వాల్యూమ్ అవసరం. తర్వాత మైగ్రేట్ చేయడం కంటే, మొదట్లోనే ఎక్కువ స్టోరేజ్ సామర్థ్యం ఉన్న block volume ను కేటాయించడం చౌకగా ఉంటుంది.
/config సర్వర్ యొక్క మొత్తం స్థితిని కలిగి ఉంటుంది, కాబట్టి మీరు తప్పనిసరిగా బ్యాకప్ చేయవలసిన ఏకైక అంశం ఇదే. దీనిని స్నాప్షాట్ తీయండి లేదా ఆపివేసి tar ఫైల్గా మార్చి, ఆ కాపీని సర్వర్ వెలుపల భద్రపరచండి:
docker compose down
sudo tar czf jellyfin-config-$(date +%F).tgz -C ~/jellyfin config
docker compose up -d/cache మరియు transcode ఫోల్డర్లను మళ్ళీ సృష్టించుకోవచ్చు. /mnt/media లోని మీడియాను విడిగా బ్యాకప్ చేయవచ్చు లేదా వాటిని మళ్ళీ రిప్ (re-rip) చేసుకోవచ్చు; వాటి పరిమాణం దృష్ట్యా చాలామంది రెండో పద్ధతినే ఎంచుకుంటారు. అప్గ్రేడ్లు docker compose pull && docker compose up -d; పైన పేర్కొన్న :10 ట్యాగ్ 10.x మేజర్ వెర్షన్ పరిధిలోనే ఉంటుంది. కాబట్టి తదుపరి మేజర్ వెర్షన్కు మారడం అనేది ఒక ఉద్దేశపూర్వకమైన ట్యాగ్ మార్పు. మీరు అలా చేసే ముందు Jellyfin విడుదల నోట్స్ను ఒకసారి చూడండి, ఎందుకంటే మేజర్ వెర్షన్లలో లైబ్రరీ స్కీమా మైగ్రేషన్లు జరుగుతుంటాయి. ఒక పిన్ చేసిన ట్యాగ్ మరియు బ్యాకప్ చేసిన ఒక స్టేట్ డైరెక్టరీ - ఇవే ఎల్లప్పుడూ రన్ అయ్యే ఏ కంటైనర్కైనా పూర్తి పరిష్కారం. రీబూట్ తర్వాత కూడా self-hosted ఏజెంట్ యొక్క మెమరీ మరియు షెడ్యూల్లను ఎలా కాపాడుకోవాలి అనే దాని వెనుక ఉన్న సూత్రం కూడా ఇదే.
వైఫల్య రీతులు మరియు మీరు చూసే సందేశాలు
స్కాన్ తర్వాత లైబ్రరీ ఖాళీగా ఉంది. Dashboard → Logs (లేదా ~/jellyfin/config/log/log_*.log) వద్ద ఉన్న లాగ్ ఇలా చూపిస్తుంది:
System.UnauthorizedAccessException: Access to the path '/media/Movies' is denied.కంటైనర్ యొక్క uid ఆ పాత్ను చదవలేకపోతోంది. కారణం: మీడియా root యాజమాన్యంలో ఉండటం లేదా మీ user: విలువకు భిన్నమైన uid కలిగి ఉండటం, డైరెక్టరీకి execute బిట్ లేకపోవడం, లేదా పేరెంట్ మౌంట్ పాయింట్ ఆ uid ద్వారా యాక్సెస్ చేయలేకపోవడం. పరిష్కారం: chown -R 1000:1000 /mnt/media, డైరెక్టరీలకు 755, ఫైళ్లకు 644 అనుమతులను సరిచేసి, మళ్ళీ స్కాన్ చేయండి.
ప్లేబ్యాక్ CPUని పూర్తిగా వినియోగిస్తూ బఫర్ అవుతోంది. docker stats jellyfin లో CPU వినియోగం మీ కోర్ల సంఖ్యకు అనుగుణంగా 100% దగ్గర ఉంది మరియు Dashboard → Playback సెషన్ను Transcode గా చూపిస్తూ, వేగం 1.0x కంటే తక్కువగా ఉంది. క్లయింట్ డైరెక్ట్-ప్లే చేయడం లేదు, కాబట్టి VPS CPU-transcoding ను రియల్ టైమ్ కంటే నెమ్మదిగా చేస్తూ విఫలమవుతోంది. కారణం: సపోర్ట్ చేయని కోడెక్ లేదా కంటైనర్, సబ్టైటిల్ బర్న్-ఇన్, లేదా HDR టోన్-మ్యాపింగ్. పరిష్కారం: డైరెక్ట్-ప్లే క్లయింట్కు మారండి, సోర్స్ ఫైళ్లను H.264/AAC ఫార్మాట్లో ఉంచండి, బర్న్-ఇన్ అవసరమయ్యే image సబ్టైటిల్స్ (PGS/VOBSUB) కు బదులుగా text సబ్టైటిల్స్ (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 చేయండి, లేదా సరైన TMDB/TVDB ఎంట్రీని ఎంచుకోవడానికి ఒకే ఐటెమ్పై Identify ఉపయోగించండి.
FAQ
GPU లేకుండా VPS వీడియోను ట్రాన్స్కోడ్ చేయగలదా?
అవును, కానీ ఇది కేవలం CPUపై మాత్రమే జరుగుతుంది మరియు ఇది ఖరీదైనది. ఒకే 1080p సాఫ్ట్వేర్ ట్రాన్స్కోడ్ అనేక vCPUలను వినియోగించుకుంటుంది. 4K లేదా HEVC వీడియోలు సాధారణంగా రియల్ టైమ్లో ప్లే అవ్వవు, దీనివల్ల ప్లేబ్యాక్ బఫర్ అవుతుంది. ట్రాన్స్కోడింగ్ను నివారించడమే ఉత్తమ మార్గం: మీ లైబ్రరీని H.264/AAC ఫార్మాట్లో ఉంచి, డైరెక్ట్-ప్లే (direct-play) చేసే క్లయింట్ యాప్లను వాడండి, తద్వారా VPS కేవలం డేటాను స్ట్రీమ్ చేస్తుంది. మీకు నిజంగా ఆన్-ది-ఫ్లై (on-the-fly) ట్రాన్స్కోడింగ్ అవసరమైతేనే 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 ద్వారా మాత్రమే యాక్సెస్ చేయండి, ఇది ఇంటి అవసరాలకు అత్యంత సురక్షితమైన మార్గం. యాప్లకు పబ్లిక్ అడ్రస్ను నేరుగా ఇవ్వండి, ఎందుకంటే ఆటో-డిస్కవరీ అనేది లోకల్ నెట్వర్క్ బ్రాడ్కాస్ట్, ఇది ఇంటర్నెట్ ద్వారా వచ్చే క్లయింట్లకు పనిచేయదు.
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 ఎటువంటి మీడియాను అందించదు మరియు దేనినీ పొందే మార్గాన్ని చూపదు; ఇది మీరు ఇప్పటికే కలిగి ఉన్న లైబ్రరీని ప్లే చేసే ఒక ప్లేయర్ మాత్రమే.