[{"data":1,"prerenderedAt":169},["ShallowReactive",2],{"seo-verification":3,"blog-audiobookshelf-خادم-أوديوبوك-وبودكاست-على-vps-ma-ar":6,"promo-bar-likely":168},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-audiobookshelf-خادم-أوديوبوك-وبودكاست-على-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":163,"ctaBody":164,"ctaButton":165,"ctaUrl":166,"relatedPosts":167},326,"audiobookshelf-خادم-أوديوبوك-وبودكاست-على-vps",{"fr":12,"en":13,"ar":10,"es":14},"heberger-audiobookshelf-vps","audiobookshelf-self-hosted-audiobook-and-podcast-server-on-vps","audiobookshelf-audiolibros-y-podcasts-self-hosted-en-vps","Audiobookshelf — خادم أوديوبوك وبودكاست على VPS","انشر Audiobookshelf على VPS: قدّم مكتبة أوديوبوك وبودكاست خاصة بك، زامنها على iOS وAndroid مع تطبيقات مفتوحة المصدر، واستأنف الاستماع من حيث توقفت — بدون اشتراك أو طرف ثالث.",12,0,false,"2026-01-11T00:00:00+00:00","2026-11-04T16:30:27+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-audiobookshelf-vps-poster.svg",{"categorySlug":34,"appSlug":35},"التعاون-والإنتاجية","audiobookshelf","Audiobookshelf خادم أوديوبوك وبودكاست مفتوح المصدر (GPL-3.0) تستضيفه بنفسك. خلافاً لخدمات السحابة، تبقى ملفاتك الصوتية على خادمك — تتحكم فيها بالكامل دون اشتراك أو حصص أو تتبع لعادات الاستماع. التطبيقات الرسمية لـiOS وAndroid — مفتوحة المصدر بالكامل — تتصل بنسختك وتزامن التقدم والإشارات ولوائح التشغيل على جميع أجهزتك.",[38,42,52,55,58,80,83,86,118,121,139,142,145,148,156,160],{"type":39,"title":40,"body":41},"h2","لماذا تستضيف مكتبتك الصوتية بنفسك؟","تفرض منصات الأوديوبوك كتالوجاتها وحماية DRM ورسومها الشهرية. مع Audiobookshelf تستورد ملفاتك M4B أو MP3 أو FLAC الخاصة — سواء اشتريتها أو استعرتها أو أنتجتها — وتصل إليها من أي جهاز عبر تطبيقات مفتوحة المصدر. مكتبتك تنمو بإيقاعك، لا بإيقاعهم.",{"type":43,"title":44,"items":45},"ul","ما يقدمه Audiobookshelf على VPS من ServOrbit",[46,47,48,49,50,51],"**البث والمزامنة** — استأنف الأوديوبوك من حيث توقفت على الويب أو الموبايل دون حساب سحابي.","**تطبيقات iOS وAndroid مفتوحة المصدر** — العملاء الرسميون تحت رخصة GPL-3.0 قابلون للتدقيق ويديرهم المجتمع.","**نسخ احتياطية مجدولة مدمجة** — يستطيع الخادم إنتاج أرشيف لقاعدة بياناته وبياناته الوصفية، مع مدة احتفاظ قابلة للضبط.","**البودكاست المتكامل** — اشترك في خلاصات RSS وتُنزَّل الحلقات تلقائياً وتُشغَّل في نفس الواجهة.","**حسابات متعددة** — لكل فرد من العائلة حسابه وتاريخه ولوائح تشغيله.","**بيانات وصفية تلقائية** — يمكن جلب الأغلفة والفصول والأوصاف من مزودين مثل Audnexus دون إدخال يدوي.",{"type":39,"title":53,"body":54},"صيغ الصوت المدعومة","يشغّل Audiobookshelf الصيغ الشائعة، ومنها MP3 وM4A وM4B (مع الفصول) وAAC وOGG وFLAC وWAV وOPUS. علامات فصول M4B معروضة في المشغّل بعناوينها ومُددها. ملفات Audible المحمية بـDRM لا تُشغَّل كما هي: لا تستورد إلا ملفات يحق لك استخدامها، بصيغة مفتوحة.",{"type":39,"title":56,"body":57},"المتطلبات والتحجيم","الخادم نفسه متواضع: يكفي VPS بنظام Ubuntu 24.04 مع Docker لعائلة كاملة. الذي يثقل هو القرص، لأن المكتبة (خصوصاً حلقات البودكاست التي تُنزَّل مع الوقت) تكبر باستمرار، أما المعالج فلا يُستهلك إلا حين يطلب العميل تحويلاً عبر ffmpeg بدل التشغيل المباشر. حجّم حجم البيانات على مجموعتك، واترك هامشاً للبيانات الوصفية والأغلفة والنسخ الاحتياطية، فهي تُحفظ افتراضياً في الحجم نفسه `\u002Fmetadata`.\n\nيجب أن تبقى قاعدة SQLite على القرص المحلي للـVPS. وثائق Audiobookshelf صريحة: لا يجوز ربط المجلد `\u002Fconfig` بمشاركة شبكية، وإلا ظهر البطء ثم التلف. أما ملفات الصوت فيمكن أن تكون في مكان آخر.",{"type":59,"title":60,"steps":61},"steps","نشر Audiobookshelf باستخدام Docker Compose",[62,65,68,71,74,77],{"title":63,"body":64},"تجهيز الـVPS وDocker","اتصل عبر SSH وحدّث النظام ثم ثبّت Docker وإضافة Compose. تحقق بالأمر `docker compose version`. على VPS من ServOrbit يقوم قالب Audiobookshelf بهذه الخطوات عنك: يفيدك هذا الدليل في فهم ما يعمل واستلام زمامه.",{"title":66,"body":67},"إنشاء المجلدات وضبط المالك","أنشئ مجلداً لكل حجم: `mkdir -p \u002Fopt\u002Faudiobookshelf\u002F{config,metadata,audiobooks,podcasts}`. اختر المستخدم الذي سيعمل به الحاوية (مثلاً 1000:1000) ثم سلّمه المجلدات: `chown -R 1000:1000 \u002Fopt\u002Faudiobookshelf`. يجب أن تكون المجلدات الأربعة نقاط ربط منفصلة، لا يحتوي أحدها الآخر.",{"title":69,"body":70},"كتابة ملف ‎docker-compose.yml","عرّف خدمة `audiobookshelf` بالصورة `ghcr.io\u002Fadvplyr\u002Faudiobookshelf` (ثبّت وسم الإصدار الذي تحققت منه بدل `latest`) مع `restart: unless-stopped` والتوجيه `user: \"1000:1000\"` والمنفذ `127.0.0.1:13378:80` وأربعة روابط: `\u002Fopt\u002Faudiobookshelf\u002Fconfig:\u002Fconfig` و`\u002Fopt\u002Faudiobookshelf\u002Fmetadata:\u002Fmetadata` و`\u002Fopt\u002Faudiobookshelf\u002Faudiobooks:\u002Faudiobooks` و`\u002Fopt\u002Faudiobookshelf\u002Fpodcasts:\u002Fpodcasts`. أضف `TZ=Africa\u002FCasablanca` (أو منطقتك الزمنية) كمتغير بيئة. لا يستخدم Audiobookshelf المتغيرين PUID وPGID: التوجيه `user:` هو الذي يحدد المستخدم.",{"title":72,"body":73},"التشغيل والتحقق","نفّذ `docker compose up -d` ثم `docker compose logs -f audiobookshelf`. عند أول تشغيل يطبّق الخادم ترحيلات قاعدة البيانات: انتظر السطر الذي يعلن الاستماع على المنفذ 80 داخل الحاوية. إذا أظهر `docker compose ps` أن الخدمة تعيد التشغيل باستمرار فانتقل مباشرة إلى قسم استكشاف الأخطاء أدناه.",{"title":75,"body":76},"إنشاء حساب المدير والمكتبة","افتح الواجهة (عبر نفق SSH أو نطاقك) وأنشئ حساب root، ثم أضف مكتبة تشير إلى `\u002Faudiobooks` وأخرى إلى `\u002Fpodcasts`. شغّل المسح: تظهر الكتب بأغلفتها وفصولها.",{"title":78,"body":79},"ربط التطبيق المحمول","في تطبيق iOS أو Android أدخل عنوان HTTPS لنسختك واسم المستخدم وكلمة المرور. تتزامن بعدها التقدمات بين الهاتف والويب. للاستخدام الدائم ضع وكيلاً عكسياً بـHTTPS أمام الحاوية باتباع صفحة «Reverse Proxy» في وثائق Audiobookshelf (خصوصاً تمرير WebSocket).",{"type":39,"title":81,"body":82},"الإعداد بدون نطاق","لا يحتاج Audiobookshelf إلى نطاق ليعمل. مع قالب ServOrbit تستمع الحاوية على الواجهة المحلية للـVPS فقط، على المنفذ 13780. افتح نفق SSH من جهازك: `ssh -L 13378:127.0.0.1:13780 root@\u003Cip-vps>` ثم تصفّح `http:\u002F\u002Flocalhost:13378`. للوصول الدائم من التطبيق المحمول، اربط نطاقاً من لوحة ServOrbit — يمرّر nginx الحاوية عبر HTTPS — أو استخدم النطاق الفرعي المجاني `{app}.{dns_slug}.servorbit-dns.com` المُدرج مع كل VPS.",{"type":39,"title":84,"body":85},"صلاحيات الأحجام والمستخدم غير الجذري","أربعة أحجام وأربعة أدوار. يحتوي `\u002Fconfig` على قاعدة SQLite وسكربتات الترحيل. ويحتوي `\u002Fmetadata` على البيانات الوصفية والأغلفة وصور المؤلفين والسجلات والذاكرة المؤقتة، وافتراضياً النسخ الاحتياطية. أما `\u002Faudiobooks` و`\u002Fpodcasts` فيمنحان الوصول إلى ملفات الوسائط. يجب أن يستطيع الخادم الكتابة في `\u002Fconfig` و`\u002Fmetadata`؛ وفي `\u002Faudiobooks` لا تلزم الكتابة إلا إن أردت أن يكتب بيانات وصفية بجوار الملفات، وفي `\u002Fpodcasts` هي ضرورية لأن الحلقات تُنزَّل فيه.\n\nافتراضياً لا يحدد المثال الرسمي أي مستخدم. للتحصين أضف التوجيه `user:`: عندها لا تملك الحاوية صلاحيات الجذر على الروابط، وهنا بالضبط تظهر أخطاء الصلاحيات. القاعدة بسيطة: يجب أن يكون مالك مجلدات المضيف هو UID:GID الوارد في التوجيه `user:`. اختبر قبل تحميل المكتبة: `docker compose exec audiobookshelf touch \u002Fconfig\u002Ftest \u002Fmetadata\u002Ftest` ثم احذف الملفين.\n\nعلى نظام ملفات بقوائم ACL (مثل ZFS مع ACL من نوع NFSv4) لا يكفي `chown` دائماً: الحادثة الموصوفة أدناه توضح ذلك، بحاوية تعمل بالمستخدم 568 مع سحب كل القدرات على مجموعة بيانات ZFS.",{"type":87,"title":88,"headers":89,"rows":93},"comparison","حجم مسمّى أم مجلد على المضيف لـ \u002Fconfig و\u002Fmetadata",[90,91,92],"المعيار","حجم Docker مسمّى","مجلد على المضيف",[94,98,102,106,110,114],[95,96,97],"المالك الأولي","يديره Docker وغالباً root","تضبطه بنفسك عبر chown",[99,100,101],"التوافق مع `user:`","يُتحقق منه قبل أول استيراد","مباشر إذا تطابق UID:GID",[103,104,105],"النسخ البارد","استخدم `docker volume inspect` لمعرفة المسار","`rsync` مباشر للمجلد",[107,108,109],"وضوح المسار","أقل وضوحاً","مسار ثابت ومعروف",[111,112,113],"النقل إلى VPS آخر","يلزم تخطيط لتصدير الحجم","نسخ المجلد",[115,116,117],"الاستخدام الموصى به","تجربة سريعة وقالب جاهز","الإنتاج بمستخدم غير جذري",{"type":39,"title":119,"body":120},"نسخ احتياطية متسقة: ما تغطيه النسخة المدمجة","يستطيع Audiobookshelf إنشاء نسخه الاحتياطية من الواجهة (الجدولة وعدد النسخ المحفوظة والحجم الأقصى). يحتوي كل أرشيف على قاعدة البيانات وصور الأغلفة من مجلد البيانات الوصفية؛ أما ملفات الوسائط المخزنة مع عناصر المكتبة فليست فيه. افتراضياً تُكتب الأرشيفات في `\u002Fmetadata\u002Fbackups`، أي على القرص نفسه الذي توجد عليه البيانات: عطل الـVPS يأخذ الاثنين معاً. انسخها بانتظام خارج الخادم.\n\nالنسخة لا تحمي إلا إذا كانت متسقة. القاعدة ملف SQLite حيّ: نسخ `\u002Fconfig` بـ`cp` أو `rsync` بينما يكتب الخادم (تقدم الاستماع، المسح) قد ينتج ملفاً غير متسق. طريقتان آمنتان: استعمال النسخة المدمجة في الخادم ثم نسخ الأرشيف الناتج؛ أو إيقاف الحاوية طوال مدة النسخ. ملفات الصوت تُنسخ على حدة بـ`rsync` أو بأداة نسخ احتياطي تزيل التكرار.\n\nتتم الاستعادة على نوع النظام نفسه: تحذر الوثائق من أن نسخة Linux تُستعاد على Linux، وأن الانتقال من طريقة تثبيت إلى أخرى قد يُضيّع التقدم والبيانات الوصفية.",{"type":59,"title":122,"steps":123},"النسخ البارد والاستعادة اليدوية",[124,127,130,133,136],{"title":125,"body":126},"إيقاف الحاوية","من مجلد ملف compose نفّذ `docker compose stop audiobookshelf`. لم تعد هناك كتابات جارية على القاعدة.",{"title":128,"body":129},"نسخ الإعدادات والبيانات الوصفية","انسخ `\u002Fopt\u002Faudiobookshelf\u002Fconfig` و`\u002Fopt\u002Faudiobookshelf\u002Fmetadata` إلى مكان خارج الـVPS بالأمر `rsync -a` مع حفظ الصلاحيات. أضف مجلدات الصوت وفق استراتيجيتك لنسخ الوسائط.",{"title":131,"body":132},"إعادة التشغيل والتحقق","نفّذ `docker compose start audiobookshelf` وتحقق من السجلات أن الخادم يستمع من جديد. يدوم الانقطاع بقدر مدة نسخ القاعدة.",{"title":134,"body":135},"الاستعادة من أرشيف الخادم","أوقف الحاوية، وفُكّ ضغط أحدث أرشيف في `metadata\u002Fbackups`، وانسخ `audiobookshelf.sqlite` إلى مجلد الإعدادات بدل الملف الموجود، ثم انسخ المجلدين `metadata-authors` و`metadata-items` إلى `authors` و`items`. إن كان الأرشيف غير صالح فجرّب الذي قبله. توفر صفحة النسخ الاحتياطية في الواجهة أيضاً زر استعادة.",{"title":137,"body":138},"اختبار استعادة تجريبية","مرة كل ثلاثة أشهر استعد نسخة على VPS تجريبي وتحقق من وجود المستخدمين والتقدم والمكتبات. النسخة التي لم تُستعد قط تبقى مجرد فرضية.",{"type":39,"title":140,"body":141},"التحديثات والإصدارات: ثبّت الوسم بدل متابعة latest","يسحب قالب ServOrbit الصورة `latest`. هذا مريح لكنه يعرّضك لانحدارات بين إصدار وآخر. التحديث الموثّق بسيط: `docker compose pull` ثم `docker compose down` ثم `docker compose up --detach`. قبل كل تحديث خذ نسخة احتياطية (مدمجة أو باردة) واقرأ ملاحظات الإصدار في صفحة الإصدارات بمستودع GitHub.\n\nحالة حديثة تبرّر ذلك. نقل الإصدار `2.37.0` الخادم إلى `Node.js` 24، وأصابت الإصدار `2.37.1` حلقة إعادة تشغيل في بعض التثبيتات (انظر أدناه). التصحيح منشور في `2.37.2`، وهو وقت الكتابة آخر إصدار مستقر يعرضه المشروع. وسم مثبّت ونسخة احتياطية سابقة يتيحان لك الرجوع دون ارتجال.",{"type":39,"title":143,"body":144},"استكشاف الأخطاء: حلقة إعادة تشغيل عند البدء (EPERM … copyfile)","العَرَض: تعيد الحاوية التشغيل في حلقة بعد الترقية إلى `2.37.1`، وتظهر في السجلات الرسالة «Failed to copy migrations to the config directory» ثم «EPERM: operation not permitted, copyfile» من المجلد `\u002Fapp\u002Fdist-server\u002Fserver\u002Fmigrations\u002F` إلى `\u002Fconfig\u002Fmigrations\u002F` ثم «Database migration failed».\n\nالحالة الفعلية للحادثة (المسألة رقم 5637 في مستودع advplyr\u002Faudiobookshelf، فُتحت في أكتوبر 2026): هي مغلقة. كان صاحب البلاغ يستخدم TrueNAS SCALE وحاوية بالمستخدم 568 مع سحب كل القدرات و`no-new-privileges`، و`\u002Fconfig` على مجموعة بيانات ZFS مربوطة ربط bind. أبلغ عدة مستخدمين لـTrueNAS عن الأمر نفسه. لا يوجد سبب جذري مثبت رسمياً في النقاش؛ أظهر اختبار أن `copyFileSync` يفشل بـEPERM على هذا الربط بينما تنجح كتابة ملف مباشرة بالمستخدم نفسه، ويُشتبه في انحدار في مسار النسخ مرتبط بـ`Node.js` 24. يضيف التصحيح (طلب الدمج رقم 5668) مساراً بديلاً عند فشل النسخ؛ وهو منشور في `2.37.2`.\n\nالعلاج: رقِّ إلى `2.37.2` أو أحدث. إن تعذّر التحديث فوراً فالحل المؤقت المذكور في المسألة هو الرجوع إلى `2.36.1` مع نسخة احتياطية أُخذت قبل التحديث. وإذا استمرت الرسالة نفسها بعد التحديث فتحقق من مالك مجلد الإعدادات وقوائم ACL لمجموعة البيانات: لم يعد ذلك الخطأ نفسه.",{"type":39,"title":146,"body":147},"استكشاف الأخطاء: النسخة الليلية تُسقط الحاوية (SQLITE_BUSY)","العَرَض: يتوقف الخادم في وقت النسخة المجدولة مع «FATAL: [Server] Uncaught exception» والخطأ `SQLITE_BUSY: database is locked`. مع `restart: unless-stopped` يعيد Docker تشغيل الحاوية: لا ترى إلا انقطاعاً قصيراً يكشفه عدّاد إعادة تشغيل غير صفري (`docker inspect --format '{{.RestartCount}}' \u003Ccontainer>`؛ استبدل الاسم باسم حاويتك).\n\nالحالة الفعلية (المسألة رقم 4572، فُتحت في أغسطس 2025): ما زالت مفتوحة. يشرح أحد المساهمين السبب: تُصدر النسخة الاحتياطية في SQLite خطأ «القاعدة مشغولة» كحدث بلا مستمع، فتعامله `Node.js` كاستثناء غير ملتقَط، ولا تُجرى أي محاولة إعادة. يقع الانهيار حين تُبقي كتابة أخرى، مثل حفظ عميل لتقدم الاستماع، القفل أكثر من ثانية أثناء النسخ. طلب الدمج رقم 5660 (نسخ على دفعات يعيد المحاولة عند القفل، وأخطاء الجلسات تُسجَّل بدل أن تُسقط الخادم) مفتوح وغير مدمج حتى اليوم: لا يتضمنه أي إصدار منشور. وأُغلق طلب دمج منافس سابق لصالح هذا الطلب.\n\nفي الأثناء ثلاثة حلول مؤقتة ذُكرت في المسألة: إبعاد النسخة عن ساعات الاستماع (الفجر أفضل من المساء)؛ إبقاء `restart: unless-stopped` لتعود الحاوية وحدها؛ أو استبدال النسخة المدمجة بنسخ بارد مجدول على المضيف يوقف الحاوية لحظات. تذكير من الوثائق: يجب أن تكون القاعدة على قرص محلي، لا على مشاركة شبكية أبداً.",{"type":43,"title":149,"items":150},"أخطاء شائعة أخرى",[151,152,153,154,155],"**Permission denied في السجلات** — مالك مجلدات المضيف لا يطابق UID:GID في التوجيه `user:`. صحّح بـ`chown -R` ثم أعد التشغيل.","**مكتبة فارغة بعد المسح** — مسار المكتبة ليس مسار الحاوية. أضف `\u002Faudiobooks` أو `\u002Fpodcasts` لا مساراً من المضيف.","**«Cannot find module '‎\u002Findex.js'»** — تشير الوثائق إلى ذاكرة صور قديمة عند بعض مديري الحاويات: أعد إنشاء الحاوية أو الحزمة بعد `docker compose pull`.","**التطبيق المحمول لا يتصل** — تحقق من عنوان HTTPS والشهادة وتمرير WebSocket عبر الوكيل العكسي؛ نفق SSH لا يخدم إلا المتصفح.","**حاوية «unhealthy»** — يستعلم فحص الصحة المنفذ 80 داخل الحاوية: راجع `docker compose logs` لمعرفة هل يفشل ترحيل عند البدء.",{"type":157,"title":158,"body":159},"tip","تحصين أدنى","ثبّت وسم الصورة، شغّل الحاوية بالتوجيه `user:`، انشر المنفذ على `127.0.0.1` فقط خلف وكيل عكسي بـHTTPS، انسخ أرشيفات `\u002Fmetadata\u002Fbackups` خارج الـVPS كل أسبوع وجرّب استعادة. هذا الدليل مقدَّم كما هو: لا يوفّر ServOrbit دعماً للتطبيق نفسه.",{"type":39,"title":161,"body":162},"للمتابعة","حين يستقر الخادم أضف طبقة حماية ثانية: نسخة احتياطية مشفّرة لمجلدات الإعدادات إلى تخزين بعيد، وتنبيهاً إذا أُعيد تشغيل الحاوية أكثر من مرة يومياً. تابع المسائل المذكورة هنا: سيلزم التحقق من انهيار النسخ الاحتياطي من جديد فور دمج طلب الدمج رقم 5660 ونشره.","انشر Audiobookshelf على VPS الخاص بك","يُوفّر ServOrbit خادم VPS بنظام Ubuntu 24.04 ويُشغّل Audiobookshelf في حاوية Docker في دقائق — دون إعداد يدوي. أوديوبوكاتك، قواعدك، بنيتك التحتية.","انشر Audiobookshelf","\u002Fapplications\u002Fالتعاون-والإنتاجية\u002Faudiobookshelf",[],true,1794270325702]