SSD Nodes Learn Hosting plans →
راهنماها Matt Connorتوسط Matt Connor

راهنمای راه‌اندازی استریم موسیقی شخصی روی VPS با Navidrome

با نصب Navidrome روی VPS، آرشیو موسیقی خود را به سرویس استریم شخصی تبدیل کنید. این راهنما شامل تنظیمات TLS، مدیریت فضای دیسک، استفاده از کلاینت‌های Subsonic و روش‌های تهیه بک‌آپ است.

مزایای استریم موسیقی به صورت self-hosted روی یک VPS

استریم موسیقی به صورت self-hosted روی یک VPS به این معناست که شما هم نرم‌افزار پخش‌کننده را اجرا می‌کنید و هم فایل‌های موسیقی را تأمین می‌کنید. سرور، فایل‌هایی را که از قبل مالکیت آن‌ها را دارید میزبانی می‌کند و هر گوشی هوشمندی می‌تواند از طریق اینترنت و با یک ورود ساده به آن دسترسی داشته باشد. پیش از شروع، صادقانه به این نکته توجه کنید: این روش جایگزین پخش‌کنندهٔ یک سرویس استریم می‌شود، نه کاتالوگ آن. تا زمانی که موسیقی جدیدی نخرید یا آن را rip نکنید و فایلش را روی سرور کپی نکنید، هیچ محتوای جدیدی به کتابخانهٔ شما اضافه نخواهد شد.

فشار فایل‌های صوتی بر سرور بسیار کمتر از ویدیو است. حجم فایل‌ها کوچک است، گوشی‌ها تمامی فرمت‌های رایج را بدون نیاز به کمک پردازش می‌کنند و هر شنونده پهنای باند کمتری نسبت به یک تماس ویدیویی مصرف می‌کند. در این سناریو، CPU چالش اصلی نیست؛ فضای دیسک محدودیت واقعی است. دو عامل دیگر که موفقیت این راهکار را تعیین می‌کنند، کیفیت تگ‌های فایل‌های شما و قابلیت اپلیکیشن گوشی برای دانلود موسیقی جهت استفادهٔ آفلاین است.

Navidrome انتخاب پیش‌فرض زمانی است که فقط به صدا اهمیت می‌دهید. این برنامه یک فایل اجرایی Go در یک کانتینر است و وضعیت خود را در یک دیتابیس SQLite واحد نگه می‌دارد. این سرور به API مربوط به Subsonic پاسخ می‌دهد؛ دلیلی که باعث شده خانواده بزرگی از اپلیکیشن‌های موبایل شخص ثالث برای آن وجود داشته باشد. نسخه 0.64.2 که در سپتامبر 2026 منتشر شد، در تاریخ 2026-10-10 نسخه جاری بود. هیچ نسخه‌ای قدیمی‌تر از 0.64.1 را اجرا نکنید، چرا که آن نسخه پنج آسیب‌پذیری امنیتی، از جمله حدس زدن نامحدود رمز عبور در ورود به Subsonic را برطرف کرد. این پروژه بیان می‌کند که نرم‌افزار روی سخت‌افزارهای محدود از نظر منابع مانند Raspberry Pi به‌خوبی اجرا می‌شود، بنابراین نرم‌افزار سرور بخشی نیست که بابت آن هزینه‌ای بپردازید.

Jellyfin اگر از قبل Jellyfin را به عنوان سرور رسانه روی یک VPS برای ویدیو اجرا می‌کنید، ارزش استفاده دارد. کتابخانه موسیقی آن کار می‌کند و Finamp یک اپلیکیشن موسیقی رایگان Jellyfin برای Android و iOS است که آهنگ‌ها را برای گوش دادن آفلاین دانلود می‌کند. خود Jellyfin هنوز نقطه پایانی (endpoint) داخلی Subsonic ندارد، اما یک پلاگین اجتماعی آن را اضافه می‌کند. Subfin-NG که انشعابی (fork) از پلاگین Subfin است، با افزودن API مربوط به OpenSubsonic به Jellyfin، «به اپلیکیشن‌های موسیقی سازگار با Subsonic اجازه می‌دهد کتابخانه موسیقی Jellyfin شما را پخش کنند». این پلاگین به Jellyfin نسخه 12.1 یا بالاتر نیاز دارد و بین 24 تا 28 سپتامبر 2026 سه نسخه منتشر کرد. بنابراین اپلیکیشن‌های Subsonic نیز می‌توانند از طریق یک پلاگین شخص ثالث، نه یک ویژگی اصلی، به Jellyfin دسترسی پیدا کنند و ارزش دارد که کلاینت انتخابی خود را پیش از تکیه بر آن، تست کنید. این پل در جهت دیگر نیز کار می‌کند: Navidrome 0.64.0 یک API آزمایشی Jellyfin اضافه کرد که به‌صورت پیش‌فرض خاموش است و با ND_JELLYFIN_ENABLED روشن می‌شود؛ مستندات آن می‌گوید که این قابلیت با Finamp، Jellify و Feishin تست شده است.

Funkwhale گزینه فدرال است و نسخه 2.0 آن در مارس 2026 منتشر شد. یک سرور Funkwhale، پاد (pod) نامیده می‌شود؛ پادها از طریق ActivityPub (پروتکل پشت Mastodon) فدره می‌شوند و کاربران لیست‌های پخش یکدیگر را در پادهای مختلف دنبال می‌کنند. نسخه 2.0 کتابخانه‌های قدیمی را با لیست‌های پخش جایگزین کرد و دنبال کردن کتابخانه‌ها را به دنبال کردن لیست‌های پخش تبدیل کرد؛ یک پاد نسخه 2.0 با پادهایی که هنوز نسخه 1.x را اجرا می‌کنند، فدره نمی‌شود. این سرور نیز به بخشی از API مربوط به Subsonic پاسخ می‌دهد، با یک تفاوت که دانستن آن ارزشمند است: هر کاربر یک رمز عبور جداگانه Subsonic در تنظیمات خود تعیین می‌کند، زیرا پروتکل Subsonic انتظار رمز عبوری را دارد که سرور بتواند آن را بازخوانی کند. نصب Funkwhale سنگین‌تر است، زیرا علاوه بر وب‌اپلیکیشن، به PostgreSQL و یک صف وظیفه (task queue) نیاز دارد.

اگر به قابلیت فدرال نیاز دارید یا Jellyfin از قبل در حال اجرا است، Navidrome را انتخاب نکنید. باقی این راهنما به راه‌اندازی Navidrome با Docker می‌پردازد.

چرا API نرم‌افزار Subsonic تعیین می‌کند از چه اپلیکیشن موبایلی استفاده کنید

نرم‌افزار Subsonic یک سرور موسیقی بود که API مبتنی بر HTTP آن به زبان مشترک برای سرویس‌های صوتی self-hosted تبدیل شد و OpenSubsonic پروژه‌ای جامعه‌محور است که به توسعهٔ آن ادامه می‌دهد. همین پیشینه باعث شده است که شما برای گوشی خود حق انتخاب داشته باشید. Navidrome هیچ اپلیکیشن موبایل اختصاصی ارائه نمی‌کند و نیازی هم به آن ندارد، زیرا هر کلاینت Subsonic با استفاده از آدرس سرور و مشخصات حساب کاربری شما به آن متصل می‌شود.

این موضوع بیش از هر چیز برای قابلیت همگام‌سازی آفلاین (offline sync) اهمیت دارد؛ قابلیتی که تعیین می‌کند آیا این سیستم در استفادهٔ روزمره کارآمد است یا خیر. گوشی شما در داخل تونل به سرور دسترسی ندارد، بنابراین کلاینت باید فایل‌ها را از قبل در حافظهٔ محلی ذخیره کرده باشد. همهٔ کلاینت‌ها قابلیت استریم دارند، اما فقط برخی از آن‌ها امکان دانلود را فراهم می‌کنند. فهرست کلاینت‌ها در navidrome.org/apps مشخص می‌کند کدام‌یک از این قابلیت پشتیبانی می‌کنند و تنوع انتخاب در هر دو پلتفرم زیاد است: Substreamer و Ultrasonic در Android، و Amperfy و play:Sub در iOS. چندین مورد از قدرتمندترین کلاینت‌ها پولی هستند و Symfonium در Android گزینه‌ای است که کاربران بیش از همه از آن نام می‌برند. پیش از تصمیم‌گیری نهایی، دو مورد را نصب و امتحان کنید، زیرا این بخشی از سیستم است که هر روز با آن سروکار دارید.

کتابخانه موسیقی به چه مقدار فضای ذخیره‌سازی نیاز دارد؟

نمودارStorage per 1,000 albums by audio format
داده‌های پشت این نمودار
[
  {
    "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"
  }
]

این ارقام، مقادیر تقریبی بر اساس نرخ بیت (bitrate) هستند و اندازه‌گیری دقیق یک مجموعه واقعی نیستند؛ محاسبه آن نیز به قدری ساده است که می‌توانید با فایل‌های خودتان آن را بررسی کنید. یک آلبوم را 45 دقیقه در نظر بگیرید که معادل 2700 ثانیه است. نرخ بیت به کیلوبیت بر ثانیه را در 2700 ضرب کرده و سپس بر 8000 تقسیم کنید تا حجم به مگابایت به‌دست آید. با نرخ 320 kbps، حجم یک آلبوم حدود 108 مگابایت خواهد بود، بنابراین هزار آلبوم حدود 108 گیگابایت فضا اشغال می‌کند.

فرمت‌های بدون افت کیفیت (Lossless) پاسخ را تغییر می‌دهند. فایل‌های FLAC با کیفیت CD به‌طور میانگین نزدیک به 900 kbps در محتوای معمولی هستند، بنابراین همان هزار آلبوم به حدود 304 گیگابایت فضا نیاز دارد. یک کتابخانه 24 بیتی با نرخ نمونه‌برداری 96 کیلوهرتز، به حدود 1,013 گیگابایت می‌رسد؛ یعنی یک ترابایت کامل برای مجموعه‌ای که لیست آن را می‌توان روی کاغذ نوشت. یک نسخه Opus مناسب برای گوشی با نرخ 128 kbps، همان هزار آلبوم را در 43 گیگابایت جای می‌دهد. دستور du -sh /path/to/music را روی کتابخانه‌ای که هم‌اکنون دارید اجرا کنید، زیرا هنگام انتخاب طرح، تنها میانگین نرخ بیت فایل‌های خودتان اهمیت دارد.

پهنای باند بخش کوچک‌تر هزینه‌هاست. یک استریم 320 kbps معادل 40 کیلوبایت بر ثانیه است، بنابراین یک ساعت گوش دادن حدود 144 مگابایت ترافیک مصرف می‌کند. صد ساعت در ماه حدود 14 گیگابایت می‌شود که هیچ محدودیت انتقال داده‌ای در VPSها آن را حس نمی‌کند. استثنا، اولین همگام‌سازی آفلاین گوشی است که می‌تواند در یک شب ده‌ها گیگابایت ترافیک ایجاد کند.

لایه ذخیره‌سازی یا لایه پردازشی؟

یک سرور موسیقی مجموعه‌ای حجیم از داده‌های سرد (cold data) است که تقریباً هیچ پردازش سنگینی روی آن انجام نمی‌شود. خواندن یک فایل با سرعت 40 کیلوبایت بر ثانیه، هر دیسکی را در حالت بیکار نگه می‌دارد و CPU تنها در زمان اسکن کتابخانه، در حین transcoding (که احتمالاً به ندرت انجام خواهید داد)، و هنگام استخراج و کش کردن کاور آلبوم‌ها—در زمان اسکن یا اولین باری که کاربر فایلی را باز می‌کند—درگیر می‌شود. بنابراین، NVMe پرسرعت در یک پلن پردازشی در اینجا هیچ مزیتی برای شما ندارد، در حالی که قیمت آن به ازای هر گیگابایت، مانع اصلی شما برای آپلود نسخه‌های FLAC خواهد بود. این دقیقاً موردی است که یک VPS ذخیره‌سازی بر یک VPS معمولی برتری دارد، زیرا قیمت‌گذاری آن پلن‌ها بر اساس ترابایت است و نه تعداد هسته پردازنده.

میزان حافظه مورد نیاز ناچیز است. Navidrome یک کتابخانه شخصی را با چند صد مگابایت رم مدیریت می‌کند و اوج مصرف حافظه در زمان اسکن رخ می‌دهد، نه در حین پخش موسیقی. به سرور خود 1 GB یا 2 GB رم اختصاص دهید و باقی بودجه را صرف دیسک کنید.

ابتدا دایرکتوری‌ها را ایجاد کنید و مالکیت آن‌ها را به شناسه کاربری که قرار است کانتینر با آن اجرا شود، اختصاص دهید. اگر با 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.64.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:ro
docker compose up -d
docker compose ps

docker compose ps باید وضعیت سرویس را به جای restarting، در حالت running نشان دهد. کانتینری که در یک حلقه مدام restart می‌شود، تقریباً همیشه با مشکل مجوز دسترسی در /srv/navidrome مواجه است و docker compose logs navidrome نام فایلی را که امکان نوشتن در آن وجود نداشته، مشخص می‌کند.

چهار جزئیات در این فایل قابل توضیح است. پورت فقط روی 127.0.0.1 منتشر شده است، بنابراین سرور از طریق reverse proxy در دسترس است و نه از طریق پورت 4533 در اینترنت عمومی: Docker قوانین فایروال خود را اعمال می‌کند، بنابراین یک 4533:4533 ساده حتی در سروری که ufw همه چیز را مسدود کرده است، همچنان در معرض دسترسی قرار می‌گیرد. حجم موسیقی (music volume) فقط‌خواندنی (read-only) است، به این معنی که یک باگ در اسکنر نمی‌تواند تنها نسخه فایل‌های شما را حذف کند. ND_SCANNER_SCHEDULE به‌صورت پیش‌فرض غیرفعال است و راهنماهایی که پیش از نسخه 0.55 نوشته شده‌اند، آن را ND_SCANSCHEDULE می‌نامند که نام قدیمی است و در نسخه 0.55 تغییر کرده است. سه تنظیم پشتیبان‌گیری، قابلیت پشتیبان‌گیری داخلی دیتابیس را فعال می‌کنند که بخش پشتیبان‌گیری در ادامه به آن وابسته است.

انتقال موسیقی به سرور

کتابخانه موسیقی خود را با استفاده از 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 اجرا می‌شود و mount به‌صورت فقط‌خواندنی (read-only) است؛ بنابراین این شناسه باید به تمام فایل‌ها دسترسی خواندن و به تمام دایرکتوری‌ها دسترسی پیمایش (traversal) داشته باشد. اگر فایل‌های کپی‌شده متعلق به حساب کاربری دیگری باشند و مجوزهایی داشته باشند که دسترسی دیگران را مسدود کند، اسکنر هیچ فایلی پیدا نمی‌کند، رابط کاربری وب خالی می‌ماند و لاگ‌ها open /music: permission denied را نشان می‌دهند. دستور chown در بالا یکی از راه‌حل‌هاست. اگر برنامه‌های دیگری نیز از این پوشه استفاده می‌کنند، مستندات Docker مربوط به Navidrome پیشنهاد می‌کند بدون تغییر مالک، دسترسی خواندن را برای همه باز کنید: sudo chmod -R a+rX /srv/music. دستور 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 گواهی TLS را در اولین درخواست دریافت می‌کند. پورت 443 باید باز باشد. Caddy ابتدا تلاش می‌کند چالش ACME (محیط مدیریت خودکار گواهی) را از طریق HTTP روی پورت 80 انجام دهد و اگر موفق نشد، به سراغ چالش TLS-ALPN روی پورت 443 می‌رود؛ بنابراین بسته بودن پورت 80 مانع دریافت گواهی نمی‌شود. با این حال، پورت 80 را باز بگذارید، زیرا Caddy از آن برای هدایت خودکار (redirect) ترافیک HTTP به HTTPS استفاده می‌کند. در nginx، عبارت proxy_buffering off; را به بلوک location اضافه کنید: Navidrome رویدادهای پیشرفت را از طریق یک اتصال طولانی‌مدت به رابط وب ارسال می‌کند و اگر buffering فعال باشد، رابط کاربری منتظر پاسخی می‌ماند که nginx هنوز آن را نگه داشته است. اگر سرویس را به جای زیردامنه (subdomain) اختصاصی، در مسیری مانند /music ارائه می‌دهید، مقدار ND_BASEURL را روی همان مسیر تنظیم کنید، در غیر این صورت رابط کاربری به صورت یک صفحه خالی بارگذاری می‌شود. سه پروکسی رایج در Nginx, Caddy and Traefik on a VPS مقایسه شده‌اند.

سایت را باز کرده و اولین حساب کاربری را ایجاد کنید. رمز عبور پیش‌فرضی وجود ندارد و اولین بازدیدکننده باید کاربر مدیر (admin) را بسازد؛ بنابراین پیش از آنکه آدرس را در اختیار کسی قرار دهید، این کار را انجام دهید. سپس مسیری که کلاینت گوشی استفاده می‌کند را دقیقاً تست کنید:

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 باشد، به این معنی است که پروکسی به درستی کار می‌کند و اعتبارنامه‌ها (credentials) اشتباه هستند. خطای گواهی در این مرحله اولین چیزی است که باید رفع شود، زیرا اکثر کلاینت‌های موبایل گواهی نامعتبر را رد می‌کنند و پیامی نمایش می‌دهند که هیچ اطلاعات مفیدی به کاربر نمی‌دهد.

چرا کتابخانه شما پس از اولین اسکن به‌درستی نمایش داده نمی‌شود

Navidrome به‌جای پوشه‌ها، بر اساس تگ‌ها (tags) مرور می‌کند؛ بنابراین آنچه می‌بینید توسط تگ‌ها تعیین می‌شود. آهنگی که تگ album artist ندارد، تحت عنوان track artist دسته‌بندی می‌شود. به همین دلیل است که یک آلبوم مجموعه‌ای (compilation) که در هر آهنگ هنرمند متفاوتی دارد، به بیست آلبوم تک‌آهنگی تبدیل می‌شود. این مشکل را در فایل‌ها اصلاح کنید، نه در Navidrome: ابزارهای MusicBrainz Picard و beets هر دو می‌توانند یک آلبوم را در پایگاه داده MusicBrainz جستجو کرده و تگ‌های استاندارد را روی فایل‌ها بازنویسی کنند.

Navidrome همچنین تگ‌های چند-هنرمندی را به هنرمندان جداگانه تقسیم می‌کند؛ بنابراین نام گروهی که شامل جداکننده (separator) باشد به اشتباه تفکیک می‌شود. AC/DC نمونه‌ای است که همه با آن مواجه می‌شوند. ND_SCANNER_ARTISTSPLITEXCEPTIONS شامل نام‌هایی است که هرگز نباید تقسیم شوند.

فایل‌های جدید چند ثانیه پس از قرارگیری در مسیر، توسط یک file watcher شناسایی می‌شوند. این watcher به اعلان‌های تغییر هسته (kernel change notifications) وابسته است و این اعلان‌ها برای فایل‌هایی که روی یک network share (که از ماشین دیگری mount شده) نوشته می‌شوند، ارسال نمی‌گردند. بنابراین در چنین تنظیماتی، استفاده از ND_SCANNER_SCHEDULE دوره‌ای تنها راه به‌روز نگه داشتن کتابخانه است. یک اسکن کامل (full rescan) تگ‌های تمام فایل‌ها را می‌خواند که در کتابخانه‌های بزرگ فرآیندی کند است؛ این یکی از دلایلی است که محافظت از پایگاه داده در ادامه اهمیت دارد.

کاربران، لیست‌های پخش و اشتراک‌گذاری

مدیر سیستم حساب‌های دیگر را در رابط وب ایجاد می‌کند و امکان ثبت‌نام توسط خود کاربر وجود ندارد. هر کاربر تعداد دفعات پخش، لیست‌های پخش، موارد دلخواه و امتیازات جداگانه‌ای دارد، بنابراین سلیقهٔ موسیقی اعضای یک خانواده با یکدیگر ترکیب نمی‌شود.

لیست‌های پخش از دو طریق وارد می‌شوند. لیست پخشی که در یک کلاینت ساخته شود، در دیتابیس ذخیره می‌گردد. یک فایل .m3u که در پوشهٔ کتابخانه قرار داده شود، در حین اسکن وارد می‌شود؛ این ساده‌ترین روش برای انتقال لیست‌های پخش از یک پخش‌کنندهٔ دسکتاپ است. لیست‌های پخش هوشمند در واقع فایل‌های .nsp هستند؛ فایل‌های کوچک JSON که حاوی قوانین بوده و به همان روش وارد می‌شوند و با تغییر کتابخانه، خودبه‌خود به‌روزرسانی می‌گردند.

قابلیت اشتراک‌گذاری به‌صورت پیش‌فرض از نسخه 0.63.0 که در ژوئیه 2026 منتشر شد، فعال است. این قابلیت به کاربر اجازه می‌دهد یک لینک عمومی برای یک آلبوم ایجاد کند که هر کسی بدون نیاز به ورود به سیستم، قادر به باز کردن آن باشد. در سروری که کل کتابخانهٔ شما را میزبانی می‌کند، ممکن است این رفتار مطلوب نباشد؛ تنظیم ND_ENABLESHARING روی false این قابلیت را غیرفعال می‌کند.

پشتیبان‌گیری از پایگاه داده به‌صورت جداگانه از فایل‌های موسیقی

پشتیبان‌گیری خود Navidrome تنها شامل پایگاه داده است. مستندات در این مورد صریح هستند: فرایند پشتیبان‌گیری فقط از پایگاه داده شامل کاربران، تعداد دفعات پخش و سایر موارد نسخه تهیه می‌کند و شامل موسیقی یا فایل‌های پیکربندی نمی‌شود. این تفکیک، رویکرد درستی است زیرا این دو بخش به شیوه‌های متفاوتی دچار خرابی می‌شوند. فایل‌های موسیقی را می‌توان دوباره از دیسکی که از آن کپی شده‌اند، بازیابی کرد. اما تعداد دفعات پخش، امتیازها، موارد دلخواه و لیست‌های پخش در جای دیگری وجود ندارند و با اسکن مجدد (rescan) بازگردانده نمی‌شوند.

فایل compose از قبل یک کپی شبانه در /data/backup ایجاد می‌کند و 7 نسخه از آن را نگه می‌دارد. پیش از ارتقا، یک نسخه را به‌صورت دستی تهیه کنید:

sudo docker compose run --rm navidrome backup create

مهاجرت از نسخه 0.63 به 0.64 ارتقایی است که بیش از همه به این کار نیاز دارد. نسخه 0.64.0 تمام شناسه‌های داخلی را در یک عملیات مهاجرت که تمام جداول را تحت تأثیر قرار می‌دهد، دوباره کدگذاری می‌کند و کلاینت‌هایی که دانلودهای آفلاین دارند، ممکن است پس از آن نیاز به همگام‌سازی مجدد داشته باشند.

بازیابی، پایگاه داده فعلی را پاک کرده و نسخه پشتیبان را جایگزین آن می‌کند؛ این کار باید زمانی انجام شود که Navidrome متوقف شده است. هیچ بخشی از فرایند بازیابی روی یک سرور در حال اجرا ایمن نیست.

این فایل‌ها همچنان روی همان VPS قرار دارند، بنابراین در صورت خرابی VPS از بین می‌روند. طبق یک زمان‌بندی مشخص، /srv/navidrome را به ماشین دیگری یا به فضای ذخیره‌سازی شیء (object storage) منتقل کنید؛ این همان کاری است که restic و BorgBackup برای آن ساخته شده‌اند. کل این دایرکتوری کوچک است و معمولاً حجم آن بسیار کمتر از 1 گیگابایت است، بنابراین تهیه یک کپی رمزنگاری‌شده روزانه در خارج از سرور، تقریباً هزینه‌ای ندارد و تمام اطلاعاتی را که با اسکن مجدد قابل بازیابی نیستند، حفظ می‌کند.

FAQ

آیا نیاز دارم موسیقی را روی VPS ترنسکد (transcode) کنم؟

تقریباً هرگز. گوشی‌ها فایل‌های MP3، AAC، Opus و FLAC را به‌صورت بومی رمزگشایی می‌کنند و مرورگرهای امروزی در اکثر سیستم‌ها نیز همین‌طور هستند؛ بنابراین سرور فایل را همان‌طور که هست ارسال می‌کند و تقریباً هیچ پردازشی از CPU نمی‌گیرد. مرورگرها تنها جایی هستند که باید بررسی شوند: Firefox تنها زمانی AAC را پخش می‌کند که سیستم‌عامل یا یک کتابخانهٔ خارجی رمزگشا (decoder) را تأمین کند، بنابراین ممکن است یک کتابخانهٔ AAC در پخش‌کنندهٔ تحت وب به استریم ترنسکدشده نیاز داشته باشد. موردی که فعال‌سازی آن بیشترین ارزش را دارد، کتابخانهٔ FLAC است که از طریق دیتای موبایل استریم می‌شود؛ جایی که تبدیل از حدود 900 کیلوبیت‌برثانیه به Opus در 128 کیلوبیت‌برثانیه، مصرف دیتا را تقریباً 7 برابر کاهش می‌دهد. Navidrome از نسخه 0.61 مدیریت ترنسکد را روی سرور انجام می‌دهد: این برنامه کدک‌های پشتیبانی‌شده توسط کلاینت را شناسایی می‌کند، نرخ بیت پیش‌فرض متناسب با فرمت را اعمال می‌کند و به شما اجازه می‌دهد نرخ بیت را برای هر پخش‌کننده محدود کنید.

چرا اپلیکیشن گوشی من نمی‌تواند موسیقی را برای گوش دادن آفلاین دانلود کند؟

زیرا ذخیره‌سازی آفلاین یک قابلیت کلاینت است، نه سرور. API مربوط به Subsonic به هر کلاینتی اجازه می‌دهد یک فایل کامل را دریافت کند، اما این اپلیکیشن است که تصمیم می‌گیرد نسخه‌ای از آن را روی گوشی نگه دارد یا خیر. دایرکتوری کلاینت‌ها را در navidrome.org/apps بررسی کنید و موردی را انتخاب کنید که در توضیحاتش به دانلود آفلاین یا کش کردن اشاره شده باشد. برخی کلاینت‌ها فقط آنچه را که قبلاً پخش کرده‌اید کش می‌کنند، که با همگام‌سازی یک آلبوم پیش از سفر متفاوت است.

چرا یک آلبوم پس از اسکن به چندین آلبوم تقسیم شد؟

تگ album artist در ترک‌ها وجود ندارد یا در کل آلبوم یکسان نیست. Navidrome به‌جای پوشه، بر اساس تگ‌ها گروه‌بندی می‌کند؛ بنابراین دوازده ترک با دوازده مقدار artist متفاوت و بدون مقدار album artist مشترک، مانند دوازده آلبوم مجزا دیده می‌شوند. تگ album artist را برای تمام ترک‌های آلبوم تنظیم کنید (معمولاً برای مجموعه‌ها از عبارت Various Artists استفاده می‌شود) و سپس اجازه دهید دوباره اسکن کند. ابزارهای MusicBrainz Picard یا beets می‌توانند این کار را برای یک پوشه کامل به‌صورت یکجا انجام دهند.

آیا استریم موسیقی به‌صورت self-hosted جایگزین Spotify می‌شود؟

این کار جایگزین پخش‌کننده و کتابخانه می‌شود، نه کاتالوگ. شما مجموعهٔ شخصی خود را روی هر دستگاهی در اختیار دارید، با پلی‌لیست‌ها و تعداد دفعات پخشی که هیچ تغییر در لایسنس نمی‌تواند آن‌ها را از شما بگیرد. شما به انتشار‌های جدید دسترسی ندارید و توصیه‌هایی که بر اساس سلیقهٔ شنیداری دیگران ساخته شده باشد را دریافت نمی‌کنید. اکثر کسانی که این سرویس را اجرا می‌کنند، موسیقی خود را خریداری کرده و یک اکانت ارزان‌قیمت استریم برای کشف موسیقی‌های جدید نگه می‌دارند.

آیا این مقاله مفید بود؟

#navidrome#music#streaming#self-hosting#media-server