لماذا مغادرة Plex الآن
طوال سنوات، سمح Plex بمشاهدة مكتبتك خارج المنزل مجانًا. لم يعد الأمر كذلك: وفقًا لـصفحة عروض Plex، يتطلب البث عن بُعد للمحتوى الشخصي إما Plex Pass على حساب مسؤول الخادم، وإما Remote Watch Pass على حساب كل مشاهد. أُطلق هذا الاشتراك الثاني بسعر تمهيدي، وأصبح يتجدد منذ 1 يونيو 2026 بسعر 2.99 دولار شهريًا أو 29.99 دولار سنويًا. غالبًا ما يكون رفض التشغيل على الهاتف أو عند أحد الأقارب هو الدافع: يبحث المستخدم عن مخرج فوري، لا عن تقييم مطوّل.
Jellyfin هو الإجابة المباشرة. إنه تفرّع مجتمعي من قاعدة كود Emby، منشور برخصة GPL-2.0، دون حساب إلزامي، ودون قياس عن بُعد، ودون ميزات محجوبة خلف جدار دفع. وهو لا يحاكي واجهة برمجة Plex: بل يقدّم واجهته الخاصة التي تخدمها تطبيقات Jellyfin الرسمية (Android وiOS وAndroid TV وRoku وwebOS وTizen وXbox) وعملاء خارجيون يدعمونها أصلًا مثل Infuse. لا تتحرك ملفات الوسائط: تتغير طبقة الخادم فقط.
ثغرات Plex في 2026: حدّثه أثناء الانتقال
تستغرق الهجرة بضع ساعات أو بضعة أيام، ويظل Plex يعمل خلالها. لا تتركه على إصدار قديم: حصلت ثغرتان مصحّحتان ابتداءً من البنية 1.43.3.10861 على معرّفاتهما في 23 سبتمبر 2026.
CVE-2026-96656 (CVSS 3.1: 7.2) تتيح لحساب مسؤول كتابة ملفات تُنفَّذ عند التحميل: يُنسخ التفضيل TranscoderH264Options كما هو داخل خيارات x264، وتُحمَّل مكتبات .so عند الإقلاع دون أي تحقق من التوقيع أو من صلاحية التنفيذ. وقد أدرجتها CISA في 20 أكتوبر 2026 ضمن فهرس الثغرات المستغلة فعليًا.
CVE-2026-96651 (CWE-22، CVSS 3.1: 6.5) ثغرة اجتياز مسارات على /system/agents/media/get: تستطيع جلسة موثّقة قراءة أي ملف يصل إليه مستخدم النظام الخاص بـPlex، بما في ذلك رمز PlexOnlineToken الذي يمنح السيطرة على الحساب والخادم.
إذا رُبطت الثغرتان معًا، فإنهما تقودان من سرقة الجلسة إلى تنفيذ التعليمات البرمجية. حدّث Plex قبل البدء، وأبقِ منفذه مغلقًا أمام الإنترنت طوال الانتقال، وطبّق تصحيحات نظام الخادم بالتوازي (راجع تحديثات الأمان التلقائية على Debian وUbuntu). ومع Jellyfin تبقى العادة نفسها: تابع الإصدارات وحدّث الصورة بانتظام.
ما يقدمه Jellyfin عمليًا
- لا جدار مدفوع — الوصول عن بُعد وحسابات متعددة المستخدمين والترميز متاحة دون أي اشتراك.
- لا حساب إلزامي — لا يتطلب الإعداد ربط خدمة خارجية؛ إدارة المستخدمين محلية بالكامل.
- لا قياس استخدام — لا تُرسل بيانات الاستخدام إلى طرف ثالث بشكل افتراضي؛ الكود قابل للتدقيق (GPL-2.0).
- عملاء متوافقون — تتصل تطبيقات Jellyfin الرسمية والعملاء الخارجيون مثل Infuse بالخادم عبر عنوانه، دون حساب خارجي ولا خدمة ترحيل.
- ملفات الوسائط تبقى في مكانها — فقط قاعدة بيانات البيانات الوصفية تحتاج إلى إعادة بناء؛ التخزين غير متأثر.
- عملاء أصليون متاحون — Android وiOS وAndroid TV وApple TV والمتصفح والعشرات من التطبيقات تدعم Jellyfin أصليًا.
- ترميز الأجهزة مدعوم — يمكن تكوين Intel Quick Sync وVAAPI وNVENC لتقليل حمل CPU على البث عالي الدقة.
- مجتمع نشط وتحديثات منتظمة — إصدارات متكررة ومكوّنات إضافية مجتمعية ووثائق رسمية شاملة.
المتطلبات قبل البدء
تفترض الهجرة أن لديك بالفعل VPS مع تثبيت Docker. يعمل Jellyfin في وضع Direct Play (الأجهزة تقرأ الملف دون ترميز) بشكل جيد مع 2 vCPU و2 GB RAM. إذا توقعت ترميزًا برمجيًا بدقة 1080p، احسب 4 vCPU على الأقل لكل بث متزامن: Jellyfin كثيف الاستخدام للـCPU بدون تسريع الأجهزة. للدقة 4K، يُنصح بشدة بوحدة معالجة رسومات أو شريحة Intel مع Quick Sync.
التخزين هو العامل الأساسي للحجم: مكتبة وسائط متوسطة الحجم تزن عدة تيرابايت. ملفاتك تبقى في مكانها — لا شيء تنسخه. على صعيد الشبكة، يجب أن يشير نطاقك إلى VPS ويكون المنفذ 8096 متاحًا داخليًا (يتولى البروكسي العكسي التعرض عبر HTTPS).
باختصار: VPS بنظام Linux (Debian 12 أو Ubuntu 22.04+)، وDocker مع docker compose الإصدار 2، ونطاق مُكوَّن، وبروكسي عكسي (Caddy أو Nginx)، ووصول SSH للخادم.
قبل أي تعديل، التقط لقطة (snapshot) للخادم من لوحة الاستضافة: إنها شبكة الأمان التي تعيدك إلى حالة Plex في دقائق إذا تعثّر الانتقال. آخر إصدار من Jellyfin حتى 7 نوفمبر 2026 هو 12.4 (صدر في 26 أكتوبر 2026)، والصورة jellyfin/jellyfin:latest تتبعه.
الهجرة خطوة بخطوة
التقاط لقطة للخادم
أنشئ لقطة من لوحة مزوّد الاستضافة (أو عبر واجهته البرمجية) قبل أي تعديل. لا تستغرق العملية سوى بضع دقائق، وتحمي إعدادات Plex والبيانات الوصفية والنظام معًا. لا تتجاوز هذه الخطوة: فهي ما يجعل كل ما يليها قابلًا للتراجع.
تصدير بيانات Plex قبل إيقاف الخدمة
قبل أي شيء، صدّر مكتبة Plex بينما لا تزال تعمل. من خادم Plex، انسخ مجلد البيانات الوصفية (
~/.config/Plex Media Server/على Linux، أو/var/lib/plexmediaserver/حسب التثبيت). تتيح لك هذه النسخة الاحتياطية استعادة قوائم التشغيل وتقدم المشاهدة في حال قررت العودة.ملفات الوسائط (
/mnt/media/films،/mnt/media/series، إلخ) لا تتحرك — لا تنقلها.إيقاف Plex بشكل نظيف
أوقف حاوية أو خدمة Plex:
docker compose stop plexأو إذا كان Plex يعمل عبر systemd:
systemctl stop plexmediaserverأفرغ المنفذ 32400؛ سيستخدم Jellyfin المنفذ 8096 افتراضيًا، يمكنك ترك منفذ Plex حرًا أو إغلاقه في جدار الحماية.
إنشاء بنية مجلدات Jellyfin
أنشئ مجلدات التكوين والذاكرة المؤقتة التي سيستخدمها Jellyfin:
mkdir -p /opt/jellyfin/config /opt/jellyfin/cacheوسائطك تبقى في موقعها الأصلي — لا تنقلها. سيُعلن عنها Jellyfin كمكتبات في المعالج الأولي.
كتابة ملف docker-compose.yml
أنشئ
/opt/jellyfin/docker-compose.ymlبالمحتوى التالي:cat > /opt/jellyfin/docker-compose.yml << 'EOF' services: jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin restart: unless-stopped environment: - JELLYFIN_PublishedServerUrl=https://media.yourdomain.com volumes: - /opt/jellyfin/config:/config - /opt/jellyfin/cache:/cache - /mnt/media:/media:ro ports: - "127.0.0.1:8096:8096" EOFاضبط
/mnt/mediaعلى المسار الفعلي لوسائطك. العلامة:ro(قراءة فقط) ممارسة جيدة: Jellyfin لا يحتاج للكتابة في ملفاتك.تشغيل Jellyfin وتشغيل المعالج الأولي
شغّل الحاوية:
docker compose -f /opt/jellyfin/docker-compose.yml up -dافتح
http://your-ip:8096في المتصفح. يطلب المعالج إنشاء حساب مشرف محلي (لا عنوان بريد إلكتروني خارجي مطلوب)، ثم الإعلان عن مكتباتك. أشر إلى مجلدات الوسائط الحالية — يُطلق Jellyfin فحصًا تلقائيًا ويُعيد بناء البيانات الوصفية من TheMovieDB وTheTVDB.تكوين البروكسي العكسي مع SSL
اعرض Jellyfin عبر HTTPS باستخدام Caddy أو Nginx. مثال تكوين Caddy (ملف
Caddyfile):media.yourdomain.com { reverse_proxy 127.0.0.1:8096 }Caddy يحصل على شهادة Let's Encrypt ويجددها تلقائيًا. مع Nginx، أضف رؤوس
X-Real-IPوX-Forwarded-Forالتي يستخدمها Jellyfin لسجلات الوصول.إعادة تكوين العملاء وتفعيل الوصول عن بُعد
في Jellyfin (لوحة التحكم ← الشبكة)، تحقق من صحة العنوان المنشور (
JELLYFIN_PublishedServerUrl). ثبّت تطبيق Jellyfin على كل جهاز (Android وiOS وAndroid TV وRoku وأجهزة تلفاز LG وSamsung وXbox) وأضف الخادم عبر عنوانه. على iPhone وiPad وApple TV، يستطيع Infuse أيضًا الاتصال بـJellyfin: وفقًا لـتوثيق Firecore، استخدم «إضافة خادم وسائط» واختر Jellyfin مع تسجيل دخول مباشر إلى الخادم. أما Plexamp فيبقى مشغّلًا خاصًا بـPlex: تمرّ الموسيقى عبر Navidrome (انظر أدناه).اختبر الوصول من اتصال الهاتف المحمول (لا من شبكة Wi-Fi المنزلية) للتأكد من أن الوصول عن بُعد يعمل دون قيود.
استعادة سجل المشاهدة (اختياري)
لا يقرأ Jellyfin قاعدة بيانات SQLite الخاصة بـPlex. لسجل «تمت المشاهدة / قيد المشاهدة»، تزامن الأداة المجتمعية JellyPlex-Watched الحالات محليًا بين Plex وJellyfin، مستخدمًا تلو الآخر، بمطابقة الملفات حسب الاسم وحسب معرّفات البيانات الوصفية (TMDB وTVDB). شغّلها والخادمان قيد التشغيل: أعد تشغيل Plex طوال مدة المزامنة، ثم أوقفه من جديد.
تُعاد قوائم تشغيل الفيديو يدويًا في واجهة Jellyfin، وتكفي بضع دقائق لاستخدام عائلي.
إبقاء Plex احتياطيًا ثم إزالته
اترك Plex متوقفًا لكن مثبّتًا مدة 48 ساعة على الأقل، ريثما تتحقق من عمل Jellyfin على كل أجهزة المنزل. وحين تتأكد، أزل الحزمة وإعداداتها:
systemctl disable --now plexmediaserver apt remove --purge plexmediaserver rm -rf /var/lib/plexmediaserverمع Docker، يؤدي الأمر
docker compose downثم حذف مجلد إعدادات Plex المهمة نفسها. وتبقى لقطة الخطوة الأولى وسيلة التراجع حتى تلك اللحظة.
نشر Jellyfin عبر Nginx بدلًا من Caddy
إذا كان خادمك يخدم مواقع أخرى عبر Nginx، فاحتفظ به. يتبع الإعداد أدناه التوجيهات التي يوصي بها توثيق Jellyfin: إعادة توجيه HTTP إلى HTTPS، وترويسات X-Forwarded-*، وتعطيل التخزين المؤقت للبث، وكتلة /socket مخصّصة لاتصالات WebSocket التي يستخدمها العملاء للتشغيل المتزامن والإشعارات.
# /etc/nginx/sites-available/jellyfin
server {
listen 80;
server_name media.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name media.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/media.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/media.yourdomain.com/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2;
client_max_body_size 20M;
add_header X-Content-Type-Options "nosniff";
location / {
proxy_pass http://127.0.0.1:8096;
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 X-Forwarded-Host $http_host;
proxy_buffering off;
}
location /socket {
proxy_pass http://127.0.0.1:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}احصل على الشهادة عبر Certbot (أبقِ كتلة المنفذ 80 لعمليات التجديد) أو عبر شبكة CDN بوضع Full (strict). فعّل الموقع ثم أعد تحميل Nginx:
ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginxلا تنشر المنفذ 8096 مباشرة على الإنترنت أبدًا: يضمن الربط 127.0.0.1:8096:8096 في ملف Compose ألا يصل إليه سوى Nginx. ولـNavidrome، كرّر الكتلة مع نطاق فرعي آخر والمنفذ 4533.
وماذا عن الموسيقى؟ الانتقال من Plexamp إلى Navidrome
يستطيع Jellyfin تشغيل الموسيقى، لكنها ليست نقطة قوته. إذا كنت تستمع إلى مكتبتك عبر Plexamp، فاعلم أن جدار الدفع في Plex يستهدف الفيديو فقط: وفقًا لصفحة عروض Plex، تبقى الموسيقى والصور متاحة عن بُعد في Plexamp وPlex Photos دون اشتراك. لذلك يصبح Navidrome مفيدًا حين تريد مغادرة Plex كليًا. إنه خادم موسيقى حر (GPL-3.0، مكتوب بلغة Go) ومتوافق مع واجهة Subsonic: يتصل به كل عملاء Subsonic وMadsonic وAirsonic على الهاتف والحاسوب. وهو يحوّل الترميز فوريًا، ويدعم Opus، ويستورد قوائم .m3u تلقائيًا. الإصدار الحالي حتى 7 نوفمبر 2026 هو 0.64.2. يشرح دليل استضافة Navidrome على خادم VPS تثبيتًا كاملًا؛ وإليك الانتقال من Plex.
نقل مكتبة الموسيقى إلى Navidrome
تدقيق وسوم الملفات
يرتّب Navidrome الموسيقى حسب البيانات الوصفية المضمّنة في الملفات، لا حسب المجلدات. افحص عيّنة:
find /mnt/media/musique -name '*.mp3' | head -20 | xargs -d '\n' id3v2 -lيجب ملء الحقول
TPE1(الفنان) وTALB(الألبوم) وTIT2(العنوان). يُستورد الملف الخالي من هذه الوسوم، لكنه يظهر بشكل سيئ. ولتصحيح الوسوم دفعةً واحدة، تعيد الأداة الحرةbeetsوسم المجموعة اعتمادًا على قاعدة MusicBrainz.إنشاء حساب المسؤول وربط العملاء
افتح Navidrome خلف البروكسي العكسي (نطاق فرعي مخصّص، والمنفذ
4533داخليًا). أول حساب يُنشأ هو حساب المسؤول. يبدأ الفحص الأول للمكتبة تلقائيًا عند تشغيل الحاوية؛ تابعه في السجلات (docker logs navidrome). على الهاتف، يكفي أي عميل متوافق مع Subsonic: أدخل عنوان HTTPS واسم المستخدم وكلمة المرور.استعادة قوائم التشغيل
يستورد Navidrome تلقائيًا ملفات
.m3uالتي يجدها في المكتبة ويحافظ على تزامنها. صدّر إذن قوائم Plex بصيغة.m3uبمسارات نسبية إلى جذر الموسيقى، وضعها في/mnt/media/musique: ستظهر في الفحص التالي. وإلا فأعد إنشاءها في واجهة الويب، التي تقبل أيضًا سحب المقاطع وإفلاتها.
Plex وJellyfin وNavidrome: مقارنة وظيفية
مرّر الجدول أفقيًا
| الميزة | Plex (دون Pass) | Jellyfin | Navidrome |
|---|---|---|---|
| البث المحلي (شبكة المنزل) | نعم | نعم | نعم (موسيقى) |
| بث الفيديو عن بُعد | مدفوع (Remote Watch Pass بـ2.99 دولار شهريًا، أو Plex Pass) | مجاني | لا ينطبق (صوت فقط) |
| بث الموسيقى عن بُعد | مجاني في Plexamp | مجاني | مجاني |
| حساب خارجي إلزامي | نعم (plex.tv) | لا | لا |
| رخصة الكود | مملوكة | GPL-2.0 | GPL-3.0 |
| العملاء | تطبيقات Plex وPlexamp | تطبيقات Jellyfin الرسمية وInfuse | أي عميل متوافق مع Subsonic |
| الترميز بالعتاد | مدفوع (يتطلب Plex Pass) | مجاني (Quick Sync وVAAPI وNVENC) | لا ينطبق (تحويل صوتي برمجي) |
| الضيوف في البث عن بُعد | Plex Pass للمسؤول أو Remote Watch Pass لكل ضيف | دون سقف، حسابات محلية | دون سقف، حسابات محلية |
التكوين الموصى به بعد التثبيت
بمجرد اكتمال الهجرة، بعض الإعدادات تحسّن التجربة اليومية.
البيانات الوصفية. يستخدم Jellyfin TheMovieDB وTheTVDB افتراضيًا. إذا لم تُعرَّف بعض الأفلام أو المسلسلات تلقائيًا، أعد تسمية الملفات وفق الاصطلاح Title (Year)/Title (Year).mkv للأفلام وSeries/Season 01/Series - S01E01.mkv للمسلسلات.
الترجمات. فعّل OpenSubtitles أو الترجمات المدمجة من لوحة التحكم ← المكوّنات الإضافية. الاسترداد تلقائي أثناء فحص المكتبة.
ترميز الأجهزة. إذا كان VPS الخاص بك يحتوي على شريحة Intel، فعّل VAAPI من لوحة التحكم ← التشغيل ← الترميز. هذا يقلل بشكل ملحوظ من حمل CPU أثناء تحويلات البث.
تأمين الوصول إلى Jellyfin
بمجرد وضعه خلف البروكسي العكسي، يعرض Jellyfin شاشة تسجيل الدخول للإنترنت كله. بعض الإجراءات منذ اليوم الأول: أنشئ حسابًا لكل شخص من لوحة التحكم ← المستخدمون، دون صلاحيات إدارية لحسابات العائلة، واحذف الحسابات التي لم تعد مستخدمة. لا يتضمن Jellyfin مصادقة ثنائية مدمجة: إن أردتها، فضع مزوّد هوية (Authelia أو Authentik) أمام الواجهة. قيّد الوصول إلى لوحة التحكم بالشبكة المحلية حيثما أمكن، ومع Nginx ضع حدًا للمعدل على /Users/AuthenticateByName لإبطاء هجمات التخمين. وأخيرًا، حافظ على تحديث الصورة: docker compose pull && docker compose up -d يجلب تصحيحات الأمان.
استكشاف الأخطاء: أخطاء شائعة بعد الهجرة
بعض الأخطاء تظهر باستمرار أثناء الهجرة من Plex إلى Jellyfin.
Connection refused على المنفذ 8096. الحاوية تعمل لكن لا شيء يستجيب. تحقق من أن تعيين المنفذ هو 127.0.0.1:8096:8096 وليس 0.0.0.0:8096:8096 إذا كنت تريد التوجيه عبر البروكسي العكسي. أمر التشخيص: docker logs jellyfin.
البيانات الوصفية لا تُحمَّل. قد يستغرق الفحص الأولي من 10 دقائق إلى عدة ساعات حسب حجم المكتبة. راقب التقدم من لوحة التحكم ← النشاط. إذا بقيت ملفات بدون ملصقات، تحقق من اصطلاح التسمية وأجبر فحصًا جديدًا.
الوصول عن بُعد لا يعمل. إذا كانت https://media.yourdomain.com تستجيب من الخادم لكن ليس من الخارج، تحقق من أن جدار الحماية يسمح بالمنفذ 443 (ufw allow 443)، وأن DNS يشير إلى IP الصحيحة، وأن JELLYFIN_PublishedServerUrl يتطابق تمامًا مع عنوان URL العام المُكوَّن في البروكسي العكسي.
لا يعثر Infuse على الخادم. أضفه بوصفه خادم Jellyfin لا خادم Plex، واكتب عنوان HTTPS الكامل يدويًا. لا يعمل الاكتشاف التلقائي إلا على الشبكة المحلية؛ أما عن بُعد فالعنوان اليدوي هو الطريق الموثوق الوحيد.
ترميز CPU يرتفع إلى 100%. بدون تسريع الأجهزة، بث واحد بدقة 4K قد يُشبع عدة أنوية. انتقل إلى VAAPI إذا كان معالجك يدعم ذلك، أو شجّع مستخدميك على تفعيل Direct Play في إعدادات عملائهم.
تبقى المكتبة فارغة بعد الفحص الأول. المسار المركّب في Docker لا يطابق المجلد الحقيقي. تحقق مما تراه الحاوية، ثم من حالة الخدمة عبر البروكسي:
docker exec jellyfin ls /media
curl -s https://media.yourdomain.com/healthإذا لم يُظهر ls شيئًا، فصحّح المجلد في docker-compose.yml وأعد تشغيل الحاوية؛ ويجب أن يجيب /health بـHealthy.
يفشل الترميز برسالة خطأ من ffmpeg. السبب في الغالب هو تفعيل الترميز بالعتاد على خادم لا يتيح وحدة GPU للحاوية. عطّل التسريع من لوحة التحكم ← التشغيل، واترك Jellyfin يحوّل الترميز برمجيًا: على خادم دون GPU، هذا هو الإعداد الطبيعي.
قراءة إضافية وأدلة ذات صلة
تغطي هذه الهجرة استبدال Plex، لكن Jellyfin يندرج ضمن منظومة أوسع. إذا كنت تبدأ من الصفر (دون Plex سابق)، فإن دليل استضافة Jellyfin على خادمك الخاص يغطي التثبيت الأولي من البداية. ولمقارنة وظيفية معمّقة بين المنصتين، راجع Jellyfin مقابل Plex: أي خادم وسائط تختار. وللموسيقى، يذهب دليل Navidrome أبعد من الانتقال الموصوف هنا.
إذا كانت هذه الهجرة جزءًا من توجه أوسع نحو الاستضافة الذاتية لخفض تكاليف SaaS، فإن استضافة Ghost على خادمك تغطي حالة شائعة أخرى. المنطق واحد: برنامج حر، وخادم VPS، ووصول تتحكم أنت في قواعده.
التوثيق الرسمي لـJellyfin (jellyfin.org/docs) شامل ويُحدَّث باستمرار، وهو المرجع للحالات المتقدمة (الترميز بالعتاد وLDAP والإضافات والبروكسي العكسي المتقدم).