SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-25

VPS پر Jellyfin Docker میں کیسے لگائیں

VPS پر Docker میں Jellyfin چلائیں۔ بلاک اسٹوریج، فائل پرمیشنز، direct play بمقابلہ CPU ٹرانسکوڈنگ اور محفوظ ریموٹ رسائی کی مکمل رہنمائی۔ GPU کے بغیر ٹرانسکوڈنگ کی حقیقت جان لیں۔

آپ کیا بنا رہے ہیں

ایک VPS پر Jellyfin میڈیا سرور: ایک کنٹینر، تین والیومز، اور ایک بلاک اسٹوریج ڈسک جو آپ کی فلموں اور شوز کو محفوظ رکھتی ہے، جس تک کسی بھی براؤزر یا Jellyfin ایپ سے رسائی ممکن ہے۔ یہ انسٹالیشن ایک پندرہ سطروں پر مشتمل compose فائل ہے۔ اس کے بعد جو کچھ بھی غلط ہوتا ہے اس کی وجہ دو جگہوں سے آتی ہے — وہ فائل پرمیشنز جو کنٹینر پڑھ نہیں سکتا، اور ایک ایسے GPU سے محروم VPS سے ویڈیو ٹرانسکوڈ کرنے کا مطالبہ کرنا جس کا اس کے دائرہ کار میں کوئی کام نہیں ہے۔ یہ رہنمائی اپنا زیادہ تر حصہ انہی دو مسائل پر خرچ کرتی ہے، کیونکہ سپورٹ ٹکٹس اسی جگہ سے آتی ہیں۔

Jellyfin مفت اور مکمل اوپن سورس ہے، جس میں کوئی اکاؤنٹ، کوئی پے والڈ فیچر، اور کوئی ٹیلی میٹری نہیں ہے — یہی وجہ ہے کہ یہ 2026 میں سیلف ہوسٹ کرنے کے قابل چیزوں کی تقریباً ہر فہرست میں شامل ہوتا ہے۔ یہ آپ کی ملکیت والا میڈیا چلاتا ہے۔ یہ کوئی مواد فراہم نہیں کرتا، اور یہ رہنمائی کسی بھی مواد کو حاصل کرنے کے بارے میں نہیں ہے۔

ٹرانسکوڈنگ کی حقیقت، کرائے پر لینے سے پہلے

یہ سب سے پہلے پڑھیں، کیونکہ اس سے آپ کی خرید متاثر ہوتی ہے۔ میڈیا سرور پلے دبائنے پر دو میں سے ایک کام کرتا ہے۔ Direct play فائل کو جیسے ہے ویسے ہی سٹریم کرتا ہے: VPS ڈسک سے بائٹس پڑھتا ہے اور انہیں نیٹ ورک پر بھیجتا ہے، جس پر CPU کا تقریباً کوئی خرچ نہیں ہوتا۔ Transcoding ویڈیو کو فوراً دوبارہ انکوڈ کرتا ہے — نئی ریزولوشن، نیا کوڈیک، یا سب ٹائٹلز شامل کرنا — اور یہ خالص CPU کا کام ہے۔

ایک عام VPS میں GPU نہیں ہوتا۔ لہذا ہر ٹرانسکوڈ CPU پر libx264/libx265 کے ساتھ چلتا ہے، اور سافٹ ویئر انکوڈنگ مہنگی ہے۔ ایک سنگل 1080p H.264 ٹرانسکوڈ کئی شیئرڈ vCPU کو مکمل طور پر مصروف کر سکتا ہے؛ 4K یا HEVC ٹرانسکوڈ عام طور پر ریئل ٹائم میں رفتار برقرار نہیں رکھ سکتا، اس لیے پلے بیک رک جاتا ہے اور مسلسل بفر ہوتا رہتا ہے۔ ہارڈویئر ٹرانسکوڈنگ — جو ایک انٹل 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 فائل کو اس کی اپنی بٹ ریٹ پر بھیجتا ہے۔ ایک کمپریسڈ 1080p فائل 8-12 Mbps چلتی ہے؛ 1080p Blu-ray remux 20-30 Mbps؛ 4K HDR 40-80 Mbps۔ تین افراد 10 Mbps فائلز ڈائریکٹ پلے کرنا آپ کے VPS سے 30 Mbps کی مسلسل اپ لوڈ ہے۔ اپنے پلان پر دو نمبرز چیک کریں: پورٹ اسپیڈ (کیا یہ 30 Mbps اپ سٹریم بھیج سکتا ہے؟) اور ماہانہ ٹرانسفر کیپ۔ ایک دو گھنٹے کی 10 Mbps فلم تقریباً 9 GB باہر جاتی ہے، اس لیے 1 TB/ماہ کی میٹرڈ الاؤنس ایک ماہ میں ایسی سو سے کچھ زیادہ فلموں کے لیے کافی ہے — دن میں تین یا چار — اور 4K دیکھنے والا گھرانہ، جو بٹ ریٹ میں چار سے آٹھ گنا زیادہ ہے، اسے بہت تیزی سے ختم کر دیتا ہے۔

پیش نیازات

  • ایک نیا Ubuntu 24.04 KVM VPS جس میں root یا sudo دسترسی ہو، اور Docker اور Compose plugin انسٹال ہو۔
  • میڈیا کے لیے ایک block-storage volume، جس کا سائز آپ کی لائبریری کے مطابق ہو (نیچے سائز کا حصہ دیکھیں)۔ VPS کے ساتھ آنے والا چھوٹا root disk وہ جگہ نہیں ہے جہاں آپ کی فلمیں رکھی جائیں گی۔
  • اگر آپ کو عوامی HTTPS رسائی چاہیے تو ایک domain name، یا اگر آپ پورے سسٹم کو نجی رکھنا چاہتے ہیں تو اسی 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

اسے UUID کے ذریعے ماؤنٹ کریں، /dev/sdb کے ذریعے نہیں، کیونکہ ڈیوائس کے حروف ریبوٹ کے بعد تبدیل ہو جاتے ہیں اور آپ غلط ڈسک کو فارمیٹ یا ماؤنٹ کر سکتے ہیں۔ /etc/fstab میں ایک لائن شامل کریں:

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

nofail اہم ہے: اس کے بغیر، اگر بلاک والیوم کبھی الگ ہو جائے تو مشین بوٹ نہیں ہوتی اور ایمرجنسی شیل میں چلی جاتی ہے۔ یہاں سب سے بڑی غلطی ایسے والیوم پر 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/jellyfin امیج PUID/PGID ماحولیاتی متغیرات پر عمل نہیں کرتی۔ یہ متغیرات LinuxServer.io امیج (lscr.io/linuxserver/jellyfin) سے تعلق رکھتے ہیں۔ سرکاری امیج میں آپ compose میں user: کلید کے ذریعے صارف کو کنٹرول کرتے ہیں۔ اگر آپ اسے چھوڑ دیں تو کنٹینر root کے طور پر چلتا ہے۔ آپ کوئی بھی طریقہ استعمال کریں، اصول ایکا ہی رہتا ہے۔ کنٹینر جس uid/gid سے چل رہا ہے، وہ ہر میڈیا ڈائریکٹری کو پڑھ اور عبور کر سکے۔

ہم uid/gid 1000 سے چلائیں گے۔ یہ اسٹاک Ubuntu سسٹم پر پہلا non-root صارف ہے۔ اپنا 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 کے طور پر کاپی کی گئی فائلوں کا ایک سیٹ لائبریری سے خاموشی سے غائب ہو جائے گا۔ اسی لیے ہم ملکیت کو بازرسی سے تبدیل کرتے ہیں اور ہر ڈائریکٹری پر 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 پورے سرور کو محفوظ رکھتا ہے — اکاؤنٹس، لائبریریاں، میٹا ڈیٹا، واچ حالت — اس لیے یہ قابلِ تحریر ہونا چاہیے اور یہ وہ چیز ہے جس کا آپ بیک اپ لیتے ہیں۔ /cache ایک عارضی ورکنگ اسپیس ہے۔ میڈیا ماؤنٹ جان بوجھ کر :ro (صرف پڑھنے کے لیے) ہے: 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 پر براؤز کریں۔ وزرڈ آپ کو زبان منتخب کرنے کے لیے لے جاتا ہے، پھر ایک مضبوط پاس ورڈ کے ساتھ admin صارف بنانے کے لیے — یہ اکاؤنٹ آپ کا سرور ہے، اس لیے کوئی عارضی پاس ورڈ دوبارہ استعمال نہ کریں۔ اپنی پہلی لائبریری شامل کریں: مواد کی قسم Movies منتخب کریں، اسے /media/Movies کی طرف اشارہ کریں (کنٹینر کے اندرون والا راستہ، ہوسٹ کا راستہ نہیں)، اور Shows کے ساتھ /media/Shows پر یہی دہرائیں۔ مکمل کریں، اور Jellyfin اسکین کرتا ہے۔ درست نتیجہ یہ ہے کہ چھوٹی لائبریری کے لیے ایک یا دو منٹ میں پوسٹرز اور عنوانات بھر جائیں۔ لائبریریاں بعد میں Dashboard → Libraries کے تحت شامل یا ترمیم کریں، اور Scan All Libraries کے ساتھ زبردستی دوبارہ اسکین کریں۔

اگر آپ کسی بھی ٹرانسکوڈنگ پر انحصار کرتے ہیں، تو Dashboard → Playback → Transcoding کھولیں اور ٹرانسکوڈ عارضی راستے کو /cache/transcodes پر مقرر کریں تاکہ بوجھ کیشے والیوم پر پڑے، /config کو پھیلنے کے بجائے۔ ہارڈویئر ایکسلریشن کو None پر چھوڑیں — ایکسلریٹ کرنے کے لیے کوئی GPU موجود نہیں۔

دور رسائی: TLS ریورس پراکسی، یا اسے VPN پر رکھیں

Jellyfin تک باہر سے پہنچنے کے دو محفوظ طریقے ہیں، اور ایک غیر محفوظ طریقہ ہے جس سے بچنا چاہیے۔ غیر محفوظ طریقہ port 8096 کو براہ راست انٹرنیٹ پر شائع کرنا ہے: لاگ ان صاف متن میں بھیجا جاتا ہے اور چند گھنٹوں میں port پر brute-force حملہ ہو جاتا ہے۔

آپشن A — TLS ریورس پراکسی۔ Jellyfin کو اپنے Docker ایپس کے لیے خودکار TLS کے ساتھ Traefik کے پیچھے سب ڈومین پر رکھیں، یا nginx کے پیچھے Certbot کے ذریعے جاری کردہ Let's Encrypt سرٹیفکیٹ کے ساتھ رکھیں۔ 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 کی تشہیر کرے — ریموٹ ایپس وہ ایڈریس استعمال کرتی ہیں جو آپ انہیں دیں — اور لاگ ان کے خلاف brute-force کوششوں کو سست کرنے کے لیے fail2ban شامل کریں۔ ایک بار سرور پبلک ہونے کے بعد، Uptime Kuma کو URL پر پوائنٹ کریں تاکہ آپ کو اپنے ناظرین سے پہلے ڈاؤن ٹائم کا پتہ چلے۔

آپشن B — اسے VPN پر پرائیویٹ رکھیں۔ 8096 کو بالکل شائع نہ کریں؛ Jellyfin تک صرف اسی باکس پر ختم ہونے والے WireGuard ٹنل کے ذریعے پہنچیں۔ ایک گھرانے کے لیے یہ سب سے آسان محفوظ انتخاب ہے — کوئی سرٹیفکیٹ نہیں، کوئی پبلک ایکسپوژر نہیں، کوئی brute-force سطح نہیں۔ کنٹینر کو ٹنل ایڈریس یا localhost سے بائنڈ کریں اور VPN کے ذریعے کنیکٹ کریں۔ ٹنل کے لیے پرائیویٹ VPS کے لیے WireGuard VPN سیٹ اپ دیکھیں۔

اسٹوریج سائزنگ اور بیک اپس

بجٹ کا تعین فائل کی تعداد سے نہیں، کوالٹی سے کریں۔ کمپریسڈ 1080p فلمیں ہر ایک 4-15 GB کے درمیان ہوتی ہیں؛ 1080p remux 20-40 GB؛ 1080p ٹی وی کا ایک سیزن 15-40 GB؛ کوئی بھی 4K فلم 40-100 GB فی فلم ہوتی ہے۔ چند سو فلموں اور کچھ شوز پر مشتمل لائبریری کے لیے 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 سے نیچے ہے۔ کلائنٹ ڈائریکٹ پلے نہیں کر رہا، اس لیے VPS CPU-ٹرانسکوڈنگ ریئل ٹائم سے سست کر رہا ہے اور پیچھے رہ رہا ہے۔ وجہ: غیر معاون کوڈیک یا کنٹینر، سب ٹائٹل برن اِن، یا HDR ٹون میپنگ۔ حل: ڈائریکٹ پلے کلائنٹ پر منتقل ہوں، ذرائع کو H.264/AAC میں رکھیں، image سب ٹائٹلز (PGS/VOBSUB) کے بجائے text سب ٹائٹلز (SRT) استعمال کریں جو برن اِن پر مجبور کرتے ہیں، اور 4K HDR کو صرف CPU والے باکس سے یکسر دور رکھیں۔

"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

کیا ایک VPS بغیر GPU کے ویڈیو کو ٹرانسکوڈ کر سکتا ہے؟

ہاں، لیکن صرف CPU پر، اور یہ مہنگا ہے۔ ایک ہی 1080p سافٹ ویئر ٹرانسکوڈ کئی vCPUs کو مکمل طور پر مصروف کر سکتا ہے، اور 4K یا HEVC عام طور پر حقیقی وقت کے ساتھ قدم نہیں ملاسکتی، اس لیے پلے بیک بار بار رکتا ہے۔ بہترین حل ٹرانسکوڈنگ سے بچنا ہے: اپنی لائبریری کو H.264/AAC میں رکھیں اور ایسے کلائنٹ ایپس استعمال کریں جو ڈائریکٹ پلے کرتی ہوں، تاکہ VPS صرف بائٹس کو اسٹریم کرے۔ صرف اس صورت میں GPU انسٹنس کرائے پر لیں جب آپ کو واقعی فوری ٹرانسکوڈنگ کی ضرورت ہو۔

سکین کے بعد میری Jellyfin لائبریری خالی کیوں ہے؟

تقریباً ہمیشہ اجازت کا مسئلہ ہوتا ہے۔ سرکاری jellyfin/jellyfin image آپ کے مقرر کردہ 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 کوئی میڈیا شامل نہیں کرتا اور کوئی حاصل کرنے کا ذریعہ فراہم نہیں کرتا؛ یہ آپ کی موجودہ لائبریری کو چلانے کے لیے ایک پلیئر ہے۔

#jellyfin#media-server#docker#self-hosting#transcoding