[{"data":1,"prerenderedAt":189},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-jellyfin-على-خادمك-الافتراضي-الخاص-vps-ma-ar":6,"promo-bar-likely":188},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-jellyfin-على-خادمك-الافتراضي-الخاص-vps-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":127,"ctaBody":128,"ctaButton":129,"ctaUrl":130,"relatedPosts":131},84,"استضافة-jellyfin-على-خادمك-الافتراضي-الخاص-vps",{"fr":12,"en":13,"ar":10,"es":14},"heberger-jellyfin","host-jellyfin-on-your-own-vps","alojar-jellyfin-en-un-vps","‏استضافة Jellyfin على VPS: الدليل الشامل 2026","‏انشر Jellyfin على خادمك الخاص باستخدام Docker ونظام nginx مع HTTPS وإدارة الإضافات والتخزين. دليل كامل محدث لعام 2026.",20,11,false,"2026-03-28T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-jellyfin-poster.svg",{"categorySlug":34,"appSlug":35},"التعاون-والإنتاجية","jellyfin","Jellyfin هو خادم الوسائط الحر الذي كان ينبغي أن يكونه Plex: بلا اشتراك، ولا خادم مركزي يوثّق أجهزتك، ولا جمع للبيانات، بل مكتبتك وحدها على جهازك، متاحة من أي شاشة. وقد رفعت منصات البث المركزية أسعارها في السنوات الأخيرة. يرافقك هذا الدليل من تثبيت Docker إلى ضبط nginx، مع ثلاث مشكلات تتكرر في المنتديات: الإضافات التي تختفي بعد التحديث، واختيار التخزين عندما تكبر مكتبتك، والانتقال إلى إصدار رئيسي جديد قد لا تنتهي فيه عملية ترحيل قاعدة البيانات.",[38,42,54,57,79,82,85,88,91,94,118,121,124],{"type":39,"title":40,"body":41},"h2","لماذا Jellyfin في 2026","تغيّر مشهد خوادم الوسائط الشخصية خلال سنوات قليلة. رفعت Plex سعر اشتراكها مدى الحياة (Lifetime Pass) في 2025، ثم ضاعفته ثلاث مرات في 1 يوليو 2026 (من 249.99 إلى 749.99 دولارًا، وهي زيادة أُعلنت في مايو 2026)، فصار الدخول مكلفًا للاستخدام العائلي. أما Emby، البديل التاريخي الآخر، فيعمل هو أيضًا بنموذج مجاني جزئيًا: بعض الميزات الأساسية مثل الترميز عبر العتاد وDVR والتنزيل للمشاهدة دون اتصال على الجوال محجوزة لمشتركي Emby Premiere.\n\nوُلد Jellyfin عام 2018 كفرع من Emby، تحديدًا ليبقى حرًا. يمنع ترخيص GPLv2 إغلاق الشيفرة من جديد: فإذا أعاد مساهم إدخال شيفرة مملوكة، يحق للمستخدمين قانونيًا أن يتفرعوا عنها. وهذه ضمانة بنيوية لا توفرها Plex ولا Emby.\n\nمن جهة الإصدارات، خلفت السلسلة ‎12.x السلسلة ‎10.11: صدر الإصدار ‎12.0 في 8 سبتمبر 2026، والإصدار ‎12.4 الذي نُشر في 26 أكتوبر 2026 هو آخر إصدار مستقر لوحظ وقت كتابة هذا الدليل. وللقفزة بين إصدارين رئيسيين نتيجة عملية: ترحيل لقاعدة البيانات قد يطول كثيرًا، نعالجه أدناه في هذا الدليل.\n\nومن جهة الميزات، يغطي Jellyfin تقريبًا كل الاستخدامات الشائعة: بث تكيفي، وترميز برمجي وعتادي، وتطبيقات أصلية لـ iOS وAndroid وAndroid TV وRoku، والتلفزيون المباشر وتسجيل DVR، وترجمات تلقائية، ومصادقة موحدة SSO عبر OIDC وLDAP، ونظام إضافات يوسّع التطبيق دون المساس بالنواة.",{"type":43,"title":44,"items":45},"ul","ما يقدمه Jellyfin",[46,47,48,49,50,51,52,53],"**البث عبر DLNA وHLS** — يرسل الأفلام والمسلسلات والموسيقى إلى جميع أجهزتك، بما فيها التلفزيونات التي بلا تطبيق أصلي.","**تطبيقات رسمية** — iOS وAndroid وAndroid TV وRoku وFire TV وKodi، وواجهة ويب متجاوبة لكل ما سواها.","**الترميز الفوري** — يحوّل التنسيق المصدر إذا كان الجهاز المستهدف لا يدعمه، برمجيًا أو عبر وحدة المعالجة الرسومية.","**التلفزيون المباشر وتسجيل DVR** — وصّل موالفًا عبر USB أو مصدر IPTV لمشاهدة البث المباشر وتسجيله.","**SSO عبر OIDC وLDAP** — اربط دليل المستخدمين الحالي أو موفر هوية مثل Authentik أو Keycloak.","**ترجمات تلقائية** — إضافة OpenSubtitles، واستخراج المسارات المضمنة، وعرض WebVTT.","**إضافات موسّعة** — تكاملات LastFM، وscrobbling، وبيانات الموسيقى الوصفية، والمقاطع الدعائية، وإدارة المجموعات.","**لا سحابة مملوكة إطلاقًا** — لا مصادقة عبر خوادم Plex، ولا بيانات تشغيل تُرسل إلى طرف ثالث.",{"type":39,"title":55,"body":56},"المتطلبات الرقمية حسب حالة الاستخدام","تختلف الاحتياجات كثيرًا بحسب ما تنوي فعله.\n\n**SD و1080p بلا ترميز (التشغيل المباشر)**: إذا كانت أجهزتك تشغّل ترميز المصدر (‎H.264 أو ‎H.265) أصلًا، فلا يرمّز Jellyfin شيئًا، بل يقدّم الملف كخادم ملفات ذكي. يكفي نواتان افتراضيتان و2 غيغابايت من الذاكرة لمكتبة من مئات العناوين. وهذه أكثر حالات الاستخدام شيوعًا على VPS.\n\n**1080p مع ترميز برمجي**: عندما لا يدعم العميل الترميز أو عندما تحدّ من معدل البت، يرمّز Jellyfin فوريًا. يستهلك تدفق واحد بدقة 1080p و‎H.264 ما بين 2 و4 أنوية بحسب دقة المصدر. استهدف 4 أنوية و4 غيغابايت ذاكرة كحد أدنى لمستخدمَين متزامنين.\n\n**4K HDR مع ترميز برمجي**: تحويل HDR إلى SDR للشاشات التي لا تدعم HDR (tone-mapping) شديد الاستهلاك. قد يُشبع تدفق واحد 4K HDR ثماني أنوية. لا تناسب هذه الحالة VPS سحابيًا عاديًا؛ فضّل التشغيل المباشر 4K (يجب أن يدعم العميل HEVC\u002FHDR) أو خادمًا مخصصًا بوحدة رسومية.\n\n**الترميز عبر العتاد (VAAPI\u002FNVENC)**: يخفّض حمل المعالج بقدر كبير، لكنه يتطلب الوصول إلى الجهاز `\u002Fdev\u002Fdri` أو بطاقة NVIDIA. لا تتيح خوادم VPS السحابية العادية وحدة رسومية؛ فهذا الخيار محجوز للخوادم المخصصة أو لخوادم VPS الرسومية المتخصصة.\n\n**قرص لترقية الإصدار**: احسب مساحة تكفي لنسخة كاملة من مجلد الإعدادات (بما فيه قاعدة البيانات) بجانب الأصل. تشترط وثائق النسخ الاحتياطي في Jellyfin 5 غيغابايت حرة على الأقل للنسخة المدمجة، وأكثر إن أدرجت الترجمات وtrickplay.",{"type":58,"title":59,"steps":60},"steps","تثبيت Jellyfin على VPS بنظام Ubuntu\u002FDebian باستخدام Docker Compose",[61,64,67,70,73,76],{"title":62,"body":63},"تجهيز الـ VPS وتثبيت Docker","اتصل بالـ VPS عبر SSH (Ubuntu ‎22.04 أو Debian 12). حدّث النظام ثم ثبّت Docker:\n\n`apt update && apt upgrade -y`\n`curl -fsSL ‎https:\u002F\u002Fget.docker.com | sh`\n`systemctl enable --now docker`\n\nتحقق من عمل Docker: `docker info`. أجرِ هذا التحديث الآن والخادم ما زال فارغًا: فلاحقًا، على جهاز يستضيف Jellyfin مثبتًا بحزمة، قد يعيد `apt upgrade` تشغيل الخدمة في أسوأ لحظة (راجع قسم ترقية الإصدار).",{"title":65,"body":66},"إنشاء شجرة المجلدات","اختر مكان حفظ إعدادات Jellyfin ووسائطك:\n\n`mkdir -p \u002Fopt\u002Fjellyfin\u002F{config,cache}`\n`mkdir -p \u002Fmnt\u002Fmedia\u002F{films,series,music}`\n`chown -R 1000:1000 \u002Fopt\u002Fjellyfin \u002Fmnt\u002Fmedia`\n\nالمعرّف UID 1000 هو الذي يمنحه ملف Compose أدناه لحاوية Jellyfin (المعامل `user`، اختياري بحسب الوثائق: بدونه تعمل الحاوية بصلاحية root).",{"title":68,"body":69},"كتابة ملف ‎docker-compose.yml","أنشئ الملف `‎\u002Fopt\u002Fjellyfin\u002Fdocker-compose.yml`. تحت `services:` ثم `jellyfin:` (إزاحة YAML بمسافتين لكل مستوى) ضع هذه الأسطر:\n\n`image: ‎jellyfin\u002Fjellyfin:12.4`\n`container_name: jellyfin`\n`user: \"1000:1000\"`\n`ports:` ثم تحتها `- \"127.0.0.1:8096:8096\"`\n`restart: unless-stopped`\n`volumes:` ثم تحتها `- \u002Fopt\u002Fjellyfin\u002Fconfig:\u002Fconfig` و`- \u002Fopt\u002Fjellyfin\u002Fcache:\u002Fcache` و`- \u002Fmnt\u002Fmedia:\u002Fmedia:ro`\n`environment:` ثم تحتها `- JELLYFIN_PublishedServerUrl=‎https:\u002F\u002Fjellyfin.your-domain.com`\n\n**لا تكتب `latest`.** بحسب الوثائق الرسمية، يتتبع هذا الوسم «دائمًا آخر إصدار مستقر، بما في ذلك عبر قفزات الإصدارات الرئيسية والفرعية»: فيكفي حينها أمر `docker compose pull` بسيط لإطلاق ترحيل لقاعدة البيانات لم تستعد له. ثبّت إصدارًا: الوسم `‎X.Y` (مثل `‎12.4`) يتبع تصحيحات ذلك الفرع، والوسم `‎X.Y.Z` يجمّد إصدارًا بعينه. تحقق من الوسم الحالي في سجل الصور قبل نسخ `‎12.4`.\n\nلا يُنشَر المنفذ إلا على `127.0.0.1`: فلا يصل إليه إلا nginx على الجهاز نفسه، ولا يمكن بلوغ Jellyfin عبر HTTP غير مشفّر على عنوان IP العام. والوضع `network_mode: host` لا يلزم إلا لاكتشاف DLNA بحسب الوثائق؛ وDLNA لا يعمل إلا على شبكة محلية، وعلى VPS قد يكشف هذا الوضع المنفذ 8096 على كل الواجهات.",{"title":71,"body":72},"تشغيل الحاوية","`cd \u002Fopt\u002Fjellyfin`\n`docker compose up -d`\n`docker compose logs -f`\n\nيستمع Jellyfin على المنفذ 8096. انتظر ظهور السطر `Startup complete` في السجلات قبل المتابعة.",{"title":74,"body":75},"ضبط nginx كوكيل عكسي","ثبّت nginx وcertbot: `apt install -y nginx certbot python3-certbot-nginx`\n\nأنشئ الملف `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fjellyfin` بكتلة `server` واحدة على المنفذ 80: `listen 80;` و`server_name ‎jellyfin.your-domain.com;`، ثم داخل `location \u002F {` ضع `proxy_pass http:\u002F\u002Flocalhost: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;`، ثم لدعم WebSockets أضف `proxy_http_version ‎1.1;` و`proxy_set_header Upgrade $http_upgrade;` و`proxy_set_header Connection \"upgrade\";`. لا تكتب كتلة المنفذ 443 الآن: ستشير أسطر `ssl_certificate` فيها إلى ملفات لا توجد قبل تشغيل certbot، وسيرفض nginx تحميل الإعدادات.\n\nفعّل الموقع وتحقق منه، ثم احصل على الشهادة:\n\n`ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjellyfin \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F`\n`nginx -t && systemctl reload nginx`\n`certbot --nginx -d ‎jellyfin.your-domain.com`\n\nتحصل إضافة nginx في certbot على الشهادة وتحفظها في `‎\u002Fetc\u002Fletsencrypt\u002Flive\u002Fjellyfin.your-domain.com\u002F` (`fullchain.pem` و`privkey.pem`)، ثم تثبّتها: تضيف بنفسها إلى الكتلة الاستماع على المنفذ 443 وسطرَي `ssl_certificate` و`ssl_certificate_key`، مع إعادة التوجيه من HTTP إلى HTTPS المفعّلة افتراضيًا. تحقق من النتيجة بالأمر `nginx -t`.\n\nإذا فضّلت `certbot certonly --nginx -d ‎jellyfin.your-domain.com`، الذي يحصل على الشهادة دون المساس بالإعدادات، فاكتب بعد ذلك كتلة المنفذ 443 بنفسك: `listen 443 ssl;` وقيمة `server_name` نفسها و`ssl_certificate ‎\u002Fetc\u002Fletsencrypt\u002Flive\u002Fjellyfin.your-domain.com\u002Ffullchain.pem;` و`ssl_certificate_key ‎\u002Fetc\u002Fletsencrypt\u002Flive\u002Fjellyfin.your-domain.com\u002Fprivkey.pem;` و`location \u002F` نفسها. ثم استبدل `location \u002F` في كتلة المنفذ 80 بالسطر `return 301 https:\u002F\u002F$host$request_uri;`، ونفّذ `nginx -t && systemctl reload nginx`.",{"title":77,"body":78},"معالج الإعداد الأولي","افتح `‎https:\u002F\u002Fjellyfin.your-domain.com` في متصفحك. يرشدك المعالج إلى:\n\n1. إنشاء حساب المدير\n2. إضافة مكتبتك (وجّهها إلى `\u002Fmedia\u002Ffilms` و`\u002Fmedia\u002Fseries`)\n3. اختيار اللغة ومزوّدي البيانات الوصفية (TheMovieDB للأفلام وTheTVDB للمسلسلات)\n\nأجرِ مسحًا كاملًا بعد انتهاء الإعداد: لوحة التحكم > المكتبات > مسح كل المكتبات.",{"type":39,"title":80,"body":81},"الإضافات غير موجودة — تحقق من المستودع","هذا من أكثر الأسئلة تكرارًا بعد ترقية الإصدار: يظهر كتالوج الإضافات فارغًا، أو تعرض كل إضافة الرسالة «An error occurred while getting the plugin details from the repository»، بينما بقية النسخة تعمل.\n\n**ما يقوله المشروع الأصلي.** تصف المشكلة #16654 على GitHub («No longer access plugins»، المبلَّغ عنها على الإصدار ‎10.11.8) هذا الخطأ رغم أن عناوين المستودعات لدى صاحبها كانت صحيحة. أغلقها روبوت دون إصلاح («not planned») لانعدام النشاط. ويقترح مساهم فيها أن بعض الدول تحجب `‎raw.githubusercontent.com` الذي يستضيف عدة manifests لإضافات أطراف ثالثة؛ ويروي مستخدم أنه حلّ حالته بإلغاء تثبيت الإضافات ثم إعادة التشغيل ثم إعادة تثبيتها. لا يوجد سبب واحد مؤكَّد: التفسير السابق في هذا الدليل، أي تغيّر العنوان بين إصدارين، ليس ما تقوله المشكلة وقد حُذف.\n\n**الفحوصات بالترتيب**:\n\n1. افتح لوحة التحكم > الإضافات > المستودعات. يجب أن يشير المستودع الرسمي المستقر إلى `‎https:\u002F\u002Frepo.jellyfin.org\u002Ffiles\u002Fplugin\u002Fmanifest.json`. وإن كنت قد انتقلت إلى المستودع «unstable» فارجع إلى المستقر\n2. من الـ VPS، تحقق من أن الـ manifest يستجيب: `curl -sI ‎https:\u002F\u002Frepo.jellyfin.org\u002Ffiles\u002Fplugin\u002Fmanifest.json`. ولمستودع طرف ثالث مستضاف على GitHub اختبر أيضًا `curl -sI ‎https:\u002F\u002Fraw.githubusercontent.com`\n3. اضغط «حفظ» ثم أعد تشغيل Jellyfin لإجبار البيانات الوصفية على إعادة التحميل: `docker compose -f ‎\u002Fopt\u002Fjellyfin\u002Fdocker-compose.yml restart`\n4. كحل أخير، ألغِ تثبيت الإضافات المعنية، وأعد التشغيل، وأعد تثبيتها، ثم أعد التشغيل مرة أخرى",{"type":39,"title":83,"body":84},"استراتيجية التخزين لـ Jellyfin على VPS","التخزين هو غالبًا القيد الرئيسي. أحجام تقريبية يجدر بك معرفتها (تقديرات معتادة):\n\n- فيلم 1080p بصيغة MKV و‎H.264: من 5 إلى 15 غيغابايت بحسب المدة ومعدل البت\n- فيلم 4K HDR و‎H.265: من 15 إلى 60 غيغابايت، وأكثر في نسخ Blu-ray المُعاد إخراجها\n- حلقة مسلسل 1080p: من 1 إلى 4 غيغابايت\n\nمثال حسابي: 100 فيلم 1080p × 8 غيغابايت (متوسط) = 800 غيغابايت كحد أدنى. لمكتبة من 300 فيلم متنوع + 10 مسلسلات كاملة، احسب من 3 إلى 5 تيرابايت.\n\n**الخيار 1 — وحدة تخزين إضافية للـ VPS (موصى به للبداية)**: يتيح معظم مزودي VPS وحدات كتل (Block Storage) تُركَّب أثناء التشغيل وتُفوتر بالغيغابايت شهريًا. ركّبها بنظام ext4 على `\u002Fmnt\u002Fmedia` ومرّرها إلى Docker كـ bind mount. الميزة: إدخال\u002Fإخراج مباشر على قرص محلي بلا عبور شبكي. العيب: التكلفة تنمو خطيًا مع الحجم.\n\nبعد إرفاق الوحدة (هنا `\u002Fdev\u002Fsdb`):\n\n`‎mkfs.ext4 \u002Fdev\u002Fsdb`\n`mount \u002Fdev\u002Fsdb \u002Fmnt\u002Fmedia`\n`echo '\u002Fdev\u002Fsdb \u002Fmnt\u002Fmedia ext4 defaults 0 2' >> \u002Fetc\u002Ffstab`\n\n**الخيار 2 — Hetzner Storage Box (CIFS\u002FSamba)**: حل هجين — يبقى الـ VPS خفيفًا ويعيش التخزين في الـ Storage Box. ركّبه عبر CIFS:\n\n`apt install -y cifs-utils`\n`install -m 600 \u002Fdev\u002Fnull \u002Froot\u002F.storagebox-credentials` ثم اكتب فيه سطرين: `username=uXXXXXX` و`password=…`\n`mount -t cifs ‎\u002F\u002FuXXXXXX.your-storagebox.de\u002Fbackup \u002Fmnt\u002Fmedia -o seal,credentials=\u002Froot\u002F.storagebox-credentials,uid=1000,gid=1000,iocharset=utf8`\n\nيُبقي ملف بيانات الاعتماد كلمة المرور خارج سجل الصدفة وقائمة العمليات؛ ويشفّر الخيار `seal` اتصال SMB، الذي لا يكون مشفّرًا بالضرورة افتراضيًا. فعّل أولًا SMB في لوحة Hetzner، وفعّل كذلك الوصول الخارجي إن لم يكن الـ VPS لدى Hetzner.\n\nزمن الاستجابة الشبكي مقبول للبث المخزَّن مسبقًا (يقرأ Jellyfin مقدمًا)، لكنه غير مناسب للترميز المباشر — فسعة CIFS لا تجاريه.\n\n**الخيار 3 — NAS محلي مع نفق Tailscale أو Cloudflare Tunnel**: إن كان لديك NAS منزلي، يمكنك إتاحة مكتبتك لـ VPS بعيد عبر نفق مشفّر. تنشئ Tailscale شبكة افتراضية خاصة بين الـ NAS والـ VPS في أقل من عشر دقائق. ويمرّ البث بعدها من الـ NAS ← إلى الـ VPS ← إلى المستخدم بزمن استجابة مضبوط. خصّص هذا الخيار للمكتبات الضخمة المكوَّنة مسبقًا.\n\n**عتبة الجدوى**: قارن سعر التيرابايت لوحدة الكتل بسعر Storage Box في قوائم أسعار مزودك السارية. فوق 500 غيغابايت يكون التخزين الخارجي في الغالب أرخص، بشرط أن تقبل زمن الاستجابة الشبكي.",{"type":39,"title":86,"body":87},"الترميز عبر العتاد — VAAPI وNVENC","يناسب الترميز البرمجي جلسة أو جلستين متزامنتين على VPS جيد. وفوق ذلك، أو لـ 4K HDR بانتظام، يصبح الترميز عبر العتاد ضروريًا.\n\n**VAAPI (إنتل\u002FAMD)**: على خادم مخصص بوحدة رسومية Intel مدمجة أو وحدة رسومية AMD، يتيح الجهاز `\u002Fdev\u002Fdri\u002FrenderD128` المرمِّز. أضف إلى خدمة Docker السطرين `devices:` ثم `- \u002Fdev\u002Fdri\u002FrenderD128:\u002Fdev\u002Fdri\u002FrenderD128`، و`group_add:` مع معرّف المجموعة `render` على المضيف (`getent group render | cut -d: -f3`).\n\nثم فعّل التسريع العتادي من لوحة التحكم > التشغيل > الترميز: اختر QSV ‏(Intel Quick Sync، المفضَّل على وحدات Intel الرسومية الحديثة في Linux) أو VA-API ‏(وحدات AMD الرسومية ووحدات Intel القديمة).\n\n**NVENC (NVIDIA)**: يتطلب على المضيف تعريف NVIDIA وNVIDIA Container Toolkit (الحزمة القديمة `nvidia-docker2` متقادمة). أضف إلى الخدمة كتلة `deploy:` > `resources:` > `reservations:` > `devices:` تحتوي على `- driver: nvidia` و`count: 1` و`capabilities: [gpu]`.\n\n**تذكير**: لا تتيح خوادم VPS السحابية العادية وحدة رسومية ولا الجهاز `\u002Fdev\u002Fdri`. هذا الوضع محجوز للخوادم المخصصة ببطاقة رسومية أو بمعالج ذي وحدة رسومية مدمجة يمكن الوصول إليها.",{"type":89,"body":90},"tip","حدّد الحِمل لتفادي الإشباع: لا يضع Jellyfin حدًا عامًا لعمليات الترميز، لكن يمكنك أن تحدّد لكل مستخدم عددًا أقصى للجلسات المتزامنة (لوحة التحكم > المستخدمون > ملف المستخدم) وأن تقيّد معدّل البت للعملاء البعيدين في إعدادات التشغيل. وفي VPS بأربع أنوية، استهدف عمليتي ترميز أو ثلاثًا متزامنة على الأكثر — وفوق ذلك يلحظ بقية المستخدمين تدهورًا واضحًا.",{"type":39,"title":92,"body":93},"الترقية إلى إصدار رئيسي: ما يفرضه Jellyfin 12","الانتقال من ‎10.11 إلى ‎12.x ليس تحديثًا روتينيًا. تضع ملاحظات الإصدار ‎12.0 (8 سبتمبر 2026) الإطار:\n\n**مسارات الترقية.** يمكن الترقية مباشرة من ‎10.10.7 أو من أي ‎10.11.x دون مرحلة وسيطة. وأي إصدار أقدم من ‎10.10.7 يجب أن يمر أولًا بـ ‎10.10.7.\n\n**النسخ الاحتياطي.** توصي الملاحظات «بشدة» بنسخة كاملة من مجلد البيانات، لأن التراجع يستلزم استعادة كاملة. وتؤكد وثائق النسخ الاحتياطي ذلك: ليس لدى Jellyfin آلية للرجوع إلى إصدار أقدم.\n\n**المدة.** يتحقق الترحيل من مسارات كل عناصر المكتبة، وقد يستغرق ذلك وقتًا بحسب حجمها، وسيكون أول مسح للمكتبة أطول بكثير من المعتاد.\n\n**آثار جانبية معلنة.** تُحذف النسخ البديلة التي حُلّت تلقائيًا (لا المدموجة يدويًا) وتعود بعد مسح كامل؛ وقد تظهر بعض الأفلام كأنها أُضيفت حديثًا؛ ويجب تصحيح أسماء المستخدمين التي تختلف بحالة الأحرف فقط قبل الترقية؛ وتختفي المسارات القديمة `\u002Femby\u002F*` و`\u002Fmediabrowser\u002F*` مما قد يعطّل عملاء أطراف ثالثة قدامى؛ ويُعطَّل التفويض القديم؛ وتُستبدل إعدادات الترجمة العامة بإعدادات لكل مكتبة.\n\nهذه النقاط مأخوذة من ملاحظات ‎12.0 وتخص ‎12.0؛ أعد قراءة ملاحظات الإصدار الذي تستهدفه.",{"type":58,"title":95,"steps":96},"إجراء دائم للترقية دون خسارة مكتبتك",[97,100,103,106,109,112,115],{"title":98,"body":99},"قراءة ملاحظات الإصدار والتحقق من مسار الترقية","افتح صفحة الإصدار المستهدف في مستودع Jellyfin على GitHub واقرأ «upgrade notes» فيه. حدّد إصدارك الحالي (`docker compose images` أو لوحة التحكم). إن كان أقدم من ‎10.10.7 فمرّ أولًا بـ ‎10.10.7. أزل الإضافات القادمة من مستودعات أطراف ثالثة قبل الترحيل كما تطلب ملاحظات ‎12.0.",{"title":101,"body":102},"منع أي تحديث تلقائي","الترحيل المقاطَع هو السبب الموثَّق لأسوأ الحالات (راجع القسم التالي). عطّل إذًا كل ما يستطيع إعادة تشغيل الخدمة أو استبدالها دون علمك:\n\n- Docker: ثبّت الوسم في `‎docker-compose.yml` (لا `latest` أبدًا) وأوقف Watchtower أو أي مهمة تشغّل `docker compose pull`\n- حزم Debian\u002FUbuntu: اعرض الحزم بالأمر `dpkg -l | grep -i jellyfin`، وجمّدها بـ `apt-mark hold \u003Cالحزمة>`، وتحقق بـ `apt-mark showhold`. الحزمة المجمَّدة لا يحدّثها `apt upgrade` ولا `unattended-upgrades`\n- تجنب كذلك تشغيل `apt upgrade` على الجهاز أثناء الترحيل، حتى لحزم أخرى، إلى أن تتأكد من سلوك توزيعتك",{"title":104,"body":105},"إيقاف Jellyfin ونسخ مجلد البيانات","قد تكون النسخة الساخنة لقاعدة بيانات مفتوحة غير صالحة للاستخدام: تنص الوثائق على أن الخادم يجب أن يكون متوقفًا في النسخ اليدوي، وإلا قد تُقفل القاعدة وتتعذر استعادتها.\n\n`cd \u002Fopt\u002Fjellyfin`\n`docker compose stop`\n`df -h \u002Fopt` و`du -sh \u002Fopt\u002Fjellyfin\u002Fconfig` للتحقق من المساحة\n`cp -a \u002Fopt\u002Fjellyfin ‎\u002Fopt\u002Fjellyfin.before-upgrade`\n\nإذا كانت إعداداتك في وحدة تخزين مسماة (وهذه حال قالب كتالوج ServOrbit الذي يركّب `jellyfin-data` على `\u002Fconfig`)، فانسخ الوحدة بعد التحقق من اسمها بـ `docker volume ls`: `docker run --rm -v jellyfin-data:\u002Fsource:ro -v \u002Froot\u002Fjellyfin-before:\u002Fcopy alpine cp -a \u002Fsource\u002F. \u002Fcopy\u002F`.\n\nالنسخة المدمجة (لوحة التحكم > النسخ الاحتياطية) بديل، لكنها لا تغني عن نسخ المجلد حين يكون الترحيل نفسه هو الخطر.",{"title":107,"body":108},"تغيير الوسم والتشغيل","عدّل سطر `image:` في `‎docker-compose.yml` إلى الإصدار المستهدف، ثم:\n\n`docker compose pull`\n`docker compose up -d`\n\nيشغّل الخادم عمليات الترحيل عند الإقلاع قبل قبول الاتصالات. وما دامت جارية يكرر فحص الصحة العبارة «Server is still starting up.»",{"title":110,"body":111},"المراقبة دون لمس أي شيء","يعرض `docker compose logs -f` الترحيل الجاري مرقّمًا (مثل «1 of 21»). وفي طرفية ثانية يبيّن `docker stats` الحمل. لا تعد تشغيل الحاوية ولا تكرر أمر `up` أثناء ترحيل جارٍ: هذه هي الحركة التي عطّلت قواعد بيانات في المشكلة #18066. لاحظ أن `restart: unless-stopped` يعيد أيضًا تشغيل حاوية أُنهيت (بسبب نفاد الذاكرة مثلًا) في منتصف الترحيل: فإن أظهر السجل إقلاعات متكررة فأوقفها بنفسك بـ `docker compose stop` وشخّص قبل المتابعة.",{"title":113,"body":114},"القرار: الانتظار أم الاستعادة","الترحيل البطيء يستهلك المعالج أو القرص؛ أما الترحيل العالق فخامل. تعطي تقارير المشكلة #18066 أوامر قدر: نواة واحدة عند 100 % لأكثر من ساعتين على قاعدة تتجاوز 3 غيغابايت قبل وجود الإصلاح، وترقية كاملة استغرقت نحو ساعتين عند مستخدم آخر، ونجاح بعد انتظار ليلة كاملة عند ثالث؛ وفي المقابل 0 % من المعالج وبلا إدخال\u002Fإخراج على القرص وخيوط خاملة عند من كان ترحيلهم عالقًا فعلًا. انتظر ما دام المعالج أو القرص يعملان والعدّاد يتقدم. فإن كان كل شيء خاملًا منذ وقت طويل، أو لم يعد السجل يتحرك، فاستعد النسخة.",{"title":116,"body":117},"استعادة النسخة إذا كانت العملية خاملة","`docker compose down`\n`mv \u002Fopt\u002Fjellyfin ‎\u002Fopt\u002Fjellyfin.blocked`\n`cp -a ‎\u002Fopt\u002Fjellyfin.before-upgrade \u002Fopt\u002Fjellyfin`\n\nأعد الوسم الدقيق السابق في `‎docker-compose.yml` ثم شغّل `docker compose up -d`. لا تحاول إرجاع قاعدة البيانات إلى إصدار أقدم في مكانها: ليس لدى Jellyfin آلية للرجوع. عند نجاح الترقية أجرِ مسحًا كاملًا للمكتبات، وأعد تثبيت الإضافات التي أزلتها، ولا تحذف النسخ إلا بعد أيام من الاستخدام العادي.",{"type":39,"title":119,"body":120},"ترحيل لا ينتهي أبدًا: الحالة الفعلية للمشكلة #18066","**العَرَض.** فُتحت المشكلة jellyfin\u002Fjellyfin #18066 بعنوان «Migration ChangeOwnerIdToGuid never completes and keeps one CPU core at 100%» في 15 سبتمبر 2026 عند ترقية من ‎10.11.11 إلى ‎12.1.0. يصف صاحبها خيط ‎.NET عند نحو 100 % من نواة واحدة لأكثر من ساعتين، وقاعدة `‎jellyfin.db` بحجم يقارب ‎3.2 إلى ‎3.5 غيغابايت ونحو 311 ألف عنصر، مع شبه انعدام للكتابة على القرص ودون أي خطأ في السجل.\n\n**الحالة الثانية: إعادة التشغيل بواسطة `apt upgrade`.** يروي مستخدم آخر أن `apt upgrade` أعاد تشغيل الخدمة في منتصف الترحيل؛ وبقيت كل عمليات الإقلاع اللاحقة عالقة عند الترحيل `AddForeignKeyToOwnerId` بنسبة 0 % من المعالج ودون إدخال\u002Fإخراج أو كتابة. ويذكر أيضًا أن ملف systemd محليًا يحدّ مهلة الإقلاع (`TimeoutSec = 15`) كان يقتل عمليات الترحيل. وقد استعاد النسخة التي ينشئها Jellyfin قبل الترحيل (المجلد `data\u002FSQLiteBackups\u002F`): فأعاد الإصدار ‎12.2 تشغيل عمليات الترحيل في نحو خمس دقائق.\n\n**ما نجح وما لم ينجح.** نجح بعض المستخدمين بعد ترك الترحيل يعمل طوال الليل، وآخرون بعد استعادة نسخة سابقة للترحيل أو إعادة تثبيت Jellyfin؛ وعاد بعضهم إلى ‎10.11.11 في الأثناء. وما زال التعطل قائمًا على ‎12.2 عند اثنين منهم على الأقل، في حين أبلغ خمسة على الأقل عن ترقية ناجحة عليه.\n\n**إصلاح المشروع الأصلي.** دُمج طلب السحب #18073 «Fix ChangeOwnerIdToGuid migration performance» في 26 سبتمبر 2026 في الفرع ‎12.z (المرحلة ‎v12.2) ثم نُقل إلى الفرع المستقر في 27 سبتمبر. ويعالج بطأين: فحص تصادمات كان يمسح جدول `UserData` كاملًا لكل صف مؤقت، وسبعة فهارس بُنيت على جدول بحجم عدة غيغابايت ثم أُهملت فورًا حين يعيد SQLite بناء الجدول لإضافة المفتاح الخارجي.\n\n**الحالة في 7 نوفمبر 2026.** ما زالت المشكلة مفتوحة (وسم `bug`)، دون تحليل للسبب الجذري من أحد المشرفين في الخيط الظاهر؛ وآخر تعليق في 17 أكتوبر. توجد الإصدارات ‎12.0 و‎12.1 و‎12.2 و‎12.3 و‎12.4 (والإصدار ‎12.4 الصادر في 26 أكتوبر هو الأحدث): استهدف آخر إصدار ‎12.x لا ‎12.0 أو ‎12.1 اللذين نُشرا قبل دمج إصلاح الأداء هذا.\n\nقراءة حذرة: يقصّر الإصلاح زمن الترحيل لكنه لا يضمن انتهاءه لكل قاعدة، ولا شيء يغني عن النسخة المسبقة. وحالة منفصلة في الخيط، عمليات عند 100 % بعد تسجيل دخول مستخدم، ربطها صاحبها بإحصاءات SQLite قديمة (`sqlite_stat1`) وحلّها بالأمر `ANALYZE`؛ ولم تُؤكَّد صلتها بالترحيل.",{"type":39,"title":122,"body":123},"استكشاف الأخطاء — المشكلات الشائعة","**مكتبة فارغة بعد المسح**: تحقق من صحة الـ bind mount في Docker ومن تطابق الصلاحيات. تعمل الحاوية بالمعرّف UID 1000؛ فإذا كانت ملفاتك مملوكة لـ root فلا يستطيع Jellyfin قراءتها: `chown -R 1000:1000 \u002Fmnt\u002Fmedia`.\n\n**HTTPS معطّل خلف nginx**: إذا تحمّلت الواجهة عبر HTTP رغم ضبط HTTPS، فتأكد من تمرير الترويستين `X-Forwarded-Proto` و`X-Real-IP` في إعداد nginx. بدونهما يولّد Jellyfin عناوين HTTP في ردوده.\n\n**ترميز بطيء أو خطأ VAAPI**: تأكد من وصول الحاوية إلى الجهاز بالأمر `docker exec jellyfin ls \u002Fdev\u002Fdri`. إن كان المجلد غائبًا فالجهاز غير ممرَّر في `‎docker-compose.yml` أو أن الـ VPS لا يتيحه.\n\n**تطبيقات الجوال ترفض الاتصال**: تحقق من أن شهادة TLS صالحة وغير موقَّعة ذاتيًا. ترفض عملاء Jellyfin على iOS وAndroid الشهادات الموقَّعة ذاتيًا دون إعداد إضافي. وإن كنت تستخدم Let's Encrypt فتأكد من أن التجديد التلقائي (`certbot renew`) فعّال: `systemctl status ‎certbot.timer`.\n\n**إضافات مثبَّتة لكنها غير فعّالة بعد إعادة التشغيل**: تتطلب بعض الإضافات إعادة تشغيل كاملة لـ Jellyfin (لا إعادة تحميل للإعدادات) كي تُفعَّل. استخدم `docker compose restart` بدل خيار إعادة التشغيل من الواجهة إن استمرت المشكلة.\n\n**«Server is still starting up.» في حلقة بعد ترقية الإصدار**: ثمة ترحيل لقاعدة البيانات جارٍ أو عالق. لا تعد التشغيل. انظر إلى عدّاد الترحيل في `docker compose logs` وإلى الحمل بـ `docker stats` ثم طبّق قرار الانتظار أو الاستعادة المشروح أعلاه.\n\n**عميل قديم لم يعد يتصل بعد ‎12.0**: أُزيلت المسارات `\u002Femby\u002F*` و`\u002Fmediabrowser\u002F*`. حدّث العميل أو استبدله بآخر.",{"type":39,"title":125,"body":126},"النشر من Marketplace ServOrbit","إذا كنت تفضّل تثبيتًا مُعدًّا مسبقًا على إدارة Docker يدويًا، فإن Jellyfin متوفر في Marketplace ServOrbit. ينشئ التثبيت الحاوية تلقائيًا، وما إن تربط نطاقًا بالتطبيق من فضاء العميل حتى يثبّت مضيف nginx الافتراضي وشهادة TLS. تحصل على Jellyfin جاهز للاستخدام، مع معالج الإعداد عند أول دخول؛ أما تخزين الوسائط (وحدة إضافية، Storage Box) فيبقى عليك تركيبه بنفسك كما سبق شرحه.\n\nيبقى الـ VPS تحت سيطرتك الكاملة: يمكنك الاتصال عبر SSH وتعديل `‎docker-compose.yml` وإضافة وحدات تخزين أو الانتقال إلى بنية أخرى في أي وقت.\n\nانتبه إلى خصوصية في القالب: في 7 نوفمبر 2026 يشير إلى الصورة `jellyfin\u002Fjellyfin:latest` ويركّب وحدة التخزين `jellyfin-data` على `\u002Fconfig`. بعد النشر ثبّت بنفسك وسم الصورة على الإصدار الذي اخترته، ثم اتبع إجراء ترقية الإصدار أعلاه قبل أي تغيير. يُقدَّم هذا الدليل دون دعم لتثبيتك.","‏Jellyfin في الإنتاج في 5 دقائق","‏انشر ‪Jellyfin‬ من ‪ServOrbit Marketplace‬: تثبيت مؤتمت، ‪HTTPS‬ مضمّن، تخزين قابل للتهيئة، ‪VPS‬ تحت سيطرتك الكاملة.","‏نشر Jellyfin على VPS","\u002Fapplications\u002Fالتعاون-والإنتاجية\u002Fjellyfin",[132,153,171],{"id":133,"slug":134,"slugs":135,"title":139,"excerpt":140,"readTime":141,"views":142,"isPinned":19,"noindex":19,"publishedAt":143,"updatedAt":144,"category":145,"categories":150,"featuredImage":30,"bgImage":31,"posterImage":152,"relatedSolution":30},98,"jellyfin-مقابل-plex-أي-خادم-وسائط-مستضاف-ذاتيا",{"fr":136,"en":137,"ar":134,"es":138},"jellyfin-vs-plex","jellyfin-vs-plex-which-self-hosted-media-server","jellyfin-vs-plex-que-servidor-multimedia-autoalojado","Jellyfin مقابل Plex: أي خادم وسائط مستضاف ذاتيًا؟","Jellyfin مقابل Plex: مقارنة شاملة لاختيار خادم الوسائط المستضاف ذاتيًا على VPS — النشر بـ Docker والاستكشاف وترحيل Jellyfin 12.",9,1,"2026-03-14T00:00:00+00:00","2026-11-08T01:13:15+00:00",{"id":146,"name":147,"slug":148,"color":149,"icon":148},5,"مقارنات","comparatif","bg-info\u002F10 text-info",[151],{"id":146,"name":147,"slug":148,"color":149,"icon":148},"\u002Fblog\u002Fcovers\u002Fjellyfin-vs-plex-poster.svg",{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":162,"views":163,"isPinned":19,"noindex":19,"publishedAt":164,"updatedAt":165,"category":166,"categories":167,"featuredImage":30,"bgImage":31,"posterImage":169,"relatedSolution":170},292,"الهجرة-من-plex-إلى-jellyfin-بعد-paywall-يوليو-2026",{"fr":157,"en":158,"ar":155,"es":159},"migrer-plex-vers-jellyfin-2026","migrating-from-plex-to-jellyfin-after-the-july-2026-paywall","migrar-de-plex-a-jellyfin-2026","الهجرة من Plex إلى Jellyfin بعد paywall يوليو 2026","أصبح Plex يفرض رسومًا على البث عن بُعد وصحّح ثغرتين في 2026. انتقل إلى Jellyfin للفيديو وNavidrome للموسيقى على خادم VPS الخاص بك.",16,4,"2026-08-22T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[168],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmigrer-plex-vers-jellyfin-2026-poster.svg",{"categorySlug":34,"appSlug":35},{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":141,"views":163,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":186},232,"استضافة-matrix-synapse-وelement-على-خادم-vps-الخاص-بك",{"fr":175,"en":176,"ar":173,"es":177},"heberger-matrix-synapse","host-matrix-synapse-and-element-on-your-own-vps","alojar-matrix-synapse-y-element-en-un-vps","استضافة ‎Matrix Synapse‎ و‎Element‎ على خادم VPS الخاص بك","استضف ‎Matrix Synapse‎ و‎Element Web‎ على ‎VPS‎: ‎Docker‎، ‎PostgreSQL‎، ‎reverse proxy‎، الجسور وتنظيف السجل. دليل شامل 2026.","2026-01-19T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-matrix-synapse-poster.svg",{"categorySlug":25,"appSlug":187},"matrix-synapse",true,1794270223214]