استضافة بث الموسيقى ذاتياً على VPS مع Navidrome
شغّل Navidrome على VPS وابث مكتبتك إلى أي هاتف. تعرّف إلى حجم التخزين، وتطبيقات Subsonic، والمزامنة دون اتصال، وTLS، والنسخ الاحتياطي الآمن.
ما الذي يوفّره بث الموسيقى المستضاف ذاتياً على VPS
يعني بث الموسيقى المستضاف ذاتياً على VPS أنك تشغّل المشغّل وتوفّر الموسيقى بنفسك. يحتفظ الخادم بالملفات التي تملكها بالفعل، ويمكن لأي هاتف الوصول إليها عبر الإنترنت باستخدام تسجيل دخول عادي. كن واضحاً بشأن المقابل قبل أن تبدأ: فهذا يستبدل مشغّل خدمة البث، ولا يوفّر كتالوجها. لن يظهر أي محتوى جديد في مكتبتك حتى تشتريه أو تستخرجه من وسيطه، ثم تنسخ الملف إلى الخادم.
الصوت أقل عبئاً بكثير على الخادم من الفيديو. فالملفات صغيرة، وتفكّ الهواتف ترميز كل الصيغ الشائعة دون مساعدة، ويستخدم مستمع واحد نطاقاً ترددياً أقل من مكالمة فيديو. وحدة المعالجة المركزية ليست المشكلة هنا. مساحة القرص هي القيد الفعلي. والعاملان الآخران اللذان يحددان نجاح هذا الحل هما جودة الوسوم، وقدرة تطبيق الهاتف على تنزيل الموسيقى للاستخدام دون اتصال.
أي خادم موسيقى تختار: Navidrome أم Jellyfin أم Funkwhale؟
Navidrome هو الخيار الافتراضي عندما تهتم بالصوت فقط. يتكوّن من ملف Go ثنائي واحد داخل حاوية واحدة، ويخزّن حالته في قاعدة بيانات SQLite واحدة. وهو يوفّر واجهة Subsonic API، ولذلك تتوفر عائلة كبيرة من تطبيقات الهواتف التابعة لجهات خارجية. كانت النسخة 0.63.2 هي الحالية في August 2026. ويذكر المشروع أنّه يعمل جيداً على عتاد محدود مثل Raspberry Pi Zero، لذلك لن تكون برمجية الخادم هي الجزء الذي ستدفع تكلفته.
Jellyfin خيار مناسب إذا كنت تشغّل Jellyfin كخادم وسائط على VPS للفيديو مسبقاً. تعمل مكتبة الموسيقى فيه، كما أنّ Finamp هو تطبيق موسيقى لـJellyfin على Android وiOS، ويمكنه تنزيل المقاطع للاستماع إليها دون اتصال. القيد هنا هو واجهة API. لا يوفّر Jellyfin نقطة نهاية Subsonic مضمّنة، كما أنّ الإضافة المجتمعية التي أضافت هذه النقطة توقفت عن التحديث في 2022، لذلك لا يتوافق نظام تطبيقات Subsonic معه. بدلاً من ذلك، تستخدم التطبيقات التي تتحدث مع واجهة API الخاصة بـJellyfin، وعددها أقل.
Funkwhale هو الخيار الاتحادي، وقد أُصدرت النسخة 2.0 في March 2026. يُسمّى خادم Funkwhale pod، وتتحد pods عبر ActivityPub، وهو البروتوكول الذي يقف وراء Mastodon، ويمكن لمستخدم على pod متابعة مكتبة عامة على pod آخر. كما يوفّر جزءاً من Subsonic API، مع اختلاف مهم: يعيّن كل مستخدم كلمة مرور Subsonic منفصلة في إعداداته، لأن بروتوكول Subsonic يتوقع كلمة مرور يستطيع الخادم قراءتها. يتطلب Funkwhale تثبيتاً أثقل، لأنه يحتاج إلى PostgreSQL وإلى قائمة انتظار للمهام إلى جانب تطبيق الويب.
اختر Navidrome ما لم تكن تريد الاتحاد، أو ما لم يكن Jellyfin قيد التشغيل مسبقاً. يضبط باقي هذا الدليل Navidrome باستخدام Docker.
لماذا تحدد Subsonic تطبيق الهاتف الذي ستحصل عليه
كان Subsonic خادماً موسيقياً أصبحت واجهة HTTP الخاصة به اللغة المشتركة للصوت المستضاف ذاتياً، بينما يواصل مشروع OpenSubsonic المجتمعي توسيعها. يفسر هذا التاريخ سبب توفر عدة خيارات على هاتفك. لا توفر Navidrome تطبيقاً للهاتف من تطويرها، ولا تحتاج إلى ذلك، لأن أي عميل Subsonic يسجّل الدخول باستخدام عنوان الخادم وبيانات حسابك.
تظهر أهمية ذلك خصوصاً في المزامنة للاستخدام دون اتصال، وهي الميزة التي تحدد قدرة الإعداد على الاستمرار في الاستخدام اليومي. لا يستطيع الهاتف الوصول إلى خادمك داخل نفق، لذلك يجب أن يكون العميل قد نسخ الملفات إلى وحدة التخزين المحلية مسبقاً. كل عميل يبث الملفات. لكن بعض العملاء فقط ينزّلها. يوضح دليل العملاء على navidrome.org/apps أيّ العملاء يدعمون ذلك، والخيارات واسعة على كلا النظامين: Substreamer وUltrasonic على Android، وAmperfy وplay:Sub على iOS. بعض أقوى العملاء تطبيقات مدفوعة، ويُذكر Symfonium على Android أكثر من غيره. ثبّت تطبيقين قبل اتخاذ قرارك، لأن هذا هو الجزء الذي ستستخدمه كل يوم.
ما مقدار التخزين الذي تحتاج إليه مكتبة موسيقية؟
The data behind this chart
[
{
"label": "Opus 128k",
"kbps": 128,
"gb_per_1000_albums": 43
},
{
"label": "MP3 320k",
"kbps": 320,
"gb_per_1000_albums": 108
},
{
"label": "FLAC 16/44.1",
"kbps": 900,
"gb_per_1000_albums": 304
},
{
"label": "FLAC 24/96",
"kbps": "3,000",
"gb_per_1000_albums": "1,013"
}
]هذه أرقام تقريبية توضّح رتبة الحجم، وهي مشتقة من معدل البت وليست قياسات لمجموعة حقيقية. والحساب بسيط بما يكفي لمقارنته بملفاتك. اعتبر أن مدة الألبوم 45 دقيقة، أي 2,700 ثانية. اضرب معدل البت بالكيلوبت في الثانية في 2,700، ثم اقسم الناتج على 8,000 لتحصل على عدد الميغابايتات. عند معدل 320 كيلوبت في الثانية، يشغل الألبوم الواحد 108 ميغابايت، ولذلك تشغل ألفية من الألبومات نحو 108 غيغابايت.
تغيّر الصيغة غير الفقدية النتيجة. يبلغ متوسط FLAC بجودة CD نحو 900 كيلوبت في الثانية مع المواد الصوتية العادية، ولذلك تحتاج الألفية نفسها من الألبومات إلى نحو 304 غيغابايت. وتحتاج مكتبة بدقة 24 بت ومعدل أخذ عينات 96 كيلوهرتز إلى نحو 1,013 غيغابايت، أي تيرابايتاً كاملاً لمجموعة يمكنك سردها على الورق. أما نسخة Opus الملائمة للهواتف بمعدل 128 كيلوبت في الثانية، فتضع الألفية نفسها من الألبومات ضمن 43 غيغابايت. شغّل du -sh /path/to/music على المكتبة الموجودة لديك، لأن متوسط معدل البت الفعلي لملفاتك هو الرقم الوحيد المهم عند اختيار خطة.
النطاق الترددي هو النصف الأصغر من التكلفة. بث بمعدل 320 كيلوبت في الثانية يستهلك 40 كيلوبايت في الثانية، ولذلك ينقل نحو 144 ميغابايت خلال ساعة من الاستماع. ويستهلك الاستماع لمدة مئة ساعة في الشهر نحو 14 غيغابايت، وهو مقدار لا تلاحظه حصة نقل البيانات في VPS. والاستثناء هو أول مزامنة للاستخدام دون اتصال على الهاتف، إذ قد تنقل عشرات الغيغابايت خلال مساء واحد.
طبقة التخزين أم طبقة الحوسبة؟
خادم الموسيقى عبارة عن كمية كبيرة من البيانات غير النشطة، مع حاجة شبه معدومة إلى المعالجة. تؤدي قراءة ملف بسرعة 40 كيلوبايت في الثانية إلى إبقاء أي قرص في وضع الخمول، ولا يعمل المعالج إلا أثناء فحص المكتبة أو تحويل الترميز، وهو أمر لن تفعله غالباً. لذلك، لا تضيف أقراص NVMe السريعة في خطة حوسبة أي قيمة هنا، بينما تكون كلفتها لكل غيغابايت هي ما يمنعك من رفع نسخ FLAC. هذه هي الحالة التي يتفوق فيها VPS للتخزين على VPS عادي، لأن تسعير هذه الخطط يكون لكل تيرابايت لا لكل نواة.
احتياجات الذاكرة محدودة. يشغّل Navidrome مكتبة شخصية ضمن بضع مئات من الميغابايت، ويبلغ الاستهلاك ذروته أثناء الفحص لا أثناء التشغيل. خصص للخادم 1 GB أو 2 GB من RAM، وأنفق بقية الميزانية على التخزين.
ثبّت Navidrome باستخدام Docker Compose
أنشئ الأدلة أولاً، واجعل مالكها هو معرّف المستخدم الذي ستعمل الحاوية به. إذا كان Compose جديداً عليك، يشرح Docker Compose على VPS الافتراضات التي يعتمد عليها هذا الملف.
sudo install -d -m 755 -o 1000 -g 1000 /srv/navidrome /srv/musicاكتب docker-compose.yml ولا تضع بجانبه أي شيء تقريباً، واجعله في دليله الخاص:
services:
navidrome:
image: deluan/navidrome:0.63.2
user: "1000:1000"
ports:
- "127.0.0.1:4533:4533"
restart: unless-stopped
environment:
ND_LOGLEVEL: "info"
ND_SESSIONTIMEOUT: "24h"
ND_SCANNER_SCHEDULE: "@every 24h"
ND_BACKUP_PATH: "/data/backup"
ND_BACKUP_SCHEDULE: "0 4 * * *"
ND_BACKUP_COUNT: "7"
volumes:
- /srv/navidrome:/data
- /srv/music:/music:rodocker compose up -d
docker compose psيجب أن يعرض docker compose ps الخدمة على أنها قيد التشغيل، لا أنها تعيد التشغيل. إعادة تشغيل الحاوية في حلقة تعني غالباً وجود مشكلة في الصلاحيات على /srv/navidrome، ويحدد docker compose logs navidrome اسم الملف الذي تعذّر عليها الكتابة إليه.
هناك أربع نقاط في هذا الملف تستحق التوضيح. نُشر المنفذ على 127.0.0.1 فقط، لذلك يمكن الوصول إلى الخادم عبر الـreverse proxy، وليس عبر المنفذ 4533 من الإنترنت المفتوح: يكتب Docker قواعد جدار ناري خاصة به، لذلك يظل plain 4533:4533` مكشوفاً حتى على خادم يعرض فيه ufw أن كل شيء مرفوض. وحدة تخزين الموسيقى للقراءة فقط، وهذا يعني أن خللاً في الماسح لا يمكنه حذف نسختك الوحيدة. يكون ND_SCANNER_SCHEDULE معطّلاً افتراضياً، وتسمّيه الأدلة المكتوبة قبل Navidrome 0.55 باسم ND_SCANSCHEDULE`، وهو اسم لم يعد موجوداً. تفعّل إعدادات النسخ الاحتياطي الثلاثة النسخ الاحتياطي المضمّن لقاعدة البيانات، الذي يعتمد عليه قسم النسخ الاحتياطي أدناه.
انقل موسيقاك إلى الخادم
انسخ مكتبة الموسيقى باستخدام rsync، إذ يستأنف النقل بدلاً من البدء من جديد عند انقطاع الاتصال.
rsync -av --info=progress2 ~/Music/ user@music.example.com:/srv/music/تُعد الشرطة المائلة في نهاية المسار المصدر مهمة. من دونها تحصل على /srv/music/Music. عند اكتمال النسخ، صحّح الملكية:
sudo chown -R 1000:1000 /srv/music
id -uتعمل الحاوية بمعرّف المستخدم 1000، ويكون الربط للقراءة فقط، لذلك يجب أن يكون كل ملف قابلاً للقراءة بواسطة ذلك المعرّف. إذا لم يكن حساب SSH لديك يحمل uid 1000 على VPS، فستصل الملفات المنسوخة مملوكةً لمستخدم آخر، ولن يعثر الفحص على أي مسارات، بينما تظل واجهة الويب فارغة دون إظهار خطأ. يطبع id -u معرّفك الفعلي، ويشرح كيفية عمل PUID وPGID في حاويات Docker عملية المطابقة بالتفصيل.
Reverse Proxy وTLS لكي يعمل الهاتف من أي مكان
وجّه سجل DNS من النوع A إلى VPS، ثم أضف إلى Caddy ثلاثة أسطر:
music.example.com {
reverse_proxy 127.0.0.1:4533
}sudo systemctl reload caddyيطلب Caddy الشهادة عند أول طلب. يجب فتح المنفذين 80 و443، لأن تحدي ACME (بيئة إدارة الشهادات التلقائية) تتم الإجابة عنه على المنفذ 80. في nginx، أضف proxy_buffering off; إلى كتلة location: يرسل Navidrome أحداث التقدم إلى واجهة الويب عبر اتصال واحد طويل الأمد. وعند تفعيل التخزين المؤقت، تنتظر الواجهة استجابة ما يزال nginx يحتفظ بها. إذا شغّلت الخدمة تحت مسار مثل /music بدلاً من نطاق فرعي مستقل، فاضبط ND_BASEURL على المسار نفسه، وإلا فستُحمَّل الواجهة كصفحة فارغة. تُقارَن الوكلاء العكسيون الثلاثة الشائعون في Nginx وCaddy وTraefik على VPS.
افتح الموقع وأنشئ الحساب الأول. لا توجد كلمة مرور افتراضية. سيُطلب من أول زائر إنشاء مستخدم المسؤول، لذا نفّذ ذلك قبل إخبار أي شخص بالعنوان. اختبر بعد ذلك المسار الدقيق الذي يستخدمه عميل الهاتف:
SALT=$(openssl rand -hex 6)
TOKEN=$(printf '%s%s' 'YOUR_PASSWORD' "$SALT" | md5sum | cut -d' ' -f1)
curl -s "https://music.example.com/rest/ping.view?u=YOUR_USER&t=$TOKEN&s=$SALT&v=1.16.1&c=curl&f=json"تبدأ الاستجابة السليمة بـ {"subsonic-response":{"status":"ok" وتذكر navidrome نوع الخادم. يعني وجود "status":"failed" في النص مع رمز الخطأ 40 أن الوكيل العكسي يعمل وأن بيانات الاعتماد غير صحيحة. يجب إصلاح خطأ الشهادة أولاً في هذه المرحلة، لأن معظم عملاء الهاتف يرفضون الشهادة غير الصحيحة برسالة لا توضح للمستخدم السبب.
لماذا تبدو مكتبتك غير صحيحة بعد الفحص الأول
يتصفح Navidrome الموسيقى باستخدام الوسوم بدلاً من المجلدات، لذلك تحدد الوسوم ما تراه. إذا لم يحتوي المسار على وسم فنان الألبوم، يُدرج ضمن فنان المسار. لذلك قد تتحول مجموعة واحدة تضم فناناً مختلفاً في كل مسار إلى 20 ألبوماً، يحتوي كل منها على مسار واحد. أصلح ذلك في الملفات، لا في Navidrome. يبحث كل من MusicBrainz Picard وbeets عن الألبوم في قاعدة بيانات MusicBrainz، ثم يكتبان الوسوم القياسية في الملفات.
يقسم Navidrome أيضاً وسم الفنانين المتعددين إلى فنانين منفصلين. لذلك قد يُقسَّم اسم فرقة يحتوي على فاصل بالخطأ، ومن الأمثلة المعروفة AC/DC. يحتوي ND_SCANNER_ARTISTSPLITEXCEPTIONS على الأسماء التي يجب ألا تُقسَّم مطلقاً.
يكتشف مراقب الملفات الملفات الجديدة بعد بضع ثوانٍ من إضافتها. يعتمد هذا المراقب على إشعارات تغييرات النواة، ولا تصل هذه الإشعارات إلى الملفات المكتوبة على مشاركة شبكة مركّبة من جهاز آخر. لذلك، في هذا النوع من الإعداد، تحافظ ND_SCANNER_SCHEDULE الدورية على تحديث المكتبة. يقرأ الفحص الكامل وسوم كل ملف، ويستغرق ذلك وقتاً طويلاً في المكتبات الكبيرة. وهذا أحد أسباب أهمية حماية قاعدة البيانات الواردة أدناه.
المستخدمون وقوائم التشغيل والمشاركة
ينشئ المسؤول الحسابات الأخرى من واجهة الويب، ولا يتوفر تسجيل ذاتي. يحصل كل مستخدم على أعداد تشغيل وقوائم تشغيل ومفضلات وتقييمات منفصلة، لذلك لا تنتهي الأسرة إلى مشاركة ملف تفضيلات واحد.
تصل قوائم التشغيل من مصدرين. تُخزَّن قائمة التشغيل التي ينشئها المستخدم في قاعدة البيانات. ويُستورَد ملف .m3u يوضع في مجلد المكتبة أثناء الفحص، وهي طريقة سهلة لنقل قوائم التشغيل من مشغّل موسيقى على سطح المكتب. قوائم التشغيل الذكية هي ملفات .nsp، وهي ملفات JSON صغيرة تحتوي على قواعد وتُستورَد بالطريقة نفسها، ثم تُحدِّث نفسها مع تغيّر المكتبة.
تكون المشاركة مفعّلةً افتراضياً بدءاً من الإصدار 0.63.0، الذي صدر في يوليو 2026. وتتيح للمستخدم إنشاء رابط عام لألبوم يمكن لأي شخص فتحه من دون تسجيل الدخول. وقد لا يكون ذلك مناسباً على خادم يحتوي على مكتبتك كاملة، ويؤدي ضبط ND_ENABLESHARING على false إلى تعطيلها.
أنشئ نسخة احتياطية لقاعدة البيانات بشكل منفصل عن ملفات الموسيقى
تغطي النسخة الاحتياطية التي ينشئها Navidrome قاعدة البيانات فقط. وتوضح الوثائق ذلك صراحةً: تنسخ عملية النسخ الاحتياطي قاعدة البيانات، بما في ذلك المستخدمين وعدد مرات التشغيل وغير ذلك، لكنها لا تنسخ الموسيقى أو الإعدادات. هذا الفصل هو الطريقة الصحيحة للتفكير في الأمر، لأن الجزأين يتعرضان لأنواع مختلفة من الأعطال. يمكن نسخ ملفات الموسيقى مجدداً من القرص الذي استخرجت الملفات منه. أما أعداد مرات التشغيل والتقييمات والمفضلة وقوائم التشغيل فلا توجد في أي مكان آخر، ولا يعيدها الفحص.
ينشئ ملف compose بالفعل نسخة ليلية في /data/backup ويحتفظ بسبع نسخ منها. أنشئ نسخة يدوياً قبل الترقية:
sudo docker compose run --rm navidrome backup createيمسح الاسترداد قاعدة البيانات الحالية وينسخ النسخة الاحتياطية إلى مكانها، ويجب تشغيله أثناء إيقاف Navidrome. لا يكون الاسترداد آمناً على خادم قيد التشغيل.
تبقى هذه الملفات على VPS نفسه، لذلك لن تصمد أمام فقدان VPS. ادفع /srv/navidrome إلى جهاز آخر أو إلى تخزين كائنات وفق جدول زمني. هذه هي المهمة التي صُمّم لها restic وBorgBackup. الدليل بأكمله صغير، وعادةً ما يكون حجمه أقل بكثير من غيغابايت واحد، لذلك لا تكاد تكلفة إنشاء نسخة يومية مشفّرة خارج الخادم تُذكر، لكنها تستعيد كل ما لا يستطيع الفحص استعادته.
FAQ
هل أحتاج إلى تحويل ترميز الموسيقى على VPS؟
يكاد ذلك لا يكون ضرورياً أبداً. تفكّ الهواتف والمتصفحات ترميز MP3 وAAC وOpus وFLAC بنفسها، لذلك يرسل الخادم الملف كما هو ويستخدم قدراً ضئيلاً جداً من CPU. توجد حالة واحدة تستحق تفعيله فيها: بث مكتبة FLAC عبر بيانات الهاتف المحمول، إذ إن التحويل من نحو 900 kbps إلى Opus بمعدل 128 kbps يقلل البيانات المستخدمة بنحو سبع مرات. يستطيع Navidrome إجراء ذلك لكل مستخدم ولكل مشغّل، ويظل معطّلاً حتى تفعّله.
لماذا لا يستطيع تطبيق الهاتف تنزيل الموسيقى للاستماع إليها دون اتصال؟
لأن التخزين دون اتصال ميزة في العميل، وليس في الخادم. تتيح Subsonic API لأي عميل جلب ملف كامل، لكن التطبيق هو الذي يقرر ما إذا كان سيحتفظ بنسخة على الهاتف. راجع دليل العملاء في navidrome.org/apps، واختر عميلاً يذكر وصفه التنزيل دون اتصال أو التخزين المؤقت. تخزّن بعض العملاء مؤقتاً ما شغّلته مسبقاً فقط، وهذا يختلف عن مزامنة ألبوم قبل السفر.
لماذا انقسم ألبوم واحد إلى عدة ألبومات بعد الفحص؟
إن وسم فنان الألبوم مفقود أو غير متسق بين المقاطع. يجمع Navidrome المقاطع وفق الوسوم لا وفق المجلدات، لذلك تبدو 12 مقطوعة تحمل 12 قيمة مختلفة للفنان ولا تحمل قيمة مشتركة لفنان الألبوم كأنها 12 ألبوماً. عيّن وسم فنان الألبوم لكل مقطع في الألبوم، وعادةً تكون قيمته Various Artists في التجميعات، ثم اتركه يعيد الفحص. يستطيع MusicBrainz Picard أو beets تنفيذ ذلك لمجلد كامل دفعة واحدة.
هل يحل بث الموسيقى المستضاف ذاتياً محل Spotify؟
إنه يستبدل المشغّل والمكتبة، لا الكتالوج. ستحصل على مجموعتك الخاصة على كل جهاز، مع قوائم التشغيل وعدد مرات التشغيل التي لا يستطيع أي تغيير في التراخيص انتزاعها منك. لكنك لن تحصل على الإصدارات الجديدة أو التوصيات المبنية على استماع الآخرين. يشتري معظم من يشغّلون هذا النوع من الخدمات موسيقاهم ويحتفظون بحساب بث منخفض التكلفة لاكتشاف موسيقى جديدة.