SSD Nodes Learn Hosting plans →
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-08-26

كيفية تثبيت Jellyfin على خادم VPS باستخدام Docker

تعلم كيفية تشغيل Jellyfin على خادم VPS مع ضبط صلاحيات المجلدات وتجنب مشاكل تحويل الترميز. اكتشف إعدادات Docker الصحيحة لضمان التشغيل المباشر لملفاتك دون استهلاك معالج الخادم.

ما الذي تقوم ببنائه

خادم وسائط Jellyfin على خادم افتراضي خاص (VPS): حاوية واحدة، وثلاثة مجلدات (volumes)، وقرص تخزين كتل (block-storage) يحتوي على أفلامك وعروضك، ويمكن الوصول إليه من أي متصفح أو تطبيق Jellyfin. يتكون التثبيت من ملف compose بطول 15 سطراً. كل ما قد يسوء لاحقاً ينبع من مصدرين: صلاحيات ملفات لا تستطيع الحاوية قراءتها، ومطالبة خادم افتراضي لا يملك وحدة معالجة رسوميات (GPU) بتحويل ترميز الفيديو وهو أمر لا يخصه. يقضي هذا الدليل معظم وقته في معالجة هاتين النقطتين، لأنهما مصدر معظم تذاكر الدعم الفني.

Jellyfin مجاني ومفتوح المصدر بالكامل، بدون حسابات، وبدون ميزات مقفلة خلف دفع مالي، وبدون تتبع، وهذا هو سبب ظهوره في كل قائمة تقريباً حول أشياء تستحق الاستضافة الذاتية في 2026. يقوم بتشغيل الوسائط التي تمتلكها. هو لا يأتي بأي محتوى، وهذا الدليل لا يتناول كيفية الحصول على أي محتوى.

واقع تحويل الترميز، قبل استئجار أي شيء

اقرأ هذا أولاً، لأنّه يغيّر ما ستشتريه. يقوم خادم الوسائط بأحد أمرين عند الضغط على زر التشغيل. التشغيل المباشر (Direct play) يبث الملف كما هو: يقرأ الـVPS البايتات من القرص ويدفعها عبر الشبكة، وهو ما لا يستهلك تقريباً أي قدرة معالجة (CPU). أما تحويل الترميز (Transcoding) فيعيد ترميز الفيديو أثناء التشغيل، بدقة جديدة، أو ترميز جديد، أو دمج ترجمات، وهذا عمل يستهلك الـCPU بالكامل.

لا يحتوي الـVPS النموذجي على وحدة معالجة رسوميات (GPU). لذا، يتم تشغيل كل عملية تحويل ترميز على الـCPU باستخدام libx264/libx265، والترميز البرمجي مكلف. يمكن لعملية تحويل ترميز واحدة بدقة 1080p وترميز H.264 أن تستهلك قدرة عدة أنوية افتراضية (vCPUs) مشتركة؛ بينما لا يمكن لعملية تحويل ترميز بدقة 4K أو ترميز HEVC مواكبة التشغيل الفعلي، مما يؤدي إلى توقف التشغيل والتحميل المستمر. تحويل الترميز العتادي، وهو الميزة التي تجعل هذا الأمر رخيصاً على الأجهزة المنزلية المزودة بـIntel iGPU أو بطاقة Nvidia، غير متاح لك ببساطة ما لم يقم مزود الخدمة بتأجير مثيلات (instances) تحتوي على GPU.

لذا، فإن الاستراتيجية الكاملة على الـVPS هي: تجنب تحويل الترميز. احتفظ بمكتبتك بتنسيقات تشغلها تطبيقاتك محلياً، مثل فيديو H.264، وصوت AAC أو AC3، داخل حاوية MP4 أو MKV، واختر تطبيقات عميلة تدعم التشغيل المباشر: تطبيقات Jellyfin الأصلية لأجهزة Android TV وiOS وRoku، بالإضافة إلى Infuse وKodi وJellyfin Media Player لسطح المكتب. إذا فعلت ذلك، فلن يضطر الـVPS لاستخدام ffmpeg، ويمكن لجهاز متواضع بـ2 vCPU البث لعدة أشخاص في وقت واحد. إذا خططت للقيام بتحويل الترميز، فستحتاج إلى جهاز أكبر وأغلى بكثير، وحتى في هذه الحالة، تظل دقة 4K خياراً غير مضمون.

احسب عرض النطاق الترددي أيضاً، لأن هذه مفاجأة أخرى. يرسل التشغيل المباشر الملف بمعدل البت الخاص به. يحتاج ملف 1080p مضغوط إلى 8-12 Mbps، ويحتاج remux من Blu-ray بدقة 1080p إلى 20-30 Mbps، بينما يحتاج محتوى 4K HDR إلى 40-80 Mbps. إذا شغّل ثلاثة أشخاص ملفات بمعدل 10 Mbps مباشرة، فسيستهلك ذلك 30 Mbps من الرفع المستمر على VPS لديك. تحقّق من رقمين في خطتك: سرعة المنفذ، وهل يمكنه إرسال 30 Mbps صعوداً، وحدّ نقل البيانات الشهري. يستهلك فيلم مدته ساعتان بمعدل 10 Mbps نحو 9 GB من البيانات الصادرة، لذا فإن حصة محدودة تبلغ 1 TB شهرياً تكفي لأكثر بقليل من مئة فيلم مماثل في الشهر، أي ثلاثة أو أربعة أفلام يومياً. أما منزل يشاهد محتوى 4K، بمعدل بت يبلغ أربعة إلى ثمانية أضعاف ذلك، فسيستنفد الحصة بسرعة أكبر بكثير. احتسب ضمن الميزانية نفسها كل ما يرسل حركة مرور من الخادم ذاته، بما في ذلك وسيط RustDesk مستضاف ذاتياً، إذ ينقل جلسة سطح مكتب بعيدة كاملة عندما يتعذر على طرفين الاتصال مباشرة.

المتطلبات الأساسية

  • خادم افتراضي (VPS) بنظام Ubuntu 24.04 حديث مع صلاحيات root أو sudo، وتثبيت Docker مع إضافة Compose.
  • وحدة تخزين (block-storage volume) للوسائط، بحجم يتناسب مع مكتبتك (راجع تقدير الأحجام أدناه). لا تخزّن أفلامك على قرص النظام الصغير الذي يأتي مع الخادم الافتراضي.
  • اسم نطاق إذا كنت ترغب في وصول عام عبر HTTPS، أو شبكة WireGuard VPN على نفس الخادم إذا كنت تفضل إبقاء كل شيء خاصاً.
  • وسائط تمتلك الحق القانوني في بثها، أو نسخك الخاصة، أو تسجيلاتك الشخصية، أو ملفات تملكها.

قم بتركيب وحدة التخزين الكتلي أولاً

قم بإرفاق وحدة التخزين (volume) من لوحة تحكم مزود الخدمة، ثم اعثر عليها وقم بتركيبها (mount). احصل على اسم الجهاز من lsblk، وسيكون اسماً مشابهاً لـ /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

قم بتركيب القرص باستخدام الـ 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 مهماً جداً؛ فبدونه، إذا تم فصل وحدة التخزين الكتلي، سيرفض الخادم الإقلاع وسينتقل إلى وضع الطوارئ (emergency shell). الخطأ الأكبر هنا هو تشغيل الأمر mkfs.ext4 على وحدة تخزين تحتوي بالفعل على بيانات، لأن ذلك سيؤدي إلى مسحها بالكامل. قم بتهيئة وحدات التخزين الجديدة فقط؛ إذا كان القرص يحتوي بالفعل على مكتبة بياناتك، انتقل مباشرة إلى إضافة السطر في ملف fstab.

تنظيم الوسائط بالشكل الذي يتوقعه Jellyfin

يطابق Jellyfin البيانات الوصفية (metadata) بناءً على أسماء المجلدات والملفات. إذا كان التنظيم خاطئاً، ستظهر الأفلام كملفات بدون عنوان وبدون ملصق، أو قد تطابق الحلقة مسلسلاً غير صحيح. هناك ثلاث قواعد دقيقة: يجب أن يوضع كل فيلم في مجلد خاص به باسم 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) في أسماء الأفلام ليس للزينة، بل هو لتمييز النسخ المعاد إنتاجها (remakes) لضمان حصول المطابق على العنوان الصحيح. احتفظ بـ Movies و Shows كمجلدات رئيسية منفصلة لأن كل واحد منهما يصبح مكتبة Jellyfin لنوع محتوى محدد، وخلطهما يربك مزود البيانات الوصفية. سيقوم Jellyfin بفهرسة مجلد ثالث للصور بكل سرور، لكن التجربة ستكون محدودة مقارنة بخادم صور مخصص، لذا إذا كانت ألبوماتك مهمة، خصص لها خادماً مستقلاً يشغل PhotoPrism أو Immich واترك هذا الخادم للأفلام والمسلسلات فقط.

الصلاحيات: السبب الأول لظهور المكتبات فارغة

هذا هو الاعتقاد الخاطئ الذي يكلّف المستخدمين قضاء أمسية كاملة في حل المشكلات. الصورة الرسمية jellyfin/jellyfin لا تعتمد متغيرات البيئة PUID/PGID، فهذه المتغيرات تخص صورة LinuxServer.io (lscr.io/linuxserver/jellyfin). في الصورة الرسمية، أنت تتحكم في المستخدم عبر المفتاح user: في ملف compose، وإذا أغفلته، سيعمل الحاوية بصلاحيات root. أياً كان الخيار الذي تستخدمه، القاعدة ثابتة: يجب أن يمتلك معرف المستخدم/المجموعة (uid/gid) الذي تعمل به الحاوية صلاحية القراءة والوصول إلى كل مجلد وسائط.

سنقوم بالتشغيل باستخدام uid/gid 1000، وهو أول مستخدم غير جذر (non-root) في نظام Ubuntu قياسي. تأكد من قيمتك الخاصة واضبط الملكية:

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

تحتاج المجلدات إلى بت التنفيذ (الرمز x في 755)، وليس فقط القراءة؛ فبدونه لا تستطيع الحاوية الدخول إلى المجلد حتى لو تمكنت من سرد أسماء الملفات بداخله. الفخ الذي يؤدي إلى إفراغ مكتبة كاملة هو المجلد الأب: إذا لم يستطع uid الحاوية الوصول إلى نقطة الربط (mount) نفسها، فلن يصل أبداً إلى /media/Movies أو /media/Shows، وستظهر كل المكتبات فارغة فوراً مع ظهور Access to the path ... is denied في السجلات. أي مجلد وسائط لا تستطيع الحاوية قراءته يتم تسجيله وتخطيه، لذا فإن مجموعة الملفات التي نُسخت بصلاحيات root تختفي بصمت من المكتبة. لهذا السبب نقوم بتنفيذ chown بشكل متكرر (recursively) ونضبط بت التنفيذ على كل مجلد بدلاً من إصلاح مجلد واحد فقط.

ملف 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 هو العنوان الذي يعلن عنه الخادم للاكتشاف التلقائي المحلي، وهو بث UDP عبر الشبكة المحلية (LAN)، لذا لا يراه العملاء عبر الإنترنت أبداً ويستخدمون ببساطة عنوان 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. هذه الملصقات هي أيضاً ما يجعل تجربة واجهة بديلة أمراً يستحق العناء بمجرد عمل الأساسيات، حيث يعيد Halcyon بناء المكتبة ذاتها كمتجر فيديو من التسعينات يمكن التجول فيه اعتماداً على الأعمال الفنية التي جلبها Jellyfin مسبقاً.

إذا كنت تعتمد على أي تحويل ترميز (transcoding)، افتح Dashboard → Playback → Transcoding واضبط مسار ملفات التحويل المؤقتة على /cache/transcodes لضمان توجيه البيانات المتغيرة إلى وحدة التخزين المؤقت (cache volume) بدلاً من تضخيم /config. اترك تسريع العتاد (hardware acceleration) مضبوطاً على None، إذ لا يوجد معالج رسوميات (GPU) للقيام بالتسريع.

الوصول عن بُعد: وكيل عكسي (Reverse Proxy) مع TLS، أو الإبقاء عليه ضمن شبكة VPN

لديك طريقتان آمنتان للوصول إلى Jellyfin من الخارج، وطريقة واحدة غير آمنة يجب تجنبها. الطريقة غير الآمنة هي نشر المنفذ 8096 مباشرة على الإنترنت: حيث تنتقل بيانات تسجيل الدخول كنص واضح (cleartext)، ويتعرض المنفذ لهجمات القوة الغاشمة (brute-force) في غضون ساعات.

الخيار (أ)، وكيل عكسي (Reverse Proxy) مع TLS. ضع Jellyfin على نطاق فرعي خلف Traefik مع TLS تلقائي لتطبيقات Docker الخاصة بك، أو خلف nginx مع شهادة Let's Encrypt صادرة عن Certbot. يستخدم Jellyfin بروتوكول WebSockets للتحديثات الفورية، لذا يجب على الوكيل تمرير ترويسات الترقية (upgrade headers). يقوم Traefik بذلك تلقائياً؛ بينما يحتاج nginx إلى تحديدها صراحة، كما يتطلب استخدام HTTP/1.1 عند الاتصال بالخدمة الخلفية (upstream) وإلا فلن تتم عملية الترقية:

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:// بحيث يعلن الاكتشاف التلقائي المحلي عن الرابط الصحيح، وتستخدم التطبيقات البعيدة العنوان الذي تزودها به، وأضف fail2ban لإبطاء محاولات القوة الغاشمة ضد صفحة تسجيل الدخول. بمجرد أن يصبح الخادم عاماً، وجّه Uptime Kuma نحو الرابط لتصلك تنبيهات التوقف قبل مستخدميك. وجّه إشعاراته إلى خادم ntfy ذاتي الاستضافة، وسيصلك فشل الفحص كإشعار دفع (push) على هاتفك بدلاً من بريد إلكتروني تقرؤه في صباح اليوم التالي. إن وضع صفحة تسجيل دخول على الإنترنت العام هو أيضاً فرصة جيدة لتدقيق بقية الخادم بدلاً من الافتراض بأن المنفذ 443 هو الوحيد الذي يستجيب، ويقوم open-kritt بتشغيل ذلك الفحص من حاويته الخاصة على نفس الـVPS.

الخيار (ب)، الإبقاء عليه خاصاً عبر VPN. لا تنشر المنفذ 8096 نهائياً؛ بل اتصل بـ Jellyfin فقط عبر نفق WireGuard ينتهي عند نفس الخادم. بالنسبة للمنزل، هذا هو الخيار الأكثر أماناً وبساطة، فلا حاجة لشهادات، ولا تعرض للعامة، ولا سطح هجوم للقوة الغاشمة. اربط الحاوية بعنوان النفق أو بـ localhost واتصل عبر الـVPN. راجع إعداد WireGuard VPN لخادم VPS خاص لإنشاء النفق نفسه.

تقدير سعة التخزين والنسخ الاحتياطي

خطط للميزانية بناءً على الجودة، وليس على عدد الملفات. يستهلك فيلم 1080p مضغوط ما بين 4-15 GB؛ بينما يستهلك إصدار remux بدقة 1080p ما بين 20-40 GB؛ أما موسم كامل من مسلسل بدقة 1080p فيتراوح بين 15-40 GB؛ بينما يستهلك أي محتوى بدقة 4K ما بين 40-100 GB للفيلم الواحد. مكتبة تحتوي على بضع مئات من الأفلام وبعض المسلسلات تتطلب وحدة تخزين بسعة 2-4 TB، وتوفير سعة إضافية في وحدة التخزين (block volume) منذ البداية أقل تكلفة من الترحيل لاحقاً.

/config يمثل حالة الخادم بالكامل، لذا فهو الشيء الوحيد الذي يجب عليك نسخ احتياطاته. قم بأخذ لقطة (snapshot) أو أوقف الخدمة ثم استخدم tar لضغط المجلد واحتفظ بالنسخة خارج الخادم:

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

/cache ومجلد الترميز (transcode) ملفات يمكن الاستغناء عنها. أما الوسائط الموجودة على /mnt/media فقم بنسخها احتياطياً بشكل منفصل أو تقبّل فكرة إمكانية إعادة نسخها (re-rippable)؛ معظم المستخدمين يختارون الخيار الثاني نظراً لحجمها الكبير. الترقيات تتم عبر docker compose pull && docker compose up -d؛ ووسم :10 المذكور أعلاه يبقى ضمن إصدار 10.x الرئيسي، لذا فإن الانتقال إلى الإصدار الرئيسي التالي يتطلب تعديلاً مقصوداً للوسم، طالع ملاحظات إصدار Jellyfin قبل القيام بذلك، لأن عمليات ترحيل مخطط المكتبة (library schema migrations) تحدث في الإصدارات الرئيسية. الوسم المثبّت (pinned tag) مع دليل حالة واحد منسوخ احتياطياً هو الوصفة الكاملة لأي حاوية تعمل باستمرار، وهو نفس النمط المستخدم في الحفاظ على ذاكرة وجدولة وكيل ذاتي الاستضافة عبر عمليات إعادة التشغيل.

أنماط الفشل والرسائل التي ستواجهها

المكتبة فارغة بعد إجراء المسح. يظهر السجل في Dashboard → Logs (أو ~/jellyfin/config/log/log_*.log) ما يلي:

System.UnauthorizedAccessException: Access to the path '/media/Movies' is denied.

لا يمكن لـ uid الخاص بالحاوية قراءة ذلك المسار. السبب: الوسائط مملوكة لـ root أو لـ uid غير القيمة المحددة في user:، أو أن المجلد يفتقر إلى صلاحية التنفيذ (execute bit)، أو أن نقطة التثبيت (mount) نفسها غير قابلة للوصول بواسطة ذلك الـ uid. الحل: استخدم chown -R 1000:1000 /mnt/media، واضبط المجلدات على 755، والملفات على 644، ثم أعد المسح.

التشغيل يستهلك المعالج بالكامل ويؤدي إلى التخزين المؤقت. يظهر docker stats jellyfin استهلاكاً للمعالج يقارب 100% مضروباً في عدد الأنوية، وتدرج Dashboard → Playback الجلسة كـ Transcode بسرعة أقل من 1.0x. العميل لا يقوم بالتشغيل المباشر (direct-play)، لذا يقوم الخادم الافتراضي (VPS) بتحويل ترميز الفيديو (transcoding) بسرعة أبطأ من الوقت الفعلي، مما يسبب التوقف. السبب: ترميز أو حاوية غير مدعومة، أو دمج الترجمة في الفيديو (burn-in)، أو معالجة ألوان HDR. الحل: انتقل إلى عميل يدعم التشغيل المباشر، واحتفظ بالملفات بصيغة H.264/AAC، واستخدم ترجمات نصية (SRT) بدلاً من الترجمات الصورية (PGS/VOBSUB) التي تجبر الخادم على دمجها في الفيديو، وتجنب تشغيل محتوى 4K HDR على خادم يعتمد على المعالج فقط.

"لا توجد تدفقات متوافقة متاحة." الرسالة الكاملة عادة ما تكون "هذا العميل غير متوافق مع الوسائط والخادم لا يرسل تنسيق وسائط متوافقاً." رفض العميل المصدر وفشل أيضاً تحويل الترميز الاحتياطي في البدء. السبب: أمر ffmpeg معطوب، أو ملف غير قابل للقراءة، أو أن ملف تعريف المستخدم يمنع تحويل الفيديو. الحل: اقرأ سطر ffmpeg في Dashboard → Logs، وتأكد من أن الملف يعمل أصلاً، وتحقق من صلاحيات التشغيل الخاصة بالمستخدم إذا كنت تعتمد على تحويل الترميز، وجرب عميلاً آخر لاستبعاد مشاكل ترميز المتصفح.

الأفلام لا تملك ملصقاً أو تملك ملصقاً خاطئاً. البيانات الوصفية (Metadata) لم تتطابق. السبب: فيلم ليس في مجلده الخاص Name (Year)، أو مجلد موسم مسمى S01 بدلاً من Season 01، أو حلقات ليست بصيغة S01E01، أو فقدان السنة. الحل: أعد التسمية وفقاً للتنسيق أعلاه، ثم اختر Refresh metadata → Replace all، أو استخدم Identify على عنصر واحد لتحديد المدخل الصحيح من TMDB/TVDB.

FAQ

هل يمكن لخادم VPS تحويل ترميز الفيديو دون وحدة معالجة رسومية (GPU)؟

نعم، ولكن باستخدام المعالج (CPU) فقط، وهي عملية مكلفة. يمكن لعملية تحويل ترميز واحدة بدقة 1080p برمجياً أن تستهلك قدرة عدة أنوية افتراضية (vCPUs)، وعادةً لا يمكن لدقة 4K أو ترميز HEVC مواكبة البث المباشر، مما يؤدي إلى توقف التشغيل مؤقتاً للتخزين المؤقت. الخيار الأفضل هو تجنب تحويل الترميز: احتفظ بمكتبتك بصيغة H.264/AAC واستخدم تطبيقات عميلة تدعم التشغيل المباشر (direct-play)، بحيث يكتفي الـVPS ببث البيانات. استأجر خادماً مزوداً بـGPU فقط إذا كنت بحاجة فعلية لتحويل الترميز أثناء التشغيل.

لماذا تظهر مكتبة Jellyfin فارغة بعد الفحص؟

السبب في الغالب هو صلاحيات الوصول. تعمل حاوية jellyfin/jellyfin الرسمية باستخدام الـuser: الذي تحدده (أو root)، وإذا لم تكن الملفات قابلة للقراءة بواسطة هذا المعرّف (uid)، فإن سجلات الفحص تسجّل Access to the path ... is denied وتتخطى تلك الملفات. صحّح ملكية الملفات باستخدام chown -R 1000:1000 /mnt/media، وامنح المجلدات صلاحية التنفيذ (755)، ثم أعد الفحص. تحقق أيضاً من المجلد الأب، لأنه إذا لم يتمكن معرّف المستخدم الخاص بالحاوية من الوصول إلى /mnt/media نفسه، فلن يصل أبداً إلى مجلدات المكتبة وستظهر النتائج فارغة. السبب الثاني الأكثر شيوعاً هو هيكلية المجلدات التي لا تتوافق مع ما يتوقعه Jellyfin.

كيف يمكنني الوصول إلى Jellyfin عن بُعد وبأمان؟

هناك خياران جيدان. ضع الخدمة خلف وكيل عكسي (Reverse Proxy) مع تشفير TLS على نطاق فرعي لضمان تشفير تسجيل الدخول والبث، وأضف fail2ban، ولا تعرض أبداً المنفذ 8096 الخام، لأنه يرسل كلمة مرورك كنص واضح. أو اجعل الخدمة خاصة تماماً ولا تصل إليها إلا عبر VPN، وهو الخيار الأكثر أماناً وبساطة للاستخدام المنزلي. امنح التطبيقات العنوان العام مباشرة، فخاصية الاكتشاف التلقائي (autodiscovery) تعتمد على البث داخل الشبكة المحلية، لذا فهي لا تصل إلى العملاء القادمين عبر الإنترنت.

ما هي مساحة القرص وعرض النطاق الترددي التي يحتاجها خادم Jellyfin VPS؟

تعتمد مساحة القرص على الجودة: خصص 4-15 جيجابايت لكل فيلم 1080p مضغوط، و20-40 جيجابايت لكل نسخة remux، و40-100 جيجابايت لدقة 4K، لذا تحتاج معظم المكتبات إلى وحدة تخزين بسعة 2-4 تيرابايت. يتم تحديد عرض النطاق الترددي حسب معدل البت للتشغيل المباشر، وهو 8-12 ميجابت في الثانية لكل بث 1080p، وأكثر من ذلك بكثير لدقة 4K، لذا تأكد من أن سرعة المنفذ لديك تتحمل عدد المشاهدين المتزامنين وراقب سقف نقل البيانات الشهري. أضف سعة معالجة إضافية إذا كنت تخطط لتحويل الترميز؛ وأعطِ الأولوية لعرض النطاق الترددي على عدد الأنوية إذا كنت تخطط للتشغيل المباشر.

هل تشغيل Jellyfin على خادم VPS قانوني؟

Jellyfin بحد ذاته برنامج مجاني ومفتوح المصدر وتشغيله قانوني تماماً. ما يهم هو المحتوى: ابث فقط الوسائط التي تمتلكها أو المرخص لك بحيازتها، مثل نسخ الأقراص الخاصة بك، أو التسجيلات، أو الملفات التي تملك الحق في استخدامها. لا يأتي Jellyfin مع أي وسائط ولا يوفر أي وسيلة للحصول عليها؛ إنه مجرد مشغل لمكتبة تمتلكها بالفعل.