SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-26

VPS-ல் Jellyfin நிறுவுவது எப்படி: முழுமையான வழிகாட்டி

Docker மூலம் VPS-ல் Jellyfin-ஐ எவ்வாறு நிறுவுவது என்பதை அறிக. File permissions மற்றும் CPU transcoding சிக்கல்களைத் தவிர்த்து, உங்கள் மீடியாவை பாதுகாப்பாக ஸ்ட்ரீம் செய்யுங்கள்.

நீங்கள் உருவாக்குவது என்ன

ஒரு VPS-ல் Jellyfin media server: ஒரு container, மூன்று volumes, மற்றும் உங்கள் திரைப்படங்கள் மற்றும் நிகழ்ச்சிகளைச் சேமிக்கும் ஒரு block-storage disk. இதை எந்தவொரு browser அல்லது Jellyfin app மூலமும் அணுகலாம். இந்த நிறுவல் பதினைந்து வரிகளைக் கொண்ட compose file-ஐ அடிப்படையாகக் கொண்டது. இதற்குப் பிறகு ஏற்படும் அனைத்து சிக்கல்களும் இரண்டு காரணங்களால் மட்டுமே வருகின்றன: container-ஆல் படிக்க முடியாத file permissions, மற்றும் GPU இல்லாத VPS-ல் transcoding செய்ய முயற்சிப்பது. இந்த வழிகாட்டி அந்த இரண்டு சிக்கல்களுக்கும் அதிக முக்கியத்துவம் அளிக்கிறது, ஏனெனில் பெரும்பாலான தொழில்நுட்ப உதவி கோரிக்கைகள் இதிலிருந்தே எழுகின்றன.

Jellyfin இலவசமானது மற்றும் முழுமையான open source மென்பொருள். இதில் கணக்குகள், கட்டண வசதிகள் அல்லது telemetry கிடையாது. இதனால்தான் 2026-ல் நீங்களே host செய்ய வேண்டியவை பட்டியலில் இது முதலிடத்தில் உள்ளது. இது உங்களுடைய சொந்த media கோப்புகளை மட்டுமே இயக்கும். இது எந்தவொரு உள்ளடக்கத்தையும் (content) வழங்குவதில்லை, மேலும் இந்த வழிகாட்டி எவ்வித உள்ளடக்கத்தைப் பெறுவது பற்றியும் கூறவில்லை.

எதையும் வாடகைக்கு எடுக்கும் முன், transcoding குறித்த யதார்த்தம்

இதை முதலில் படியுங்கள், ஏனெனில் இது நீங்கள் எதை வாங்க வேண்டும் என்பதை மாற்றும். நீங்கள் play பட்டனை அழுத்தும்போது, ஒரு media server இரண்டு விஷயங்களில் ஒன்றைச் செய்கிறது. Direct play என்பது கோப்பை அப்படியே stream செய்கிறது: VPS வட்டில் (disk) உள்ள bytes-ஐ வாசித்து, அவற்றை network வழியாக அனுப்புகிறது, இதற்கு CPU பயன்பாடு கிட்டத்தட்ட இல்லை. Transcoding என்பது வீடியோவை நிகழ்நேரத்தில் (on the fly) மறுமுறை encode செய்கிறது; புதிய resolution, புதிய codec, அல்லது subtitles-ஐ வீடியோவுடன் இணைத்தல் போன்றவை இதில் அடங்கும், இது முழுமையான CPU வேலை.

வழக்கமான VPS-ல் GPU இருக்காது. எனவே, ஒவ்வொரு transcode-ம் libx264/libx265 மூலம் CPU-விலேயே இயங்கும், software encoding அதிக செலவு பிடிக்கும். ஒரு 1080p H.264 transcode பல shared vCPU-களை முழுமையாகப் பயன்படுத்தக்கூடும்; 4K அல்லது HEVC transcode பொதுவாக நிகழ்நேரத்தில் இயங்காது, இதனால் playback நின்று நின்று (buffer) ஓடும். Intel iGPU அல்லது Nvidia card கொண்ட வீட்டு கணினிகளில் மலிவாகச் செய்யக்கூடிய Hardware transcoding, உங்கள் provider GPU instances வழங்காதவரை உங்களுக்குக் கிடைக்காது.

எனவே, VPS-ல் ஒட்டுமொத்த உத்தியும் இதுதான்: transcoding-ஐத் தவிர்க்கவும். உங்கள் library-ஐ உங்கள் client-கள் நேரடியாக இயக்கும் codecs-ல் (H.264 video, AAC அல்லது AC3 audio, MP4 அல்லது MKV container) வைத்திருங்கள். Direct-play செய்யும் client apps-ஐத் தேர்வு செய்யுங்கள்: Android TV, iOS மற்றும் Roku-க்கான அதிகாரப்பூர்வ Jellyfin apps, அத்துடன் Infuse, Kodi, மற்றும் desktop Jellyfin Media Player. இதைச் செய்தால், VPS ஒருபோதும் ffmpeg-ஐப் பயன்படுத்தாது, மேலும் ஒரு சாதாரண 2 vCPU கொண்ட கணினியிலேயே பலருக்கு ஒரே நேரத்தில் stream செய்ய முடியும். Transcode செய்யத் திட்டமிட்டால், உங்களுக்கு மிகப் பெரிய, அதிக விலை கொண்ட கணினி தேவைப்படும், அப்படியிருந்தாலும் 4K-ஐ இயக்குவது கடினம்.

Bandwidth கணக்கையும் செய்ய வேண்டும்; இதுவும் எதிர்பாராத பிரச்சினையாக இருக்கலாம். Direct play நிலையில் file அதன் சொந்த bitrate-ல் அனுப்பப்படும். Compressed 1080p file பொதுவாக 8-12 Mbps பயன்படுத்தும்; 1080p Blu-ray remux 20-30 Mbps பயன்படுத்தும்; 4K HDR 40-80 Mbps பயன்படுத்தும். 10 Mbps files-ஐ மூவர் direct play செய்தால், உங்கள் VPS-இலிருந்து தொடர்ந்து 30 Mbps upload தேவைப்படும்.

உங்கள் plan-ல் இரண்டு எண்களைச் சரிபார்க்கவும்: port speed (30 Mbps upstream traffic-ஐ அனுப்பும் திறன் உள்ளதா?) மற்றும் monthly transfer cap. 10 Mbps bitrate கொண்ட இரண்டு மணி நேர film ஒன்று வெளியேறும் traffic-ஆக சுமார் 9 GB ஆகும். ஆகவே, metered 1 TB/month allowance-ல் மாதத்திற்கு இதுபோன்ற 100-க்கும் சற்று அதிகமான films மட்டுமே பார்க்க முடியும். இது நாளொன்றுக்கு மூன்று அல்லது நான்கு films அளவாகும். நான்கு முதல் எட்டு மடங்கு அதிக bitrate கொண்ட 4K content-ஐ ஒரு household தொடர்ந்து பார்த்தால், இந்த allowance மிகவும் வேகமாக குறையும்.

அதே server-லிருந்து வெளியேறும் network traffic-ஐ உருவாக்கும் பிற பயன்பாடுகளையும் இதே budget-ல் கணக்கிடுங்கள். இதில் self-hosted RustDesk relay-யும் அடங்கும். இரண்டு peers நேரடியாக connect ஆக முடியாதபோது, அது முழு remote desktop session-ஐ relay செய்கிறது.

முன்நிபந்தனைகள்

  • root அல்லது sudo அனுமதி கொண்ட புதிய Ubuntu 24.04 KVM VPS, மற்றும் Docker உடன் Compose plugin நிறுவப்பட்டிருக்க வேண்டும்.
  • உங்கள் media library-ன் அளவிற்கு ஏற்ப ஒரு block-storage volume தேவை (கீழே உள்ள அளவீடுகளைப் பார்க்கவும்). VPS-உடன் வரும் சிறிய root disk-ல் திரைப்படங்களைச் சேமிக்கக்கூடாது.
  • பொது HTTPS அணுகல் தேவைப்பட்டால் ஒரு domain name தேவை, அல்லது அனைத்தையும் தனிப்பட்ட முறையில் வைத்திருக்க விரும்பினால் அதே VPS-ல் WireGuard VPN பயன்படுத்தலாம்.
  • நீங்கள் சட்டப்பூர்வமாக ஸ்ட்ரீம் செய்ய உரிமையுள்ள media, உங்கள் சொந்த rips, உங்கள் சொந்தப் பதிவுகள் அல்லது உங்களுக்குச் சொந்தமான கோப்புகள் மட்டுமே இருக்க வேண்டும்.

முதலில் block storage-ஐ mount செய்யவும்

உங்கள் provider-ன் panel-ல் volume-ஐ இணைத்த பிறகு, அதைக் கண்டறிந்து mount செய்யவும். lsblk மூலம் device பெயரைப் பெறவும், அது /dev/sdb அல்லது /dev/vdb போன்ற பெயரில் இருக்கும், root disk-ஆக இருக்காது.

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 மூலம் mount செய்யவும். ஏனெனில் reboot செய்யும்போது device எழுத்துக்கள் மாறக்கூடும், இதனால் தவறான disk-ஐ format செய்யவோ அல்லது mount செய்யவோ நேரிடலாம். /etc/fstab-ல் ஒரு வரியைச் சேர்க்கவும்:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /mnt/media  ext4  defaults,nofail  0  2
sudo mount -a
df -h /mnt/media

nofail முக்கியமானது: இது இல்லையென்றால், block volume எப்போதாவது துண்டிக்கப்பட்டால், server boot ஆக மறுத்து emergency shell-க்குச் சென்றுவிடும். இதில் செய்யப்படும் மிகப்பெரிய தவறு, ஏற்கனவே தரவுகளைக் கொண்ட volume-ல் mkfs.ext4-ஐ இயக்குவதுதான்; இது தரவுகளை அழித்துவிடும். புதிய volume-களை மட்டும் format செய்யவும்; disk-ல் ஏற்கனவே உங்கள் library இருந்தால், நேரடியாக fstab வரிக்குச் செல்லவும்.

Jellyfin எதிர்பார்க்கும் வகையில் மீடியா கோப்புகளை அமைத்தல்

Jellyfin கோப்புறை மற்றும் கோப்புப் பெயர்களைக் கொண்டு மெட்டாடேட்டாவை (metadata) ஒப்பிடுகிறது. இந்த அமைப்பில் தவறு நடந்தால், திரைப்படங்கள் தலைப்பில்லாத கோப்புகளாகவும், போஸ்டர்கள் இல்லாமலும் தோன்றும் அல்லது ஒரு எபிசோட் தவறான தொடருடன் பொருந்தும். இதற்கு மூன்று விதிகள் உள்ளன: ஒவ்வொரு திரைப்படமும் அதன் சொந்த Name (Year) கோப்புறையில், பொருந்தக்கூடிய கோப்புப் பெயருடன் இருக்க வேண்டும்; சீசன் கோப்புறைகள் Season 01 என்று பெயரிடப்பட வேண்டும், S01 என்று அல்ல; எபிசோட் கோப்புகள் S01E01 என்ற வடிவமைப்பைப் பயன்படுத்த வேண்டும்; மேலும் சிறப்பு எபிசோடுகள் (specials) 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) என்பது அலங்காரத்திற்காக அல்ல, அது ரீமேக் (remake) திரைப்படங்களை வேறுபடுத்திக் காட்டுகிறது, இதன் மூலம் சரியான தலைப்பை மெட்டாடேட்டா கண்டறியும். Movies மற்றும் Shows ஆகியவற்றை தனித்தனி மேல்நிலை கோப்புறைகளாக (top-level folders) வைத்திருங்கள், ஏனெனில் ஒவ்வொன்றும் ஒரு குறிப்பிட்ட வகை உள்ளடக்கத்தைக் கொண்ட Jellyfin லைப்ரரியாக மாறுகிறது; இவற்றை ஒன்றாகக் கலப்பது மெட்டாடேட்டா வழங்குநரை குழப்பமடையச் செய்யும். Jellyfin புகைப்படங்களுக்கான மூன்றாவது கோப்புறையையும் மகிழ்ச்சியுடன் குறியீட்டு (index) செய்யும், ஆனால் பிரத்யேக புகைப்பட சேவையகத்துடன் ஒப்பிடும்போது இது சிறந்த அனுபவத்தைத் தராது. எனவே, உங்கள் ஆல்பங்கள் முக்கியமானது என்றால், PhotoPrism அல்லது Immich இயங்கும் தனி சேவையகத்தைப் பயன்படுத்துங்கள், இதைத் திரைப்படங்கள் மற்றும் தொலைக்காட்சித் தொடர்களுக்கு மட்டும் விட்டுவிடுங்கள்.

அனுமதிகள்: libraries காலியாக இருப்பதற்கு முதன்மையான காரணம்

இது பலரது ஒரு மாலைப் பொழுதை வீணடிக்கும் ஒரு தவறான புரிதல். அதிகாரப்பூர்வமான jellyfin/jellyfin image, PUID/PGID ஆகிய environment variables-ஐ ஏற்பதில்லை; அவை LinuxServer.io image-க்கு (lscr.io/linuxserver/jellyfin) உரியவை. அதிகாரப்பூர்வமான image-ல், compose கோப்பில் உள்ள user: key மூலம் பயனர் உரிமையை நீங்கள் கட்டுப்படுத்துகிறீர்கள். அதை நீங்கள் குறிப்பிடவில்லை என்றால், container ஆனது root பயனராக இயங்கும். நீங்கள் எதைப் பயன்படுத்தினாலும் விதி ஒன்றுதான்: container இயங்கும் uid/gid, அனைத்து media directory-களையும் வாசிக்கவும், அவற்றுக்குள் நுழையவும் தகுதி பெற்றிருக்க வேண்டும்.

நாம் uid/gid 1000-ஐப் பயன்படுத்துவோம், இது ஒரு சாதாரண Ubuntu கணினியில் root அல்லாத முதல் பயனராகும். உங்களுடையதை உறுதிசெய்து, உரிமையை (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

Directory-களுக்கு வாசிக்கும் அனுமதி மட்டும் போதாது, execute பிட் (755-ல் உள்ள x) அவசியமாகும். அது இல்லையென்றால், கோப்புப் பெயர்களைப் பட்டியலிட முடிந்தாலும், container-ஆல் அந்த folder-க்குள் நுழைய முடியாது. முழு library-யும் காலியாக இருப்பதற்கு முக்கியக் காரணம் parent directory ஆகும்: container-ன் uid-ஆல் mount-க்குள் நுழைய முடியவில்லை என்றால், அது /media/Movies அல்லது /media/Shows-ஐ அடையாது. இதனால் log-ல் Access to the path ... is denied பிழை ஏற்பட்டு, அனைத்து library-களும் காலியாகக் காட்டும். வாசிக்க முடியாத எந்தவொரு media folder-ம் log-ல் குறிக்கப்பட்டு தவிர்க்கப்படும். எனவே, root பயனராக நகலெடுக்கப்பட்ட கோப்புகள் library-ல் காட்டப்படாமல் மறைந்துவிடும். இதனால்தான், ஒரு folder-ஐ மட்டும் சரிசெய்வதற்குப் பதிலாக, அனைத்து directory-களுக்கும் recursively 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" என்பது கோப்பு அனுமதிகளை அமைக்கிறது, இது மேலே உள்ள உரிமையுடன் ஒத்துப்போகிறது. /config முழு server, கணக்குகள், libraries, metadata, மற்றும் watch state ஆகியவற்றை வைத்திருக்கிறது, எனவே இது எழுதக்கூடியதாக இருக்க வேண்டும் மற்றும் இதைத்தான் நீங்கள் backup எடுக்க வேண்டும். /cache என்பது தற்காலிக வேலை செய்யும் இடமாகும். media mount :ro என்பது வேண்டுமென்றே (read-only) அமைக்கப்பட்டுள்ளது: Jellyfin இயல்பாகவே artwork மற்றும் metadata-வை /config-ன் கீழ் சேமிக்கிறது, எனவே இது உங்கள் library-ல் எதையும் எழுத வேண்டிய அவசியமில்லை, மேலும் read-only வசதி தற்செயலான நீக்கம் அல்லது தவறான plugin-களிலிருந்து உங்கள் கோப்புகளைப் பாதுகாக்கிறது. port வேண்டுமென்றே 127.0.0.1-ல் பிணைக்கப்பட்டுள்ளது, Jellyfin-ன் web login சாதாரண HTTP-ல் இருப்பதால், நாம் 8096-ஐ பொது இணையத்தில் வெளியிடக்கூடாது. JELLYFIN_PublishedServerUrl என்பது local autodiscovery-க்காக server விளம்பரப்படுத்தும் முகவரியாகும், இது ஒரு LAN UDP broadcast ஆகும், எனவே இணையத்தில் உள்ள clients இதைப் பார்க்காது, நீங்கள் app-ல் உள்ளிடும் URL-ஐ மட்டுமே பயன்படுத்தும். இதை clients-க்குத் தெரிவிக்க வேண்டிய முகவரியாக அமைக்கவும், remote சாதனங்களில் அந்த URL-ஐ நீங்களே உள்ளிட வேண்டியிருக்கும் என்பதை நினைவில் கொள்ளவும்.

compose கோப்பகம் உள்ள இடத்திலிருந்து இதைத் தொடங்கவும்:

docker compose up -d
docker logs -f jellyfin

முதல் இயக்கம்: setup wizard மற்றும் உங்கள் libraries

இந்த port localhost-உடன் இணைக்கப்பட்டுள்ளதால், firewall-ல் துளையிடுவதற்குப் பதிலாக, உங்கள் laptop-லிருந்து SSH tunnel வழியாக wizard-ஐ அணுகவும்:

ssh -L 8096:127.0.0.1:8096 you@your-vps-ip

இப்போது http://localhost:8096 முகவரிக்குச் செல்லவும். இந்த wizard மொழித் தேர்வில் தொடங்கி, strong password கொண்ட admin user-ஐ உருவாக்கும் வரை உங்களை வழிநடத்தும். இந்த account உங்கள் server-க்கானது, எனவே பயன்படுத்திய கடவுச்சொற்களை மீண்டும் பயன்படுத்த வேண்டாம். உங்கள் முதல் library-ஐச் சேர்க்கவும்: content type-ஆக Movies என்பதைத் தேர்வு செய்து, அதை /media/Movies-க்குச் சுட்டிக்காட்டவும் (இது container-க்குள் இருக்கும் path, host path அல்ல). இதேபோல் Shows என்பதை /media/Shows-ல் அமைக்கவும். முடித்ததும், Jellyfin கோப்புகளை scan செய்யும். சிறிய library எனில், ஓரிரு நிமிடங்களில் posters மற்றும் titles சரியாகத் தோன்றும். பிற்காலத்தில் Dashboard → Libraries பகுதிக்குச் சென்று library-களைச் சேர்க்கலாம் அல்லது திருத்தலாம். Scan All Libraries மூலம் கட்டாய மறு-scan (rescan) செய்யலாம்.

நீங்கள் transcoding-ஐப் பயன்படுத்துகிறீர்கள் என்றால், Dashboard → Playback → Transcoding பகுதிக்குச் சென்று, transcode temp path-ஐ /cache/transcodes என அமைக்கவும். இதனால் தரவுகள் /config-ஐ நிரப்பாமல், cache volume-ல் சேமிக்கப்படும். Hardware acceleration-ஐ None என்றே வைத்திருக்கவும், ஏனெனில் வேகப்படுத்தத் தேவையான GPU அங்கு இல்லை.

தொலைநிலை அணுகல்: TLS reverse proxy, அல்லது VPN-ல் வைத்திருத்தல்

Jellyfin-ஐ வெளியிலிருந்து அணுக இரண்டு பாதுகாப்பான வழிகள் உள்ளன, தவிர்க்க வேண்டிய ஒரு பாதுகாப்பற்ற வழியும் உள்ளது. 8096 port-ஐ நேரடியாக இணையத்தில் வெளியிடுவது பாதுகாப்பற்றது: இதில் login விவரங்கள் cleartext-ஆகச் செல்லும், மேலும் சில மணிநேரங்களிலேயே அந்த port brute-force தாக்குதலுக்கு உள்ளாகும்.

விருப்பம் A, TLS reverse proxy. Jellyfin-ஐ ஒரு subdomain-ல் வைத்து, Docker பயன்பாடுகளுக்கான தானியங்கி TLS கொண்ட Traefik அல்லது Certbot மூலம் பெறப்பட்ட Let's Encrypt certificate கொண்ட nginx-க்கு பின்னால் அமைக்கவும். Jellyfin நிகழ்நேரப் புதுப்பிப்புகளுக்கு (real-time updates) WebSockets-ஐப் பயன்படுத்துகிறது, எனவே proxy-ஆனது upgrade headers-ஐ forward செய்ய வேண்டும். Traefik இதைத் தானாகவே செய்யும்; nginx-க்கு இவை தெளிவாகக் குறிப்பிடப்பட வேண்டும், மேலும் upstream-க்கு HTTP/1.1 தேவை, இல்லையெனில் upgrade நடைபெறாது:

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:// முகவரிக்கு அமைக்கவும், அப்போதுதான் உள்ளூர் autodiscovery சரியான URL-ஐக் காட்டும், தொலைநிலை பயன்பாடுகள் நீங்கள் வழங்கும் முகவரியைப் பயன்படுத்தும். மேலும், login மீதான brute-force முயற்சிகளைக் குறைக்க fail2ban-ஐச் சேர்க்கவும். சர்வர் பொதுவெளியில் வந்தவுடன், Uptime Kuma மூலம் அந்த URL-ஐக் கண்காணிக்கவும், இதனால் உங்கள் பயனர்களுக்குத் தெரிவதற்கு முன்பே downtime குறித்து நீங்கள் அறிந்துகொள்ள முடியும்.

விருப்பம் B, VPN மூலம் தனிப்பட்டதாக வைத்திருத்தல். 8096 port-ஐ எக்காரணம் கொண்டும் பொதுவெளியில் வெளியிட வேண்டாம்; அதே சர்வரில் இயங்கும் WireGuard tunnel வழியாக மட்டுமே Jellyfin-ஐ அணுகவும். ஒரு வீட்டிற்கு இதுவே எளிமையான மற்றும் பாதுகாப்பான தேர்வாகும்; இதில் certificate தேவையில்லை, பொதுவெளி அணுகல் இல்லை, brute-force தாக்குதல் அபாயமும் இல்லை. Container-ஐ tunnel முகவரி அல்லது localhost-உடன் பிணைத்து (bind), VPN வழியாக இணைக்கவும். Tunnel அமைப்பிற்கு தனியார் VPS-க்கான WireGuard VPN அமைப்பு என்பதைப் பார்க்கவும்.

சேமிப்பக அளவு மற்றும் காப்புப்பிரதிகள் (Backups)

கோப்புகளின் எண்ணிக்கையை விட, தரத்தின் அடிப்படையில் பட்ஜெட்டைத் திட்டமிடுங்கள். சுருக்கப்பட்ட (compressed) 1080p திரைப்படங்கள் ஒவ்வொன்றும் 4-15 GB வரை இருக்கும்; 1080p remux கோப்புகள் 20-40 GB; 1080p தொலைக்காட்சித் தொடரின் ஒரு பருவம் (season) 15-40 GB; 4K தரத்திலான எந்தவொரு கோப்பும் ஒரு திரைப்படத்திற்கு 40-100 GB வரை இருக்கும். சில நூறு திரைப்படங்கள் மற்றும் சில தொலைக்காட்சித் தொடர்களைக் கொண்ட ஒரு நூலகத்திற்கு 2-4 TB அளவுள்ள volume தேவைப்படும். பிற்காலத்தில் தரவுகளை மாற்றுவதை விட, ஆரம்பத்திலேயே அதிகப்படியான block volume-ஐ ஒதுக்குவது செலவு குறைந்ததாகும்.

/config என்பது முழு server-ன் நிலையையும் குறிக்கிறது, எனவே இதை நீங்கள் கண்டிப்பாக காப்புப்பிரதி எடுக்க வேண்டும். Snapshot எடுங்கள் அல்லது service-ஐ நிறுத்திவிட்டு tar கோப்பாக மாற்றி, அந்த நகலை server-க்கு வெளியே பாதுகாப்பாக வையுங்கள்:

docker compose down
sudo tar czf jellyfin-config-$(date +%F).tgz -C ~/jellyfin config
docker compose up -d

/cache மற்றும் transcode கோப்புறை (folder) ஆகியவற்றை நீக்கலாம் (disposable). /mnt/media-ல் உள்ள மீடியா கோப்புகளைத் தனியாக காப்புப்பிரதி எடுக்கலாம் அல்லது அவற்றை மீண்டும் உருவாக்க முடியும் என்பதால் அப்படியே விட்டுவிடலாம்; கோப்புகளின் அளவு காரணமாக பெரும்பாலானோர் இரண்டாவது முறையையே பின்பற்றுகிறார்கள். மேம்படுத்தல்கள் (upgrades) docker compose pull && docker compose up -d முறையில் நடக்கின்றன; மேலே உள்ள :10 tag, 10.x major பதிப்பிற்குள்ளேயே இருக்கும். எனவே, அடுத்த major பதிப்பிற்கு மாறுவது என்பது ஒரு திட்டமிட்ட tag மாற்றமாகும். Jellyfin release notes-ஐ கவனமாகப் படியுங்கள், ஏனெனில் major பதிப்புகளின் போது நூலகத்தின் schema-வில் மாற்றங்கள் ஏற்படலாம். ஒரு pinned tag மற்றும் காப்புப்பிரதி எடுக்கப்பட்ட ஒரு state directory ஆகியவையே எப்போதும் இயங்கும் எந்தவொரு container-க்கும் தேவையான முழுமையான வழிமுறையாகும். இதுவே reboot-க்குப் பிறகும் self-hosted agent-ன் நினைவகம் மற்றும் அட்டவணைகளைத் தக்கவைக்கும் முறையின் பின்னால் உள்ள அடிப்படை வடிவமாகும்.

தோல்வி முறைகள் மற்றும் நீங்கள் காணும் செய்திகள்

ஸ்கேன் செய்த பிறகு லைப்ரரி காலியாக உள்ளது. 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 பகுதியில் அந்த session Transcode என்று காட்டப்பட்டு, வேகம் 1.0x-க்குக் கீழே உள்ளது. கிளைண்ட் நேரடியாக வீடியோவை இயக்கவில்லை (direct-play), எனவே VPS CPU-வைப் பயன்படுத்தி மெதுவாக டிரான்ஸ்கோடிங் (transcoding) செய்கிறது. இதற்கான காரணம்: ஆதரிக்கப்படாத கோடெக் (codec) அல்லது கண்டெய்னர், சப்டைட்டில் பர்ன்-இன் (burn-in), அல்லது HDR டோன்-மேப்பிங். தீர்வு: direct-play வசதியுள்ள கிளைண்டிற்கு மாறவும், வீடியோக்களை H.264/AAC வடிவத்தில் வைத்திருக்கவும், இமேஜ் சப்டைட்டில்களுக்கு (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 கட்டளை, வாசிக்க முடியாத கோப்பு, அல்லது பயனரின் ப்ரொஃபைலில் வீடியோ மாற்றத்திற்கு (conversion) அனுமதி இல்லாமை. தீர்வு: Dashboard → Logs பகுதியில் உள்ள ffmpeg வரியை வாசிக்கவும், கோப்பு சரியாக இயங்குகிறதா என உறுதிப்படுத்தவும், டிரான்ஸ்கோடிங் தேவைப்பட்டால் பயனரின் பிளேபேக் அனுமதிகளைச் சரிபார்க்கவும், பிரவுசர் கோடெக் சிக்கல்களைத் தவிர்க்க மற்றொரு கிளைண்டில் முயற்சி செய்யவும்.

திரைப்படங்களுக்கு போஸ்டர் இல்லை அல்லது தவறான போஸ்டர் உள்ளது. மெட்டாடேட்டா சரியாகப் பொருந்தவில்லை. இதற்கான காரணம்: திரைப்படம் அதன் சொந்த Name (Year) ஃபோல்டரில் இல்லாமை, சீசன் ஃபோல்டர் Season 01-க்கு பதிலாக S01 என்று பெயரிடப்பட்டிருப்பது, எபிசோடுகள் S01E01 வடிவத்தில் இல்லாமை, அல்லது வெளியீட்டு ஆண்டு விடுபட்டிருப்பது. தீர்வு: மேலே குறிப்பிட்ட அமைப்பிற்கு ஏற்ப கோப்புகளை மறுபெயரிடவும், பின் Refresh metadata → Replace all என்பதைத் தேர்ந்தெடுக்கவும், அல்லது ஒரு குறிப்பிட்ட கோப்பிற்கு Identify பயன்படுத்தி சரியான TMDB/TVDB பதிப்பை இணைக்கவும்.

FAQ

GPU இல்லாமல் VPS-ல் வீடியோவை transcode செய்ய முடியுமா?

முடியும், ஆனால் CPU-வை மட்டுமே பயன்படுத்த வேண்டும், இது அதிக செலவு பிடிக்கும். ஒரு 1080p மென்பொருள் transcode பல vCPU-களை முழுமையாகப் பயன்படுத்தும். 4K அல்லது HEVC வீடியோக்கள் நிகழ்நேரத்தில் (real-time) இயங்காது, இதனால் playback buffer ஆகும். சிறந்த வழி transcoding-ஐத் தவிர்ப்பதுதான்: உங்கள் library-ஐ H.264/AAC வடிவத்தில் வைத்துக்கொண்டு, direct-play செய்யும் client apps-ஐப் பயன்படுத்தவும். அப்போது VPS வெறும் bytes-ஐ மட்டுமே stream செய்யும். உங்களுக்கு உண்மையிலேயே on-the-fly transcoding தேவைப்பட்டால் மட்டுமே GPU instance-ஐ வாடகைக்கு எடுக்கவும்.

scan செய்த பிறகு எனது Jellyfin library ஏன் காலியாக உள்ளது?

பெரும்பாலும் இது permissions தொடர்பான சிக்கல். அதிகாரப்பூர்வ jellyfin/jellyfin image நீங்கள் அமைக்கும் user: (அல்லது root) பயனர் உரிமையில் இயங்கும். அந்த கோப்புகளை அந்த uid-ஆல் படிக்க முடியவில்லை என்றால், scan logs Access to the path ... is denied என்று காட்டி அவற்றை விட்டுவிடும். chown -R 1000:1000 /mnt/media மூலம் ownership-ஐச் சரிசெய்யவும், directories-க்கு execute bit (755) வழங்கவும், மீண்டும் scan செய்யவும். parent directory-யையும் சரிபார்க்கவும், ஏனெனில் container-ன் uid-ஆல் /mnt/media-ஐ அணுக முடியவில்லை என்றால், அது library கோப்புகளை அடைய முடியாது, அனைத்தும் காலியாகவே இருக்கும். இரண்டாவது பொதுவான காரணம், Jellyfin எதிர்பார்ப்பதற்கு மாறான folder அமைப்பு ஆகும்.

Jellyfin-ஐ தொலைதூரத்தில் இருந்து பாதுகாப்பாக அணுகுவது எப்படி?

இரண்டு நல்ல வழிகள் உள்ளன. முதலாவது, TLS reverse proxy-க்கு பின்னால் ஒரு subdomain-ல் வைப்பது. இது login மற்றும் stream-ஐ encrypt செய்யும், மேலும் fail2ban-ஐச் சேர்க்கவும். plain port 8096-ஐ ஒருபோதும் திறக்க வேண்டாம், அது உங்கள் கடவுச்சொல்லை cleartext-ஆக அனுப்பும். இரண்டாவது, அதை முற்றிலும் தனிப்பட்டதாக வைத்துக்கொண்டு VPN வழியாக மட்டும் அணுகுவது; இது வீட்டு உபயோகத்திற்கு மிகவும் எளிமையான மற்றும் பாதுகாப்பான வழி. apps-க்கு public address-ஐ நேரடியாக வழங்கவும், ஏனெனில் autodiscovery என்பது local-network broadcast, அது இணையம் வழியாக வரும் clients-க்கு வேலை செய்யாது.

Jellyfin VPS-க்கு எவ்வளவு disk மற்றும் bandwidth தேவை?

Disk அளவு தரத்தைப் பொறுத்தது: ஒரு 1080p compressed படத்திற்கு 4-15 GB, remux-க்கு 20-40 GB, மற்றும் 4K-க்கு 40-100 GB எனத் திட்டமிடுங்கள். பெரும்பாலான library-களுக்கு 2-4 TB block volume தேவைப்படும். Bandwidth என்பது direct-play bitrate-ஐப் பொறுத்தது; ஒரு 1080p stream-க்கு 8-12 Mbps தேவை, 4K-க்கு அதைவிட அதிகம். எனவே, ஒரே நேரத்தில் எத்தனை பேர் பார்ப்பார்கள் என்பதைப் பொறுத்து உங்கள் port speed-ஐ உறுதிசெய்து, மாதாந்திர transfer வரம்பைக் கவனிக்கவும். நீங்கள் transcode செய்யத் திட்டமிட்டால் கூடுதல் CPU headroom-ஐச் சேர்க்கவும்; direct-play செய்யத் திட்டமிட்டால் cores-ஐ விட bandwidth-க்கு முன்னுரிமை அளிக்கவும்.

VPS-ல் Jellyfin-ஐ இயக்குவது சட்டப்பூர்வமானதா?

Jellyfin என்பது இலவசமான, open-source மென்பொருள், அதை இயக்குவது முற்றிலும் சட்டப்பூர்வமானது. நீங்கள் வைத்திருக்கும் உள்ளடக்கம் (content) தான் முக்கியம்: நீங்கள் உரிமையாளராக இருக்கும் அல்லது உரிமம் பெற்ற media-வை மட்டும் stream செய்யவும். உங்கள் சொந்த disc rips, recordings அல்லது உங்களுக்கு உரிமை உள்ள கோப்புகளை மட்டும் பயன்படுத்தவும். Jellyfin எந்த media-வையும் வழங்குவதில்லை, அதைப்பெற எந்த வழியையும் காட்டுவதில்லை; இது நீங்கள் ஏற்கனவே வைத்திருக்கும் library-க்கான ஒரு player மட்டுமே.