آموزش نصب Chaptarr برای مدیریت کتاب صوتی روی VPS
با بازنشستگی Readarr در سال 2025، Chaptarr جایگزین اصلی برای مدیریت کتابهای صوتی است. این راهنما نحوه راهاندازی سرویس Compose با تنظیم PUID و PGID را آموزش میدهد.
Chaptarr چیست و چرا کاربران Readarr به آن نیاز دارند
Chaptarr یک انشعاب (fork) از Readarr است که کتابهای صوتی و الکترونیکی را از یک نمونه (instance) واحد مدیریت میکند. این برنامه انتشار نسخههای جدید را پایش کرده، آنها را به کلاینت دانلود شما میفرستد و سپس نتایج را تغییر نام داده و در کتابخانه شما دستهبندی میکند. این برنامه قابلیت پخش ندارد، بنابراین باید آن را با یک پخشکننده مانند Audiobookshelf جفت کنید.
پروژه Readarr در تاریخ 27 ژوئن 2025 بازنشسته شد. اطلاعیه رسمی تیم Servarr دلیل این امر را اینگونه بیان میکند: متادیتای پروژه غیرقابل استفاده شده بود و تلاش جامعه برای انتقال به Open Library متوقف شد. مخزن این پروژه اکنون آرشیو شده است. این موضوع مجموعههای کتاب و کتاب صوتی را بدون یک مدیر نگهداریشده رها کرد و Chaptarr این وظیفه را بر عهده گرفت. این برنامه ساختاری را که از قبل در Sonarr و Radarr میشناسید (ایندکسرها، کلاینتهای دانلود، پروفایلهای کیفیت، پوشههای ریشه) حفظ کرده و قابلیتهای مدیریت کتاب صوتی را به آن میافزاید: سازماندهی بر اساس گوینده، نسخههای متعدد از یک عنوان، پشتیبانی از M4B و MP3های فصلبندیشده، و تبدیل MP3 به M4B.
این راهنما از تگ ایمیج chaptarr/chaptarr:0.9.925 استفاده کرده است که جدیدترین نسخه در تاریخ 9 اوت 2026 بود. Chaptarr خود را نرمافزار بتا مینامد. پیش از آنکه آن را به کتابخانهای که جایگزینی برایش ندارید متصل کنید، بخش نگهداری در انتهای متن را مطالعه کنید.
پیشنیازهای شروع کار
یک سرور مجازی (VPS) که Docker و افزونه Compose روی آن نصب شده باشد، و فضای دیسک کافی برای کتابخانه. کتابهای صوتی حجم بالایی دارند و فرآیند واردسازی (import) که نتواند از hardlink استفاده کند، برای مدتی دو نسخه از یک فایل را نگه میدارد که در بخش volume در ادامه توضیح داده شده است. اگر Docker هنوز روی سرور شما نصب نیست، با نصب و اجرای Docker روی VPS شروع کنید و سپس به اینجا بازگردید.
Chaptarr در حال حاضر فقط به صورت Docker image عرضه میشود. نسخه بومی ویندوز در حال توسعه است و هیچ بسته توزیعی برای آن وجود ندارد. این کانتینر بهطور پیشفرض پایگاهداده خود را در /config به صورت SQLite ذخیره میکند، و اگر از قبل یک سرور PostgreSQL دارید، میتوانید از طریق متغیرهای محیطی Chaptarr__Postgres__* از آن استفاده کنید. برای یک کاربر روی یک سرور، SQLite انتخاب مناسبی است.
سرویس Compose برای Chaptarr
این سرویس در یک stack موجود قرار میگیرد. این سرویس یک تگ منتشرشده را ثابت (pin) میکند، رابط کاربری وب را فقط روی loopback منتشر میکند و به شبکهای که کلاینت دانلود شما از آن استفاده میکند، متصل میشود.
services:
chaptarr:
image: chaptarr/chaptarr:0.9.925
container_name: chaptarr
environment:
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=Europe/Berlin
volumes:
- ./config:/config
- /srv/media/audiobooks:/audiobooks
- /srv/media/ebooks:/ebooks
- /srv/media/downloads:/downloads
ports:
- 127.0.0.1:8789:8789
restart: unless-stopped
networks:
- arr
networks:
arr:
external: trueخط external: true به این معنی است که «این شبکه از قبل وجود دارد، به آن متصل شو». زمانی از این گزینه استفاده کنید که Prowlarr و کلاینت تورنت شما از یک پروژه Compose متفاوت آمده باشند، زیرا در غیر این صورت یک فایل Compose دوم، شبکه ایزوله مخصوص خود را ایجاد میکند و Chaptarr دیگر نمیتواند qbittorrent را با نام پیدا کند. نام واقعی را از docker network ls دریافت کنید. اگر stack شما از قبل در یک فایل قرار دارد، سرویس chaptarr: را به همان فایل اضافه کنید و کل بلوک networks: را حذف نمایید. طرح کلی در یک stack کامل arr تحت Docker Compose و قوانین نامگذاری در نحوه حل نام سرویسها و شبکههای Compose پوشش داده شده است.
دایرکتوری پیکربندی را خودتان ایجاد کنید و سپس آن را استارت بزنید.
mkdir -p ./config
sudo chown 1000:1000 ./config
docker compose up -d
docker compose ps
docker compose logs -f chaptarrdocker compose ps باید کانتینر را به صورت Up نشان دهد. کانتینری که به صورت Restarting لیست شده باشد، در شروع ناموفق بوده و در حال تلاش مجدد است؛ علت این امر تقریباً همیشه دایرکتوری پیکربندی است. هنگامی که برنامه روی پورت 8789 در حال گوش دادن باشد، لاگ از حرکت باز میایستد.
مقادیر PUID، PGID و دایرکتوریهایی که Docker با دسترسی root ایجاد میکند
اگر مقادیر PUID=99 و PGID=100 را تنظیم نکنید، Chaptarr بهصورت پیشفرض از آنها استفاده میکند. این مقادیر مربوط به unRAID هستند و در یک سرور Ubuntu معمولی، به کاربری که دسترسی مفیدی داشته باشد تعلق ندارند؛ در نتیجه فایلها با مالکی ایجاد میشوند که حساب کاربری شما اجازه نوشتن در آنها را ندارد. شمارههای کاربری و گروه خود را با دستور id -u و id -g مشاهده کرده و در فایل تنظیمات وارد کنید.
هر کانتینری که با فایلهای مشابه سروکار دارد، باید از همان جفت مقدار استفاده کند. کلاینت دانلود در /srv/media/downloads مینویسد، Chaptarr فایل را به /srv/media/audiobooks منتقل میکند و پلیر آن را از همانجا میخواند. اگر کلاینت دانلود با شناسه 1000:1000 بنویسد و Chaptarr با شناسه 99:100 اجرا شود، عملیات انتقال با شکست مواجه میشود، زیرا Chaptarr نمیتواند فایلی را که مالک آن نیست حذف یا جابهجا کند. مقدار UMASK=002 باعث میشود فایلهای جدید برای گروه قابلنوشتن باشند؛ این دقیقاً همان چیزی است که هنگام اشتراکگذاری یک گروه رسانهای بین چندین کانتینر به آن نیاز دارید. نگاشت کامل در نحوه نگاشت PUID و PGID کاربر کانتینر بر فایلهای میزبان توضیح داده شده است.
فایل README درباره یک تله خاص هشدار میدهد که تکرار آن ضروری است. اگر هنگام اجرای docker compose up، مسیر ./config وجود نداشته باشد، Docker آن را برای شما ایجاد میکند و مالکیت آن را به root:root میدهد. در این حالت کانتینر با UID 1000 اجرا میشود و نمیتواند دیتابیس خود را بنویسد، بنابراین متوقف شده و بهطور مداوم ریاستارت میشود. وضعیت را با ls -ln ./config بررسی کنید که مالکیت عددی را بهجای نام نمایش میدهد. دو صفر به این معنی است که مالک فایل root است. مشکل را با sudo chown -R 1000:1000 ./config برطرف کرده و کانتینر را دوباره اجرا کنید.
چرا جدا کردن حجمهای کتاب صوتی و کتاب الکترونیکی باعث از دست رفتن hardlinkها میشود
چیدمان بالا، /audiobooks، /ebooks و /downloads را به عنوان bindهای جداگانه mount میکند که با دستور اجرای خود پروژه مطابقت دارد. این روش خوانایی بالایی دارد، اما یک هزینه واقعی به همراه دارد: hardlinkها از کار میافتند.
یک hardlink نام دومی برای همان داده روی دیسک است. این قابلیت فضای اضافهای اشغال نمیکند و بلافاصله انجام میشود؛ به همین دلیل است که خانواده arr آن را به کپی کردن ترجیح میدهند. یک hardlink فقط در داخل یک فایلسیستم کار میکند. در داخل کانتینر، اینها سه نقطه mount مجزا هستند، بنابراین هسته سیستمعامل (kernel) حتی زمانی که مسیرهای میزبان روی یک دیسک قرار دارند، از ایجاد لینک خودداری میکند. خودتان تست کنید.
docker exec chaptarr sh -c 'touch /downloads/linktest && ln /downloads/linktest /audiobooks/linktest'این دستور با خطایی که به Invalid cross-device link ختم میشود، شکست میخورد. این همان امتناع هسته از لینک کردن بین نقاط mount مختلف است و دقیقاً به همین دلیل است که Chaptarr به کپی کردن فایل بازمیگردد. کپی انجامشده صحیح است اما سرعت کمتری دارد و کتاب صوتی تا زمانی که تورنت را حذف نکنید، دو بار وجود خواهد داشت؛ کاری که تا زمانی که در حال seed کردن هستید، انجام نخواهید داد. پس از آن /srv/media/downloads/linktest را حذف کنید.
برای حفظ hardlinkها، به جای آن یک دایرکتوری والد را mount کنید:
volumes:
- ./config:/config
- /srv/media:/dataسپس پوشههای ریشه (root folders) را در Chaptarr روی /data/audiobooks و /data/ebooks تنظیم کنید و به کلاینت دانلود نیز همان mount مربوط به /srv/media:/data را بدهید تا هر دو کانتینر یک مسیر یکسان را ببینند. ابتدا تأیید کنید که سمت میزبان یک فایلسیستم واحد است: df -h /srv/media/downloads /srv/media/audiobooks باید برای هر دو، مقدار یکسانی را در ستون Filesystem چاپ کند. مقادیر متفاوت به معنای دیسکهای متفاوت است و هیچ چیدمان mountای نمیتواند بین آنها hardlink ایجاد کند. تفاوت بین این روش و named storage در bind mountها در مقابل named volumeها برای رسانه بررسی شده است.
دسترسی به رابط کاربری وب بدون در معرض قرار دادن آن
خط پورت به دلیلی روی 127.0.0.1 منتشر میشود. ufw deny 8789 از پورت منتشرشدهٔ Docker محافظت نمیکند، زیرا Docker قوانین NAT (ترجمه آدرس شبکه) خود را در زنجیرهای مینویسد که هسته پیش از ufw به آن میرسد، بنابراین ترافیک پیش از آنکه قانون شما بررسی شود، هدایت میگردد. این رفتار دائماً کاربران را غافلگیر میکند و در چرا پورت منتشرشدهٔ Docker قوانین ufw شما را نادیده میگیرد توضیح داده شده است. اتصال به loopback این مشکل را بهطور کامل دور میزند.
از طریق یک تونل SSH از دستگاه خود به رابط کاربری دسترسی پیدا کنید:
ssh -N -L 8789:127.0.0.1:8789 you@your-serverآن را در حال اجرا بگذارید و http://127.0.0.1:8789 را در مرورگر خود باز کنید. در اولین اجرا، احراز هویت را تنظیم کنید. تنها پس از آن باید به فکر استفاده از یک reverse proxy با TLS (امنیت لایه انتقال) در مقابل آن باشید. هنگامی که با استفاده از تونل به سه یا چهار مورد از این ابزارها با رمز عبور جداگانه برای هر کدام متصل شدید، راهکار تمیزتر این است که پروکسی را پشت یک سرور single sign-on خودمیزبان مانند Authentik قرار دهید تا یک ورود، تمام برنامهها را پوشش دهد و یک ابطال، دسترسی به همه آنها را ببندد.
اتصال ایندکسرها و کلاینت دانلود
Chaptarr از پروتکلهای استاندارد ایندکسر و کلاینت دانلود در مجموعه arr پشتیبانی میکند؛ بنابراین Prowlarr ایندکسرها را همانطور که برای Sonarr ارسال میکند، به Chaptarr نیز میفرستد و کلاینتهای معمول torrent و usenet بدون نیاز به تنظیمات خاصی به آن متصل میشوند.
یک تنظیم وجود دارد که تقریباً همه را دچار مشکل میکند. هنگامی که Chaptarr آدرس میزبان (host) کلاینت دانلود را میپرسد، از localhost یا 127.0.0.1 استفاده نکنید. در داخل یک کانتینر، این آدرس به خودِ همان کانتینر اشاره دارد؛ بنابراین Chaptarr سعی میکند با پورت 8080 خودش ارتباط برقرار کند و گزارش میدهد که قادر به اتصال نیست. از نام کانتینر، یعنی qbittorrent، به همراه پورت 8080 استفاده کنید. با دستور docker network inspect arr تأیید کنید که هر دو کانتینر در یک شبکه قرار دارند؛ این دستور نام تمام کانتینرهای متصل به شبکه را فهرست میکند.
اگر کلاینت دانلود شما از طریق یک کانتینر VPN با network_mode: "service:gluetun" اجرا میشود، به دلیل اشتراک فضای نام شبکه (network namespace) با Gluetun، نام مستقلی در شبکه ندارد. آن را با آدرس gluetun و پورتی که Gluetun در معرض دید قرار داده است، آدرسدهی کنید. این چیدمان و مسیریابی مربوط به آن، در مسیریابی کلاینت دانلود از طریق Gluetun توضیح داده شده است.
گسست Readarr: هزینه واقعی مهاجرت چیست
نرمافزار Chaptarr با منابع متادیتای Readarr سازگار نیست. این برنامه عناوین، نویسندگان و نسخهها را از طریق خط لوله اختصاصی خود و در میان چندین ارائهدهنده مختلف شناسایی میکند، بنابراین شناسههایی که Readarr ذخیره کرده است در اینجا کاربردی ندارند. هیچ قابلیت درونریزی (import) دیتابیس یا مسیر ارتقای مستقیمی وجود ندارد.
برای یک کتابخانه موجود، این بدان معناست که فایلها ایمن هستند اما تنظیمات خیر. هیچ بخشی از این فرآیند، دادههای موجود روی دیسک را تغییر نمیدهد. شما یک پوشه ریشه (root folder) اضافه میکنید، یک عملیات وارد کردن کتابخانه اجرا میکنید و Chaptarr فایلهای یافتشده را با متادیتای خود تطبیق میدهد. مواردی که باید بهصورت دستی بازسازی کنید عبارتند از: پروفایلهای کیفیت، فرمت نامگذاری، تنظیمات ایندکسر و کلاینت، و هر موردی که Chaptarr در تطبیق آن دچار اشتباه شده است. یک کتابخانه بزرگ به یک دور اصلاحات دستی نیاز دارد، بنابراین بهجای 10 دقیقه، یک عصر کامل را برای آن در نظر بگیرید.
این کار را به ترتیب زیر انجام دهید. کانتینر Readarr را متوقف کنید اما volume تنظیمات آن را نگه دارید تا بتوانید هنگام وارد کردن مجدد تنظیمات، همچنان به تنظیمات قدیمی خود دسترسی داشته باشید. ابتدا Chaptarr را به یک پوشه کوچک هدایت کنید و پیش از وارد کردن کل کتابخانه، تطبیقها را بررسی کنید. تنها زمانی کانتینر قدیمی را حذف کنید که از نتیجه کار رضایت کامل دارید.
یک نکته حریم خصوصی که پیش از اسکن کل کتابخانه باید بدانید: جستجوهای متادیتا به api2.chaptarr.com ارسال میشوند. در فایل README ذکر شده است که این درخواستها ممکن است شامل شناسههای ارائهدهنده، متن جستجو، نوع رسانه، برچسبها و نام فایلها باشند و مسیرهای کامل، هویت کاربر و اعتبارنامهها را شامل نمیشوند. نام فایلها از سرور شما خارج میشوند. این موضوع برای یک سرویس متادیتا عادی است، با این حال شما باید آگاهانه در مورد آن تصمیم بگیرید.
تحویل کتابهای صوتی به یک پخشکننده
برنامه Chaptarr فایلها را سازماندهی میکند. پخش آنها وظیفه یک برنامه دیگر است و Audiobookshelf معمولترین گزینه برای این کار است، زیرا موقعیت گوش دادن شما را در دستگاههای مختلف همگامسازی میکند و دارای اپلیکیشنهای موبایل است. ایمیج رسمی آن ghcr.io/advplyr/audiobookshelf:latest است و نمونه Compose مستند شده برای آن، پورت 13378 میزبان را به پورت 80 کانتینر نگاشت میکند.
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
container_name: audiobookshelf
ports:
- 127.0.0.1:13378:80
volumes:
- ./abs/config:/config
- ./abs/metadata:/metadata
- /srv/media/audiobooks:/audiobooks
environment:
- TZ=Europe/Berlin
restart: unless-stoppedهمان مسیری از میزبان که Chaptarr در آن مینویسد را mount کنید، سپس /audiobooks را به عنوان یک کتابخانه در رابط کاربری وب اضافه کنید. پس از اسکن بعدی، یک import جدید ظاهر میشود.
اگر در حال حاضر از Jellyfin استفاده میکنید، میتوانید پوشه را به عنوان یک کتابخانه در آن اضافه کنید تا فایلها پخش شوند؛ هرچند عملکرد ادامه پخش (resume) برای یک فایل صوتی طولانی در آن نسبت به یک سرور اختصاصی کتاب صوتی ضعیفتر است. راهاندازی آن بخش در اجرای Jellyfin به عنوان مدیا سرور روی VPS پوشش داده شده است. برای بخش کتابهای الکترونیکی، /srv/media/ebooks را به یک برنامه کتابخوان بسپارید؛ وظیفه Chaptarr پس از نامگذاری و دستهبندی فایل به پایان میرسد.
ریسک نگهداری: مجوز، محیط اجرا و تگهای با تغییرات سریع
نرمافزار Chaptarr تحت مجوز GPL-3.0 منتشر شده و حق تکثیر آن متعلق به مشارکتکنندگان Chaptarr است؛ بخشهایی از کد نیز از تیم Servarr گرفته شده است. بنابراین کد منبع باز باقی میماند و در صورتی که نگهدارنده فعلی پروژه را رها کند، هر کسی میتواند دوباره آن را فورک کند. این پروژه بر پایه .NET 10 ساخته شده است که تا اوت 2026 نسخه پشتیبانی بلندمدت (LTS) محیط اجرا محسوب میشود؛ این یعنی پایه نرمافزار به جای ماهها، برای سالها پشتیبانی خواهد شد. هر دو مورد برای ارزیابی اینکه آیا این پروژه سال آینده همچنان وجود خواهد داشت یا خیر، اهمیت دارند.
شماره نسخهها بهسرعت تغییر میکنند. نسخهها ابتدا به صورت pre-release منتشر میشوند و نسخه 0.9.925 دقیقاً در همان روزی منتشر شد که این راهنما نوشته شده است. همیشه یک تگ دقیق را ثابت (Pin) کنید. استفاده از latest به این معناست که یک docker compose pull خودکار میتواند شما را در طول یک هفته چندین نسخه جابهجا کند. از آنجا که این فورک هنوز جوان است، ممکن است API آن بین نسخهها تغییر کند؛ این موضوع باعث از کار افتادن هرگونه اسکریپت یا داشبوردی میشود که برای آن نوشتهاید.
پیش از هر ارتقا، نسخه پشتیبان تهیه کنید و سپس ارتقا را بهصورت آگاهانه انجام دهید.
docker compose stop chaptarr
sudo tar czf chaptarr-config-backup.tgz ./config
docker compose start chaptarrdocker compose pull chaptarr
docker compose up -d chaptarrاین پروژه در حدود 6 ماه و میان بیش از 11000 کاربر، هیچ موردی از دست رفتن داده گزارش نکرده است؛ بااینحال همچنان توصیه میکند backupها را نگه دارید و آن را به libraryای متصل نکنید که از دست دادنش برای شما قابلقبول نیست. هر دو بخش این توصیه را جدی بگیرید. archive مربوط به configuration را از سرور خارج کنید، زیرا backupی که روی همان دیسکی قرار دارد که از آن محافظت میکند، backup محسوب نمیشود. همان tarball تنها به این دلیل کافی است که Chaptarr وضعیت خود را در یک فایل SQLite زیر /config نگه میدارد؛ هر دادهای که روی database server جداگانه قرار دارد، باید بهصورت جداگانه dump شود. این همان الگویی است که در مرحله backup هنگام self-hosting کردن Chatwoot روی یک VPS در کنار دادههای Postgres و فایلهای uploadشده به کار میرود.
حالتهای شکست و پیامهای مربوطه
کانتینر در یک حلقه بازراهاندازی میشود. docker compose ps مقدار Restarting را نشان میدهد. دستور ls -ln ./config را اجرا کنید. وجود دو صفر در ستونهای مالک به این معناست که Docker دایرکتوری را با دسترسی root ایجاد کرده و کاربر کانتینر نمیتواند در دیتابیس آن بنویسد. دستور sudo chown -R 1000:1000 ./config را اجرا کنید.
عملیات Import هرگز کامل نمیشود و فایلها در پوشه دانلود باقی میمانند. Chaptarr میتواند فایل دانلود شده را بخواند اما قادر به نوشتن در کتابخانه نیست. مقدار ls -ln /srv/media/audiobooks را با PUID و PGID خود مقایسه کنید. اگر دایرکتوری متعلق به یک UID دیگر باشد یا متعلق به گروه شما باشد اما دسترسی نوشتن برای گروه تنظیم نشده باشد، عملیات انتقال متوقف میشود. UMASK=002 از بروز حالت دوم برای فایلهای جدید جلوگیری میکند.
مصرف دیسک پس از هر Import دوبرابر میشود. هیچ Hardlink ایجاد نشده است، بنابراین فایل کپی شده است. تست ln را از بخش volumes اجرا کنید. خطایی که به Invalid cross-device link ختم میشود این موضوع را تأیید میکند و راه حل آن، استفاده از mount با والد واحد (single-parent) است.
کلاینت دانلود متصل نمیشود. شما localhost را به عنوان host وارد کردهاید. در داخل کانتینر، این آدرس به خود Chaptarr اشاره دارد. از نام کانتینر استفاده کنید و بررسی کنید که docker network inspect arr هر دو کانتینر را لیست میکند.
سرویس Compose اجرا نمیشود. Bind for 127.0.0.1:8789 failed: port is already allocated به این معناست که برنامه دیگری پورت را اشغال کرده است. با استفاده از sudo ss -lntp | grep 8789 آن را پیدا کنید.
مرورگر هیچ چیزی نمایش نمیدهد. با اتصال پورت به 127.0.0.1، هیچ مقصدی برای اتصال لپتاپ شما از طریق اینترنت وجود ندارد. این رفتار مورد انتظار است. ابتدا تونل SSH را باز کنید.
FAQ
آیا میتوانم کتابخانه Readarr خود را به Chaptarr منتقل کنم؟
خیر، امکان import مستقیم وجود ندارد. Chaptarr با منابع متادیتای Readarr سازگار نیست و از خطلوله (pipeline) ارائهدهنده اختصاصی خود استفاده میکند؛ بنابراین شناسههای ذخیرهشده در Readarr در اینجا کاربردی ندارند و هیچ ابزاری برای تبدیل دیتابیس وجود ندارد. فایلهای شما روی دیسک دستنخورده باقی میمانند. شما باید همان مسیرها را بهعنوان root folder اضافه کنید، یک library import اجرا کنید و اجازه دهید Chaptarr خودش فایلها را تطبیق دهد. پروفایلهای کیفیت، فرمت نامگذاری، تنظیمات indexer و اصلاح تطبیقهای اشتباه، همگی نیازمند کار دستی هستند؛ بنابراین پیش از import کردن کل کتابخانه، ابتدا با یک پوشه کوچک شروع کنید.
چرا Chaptarr نمیتواند در پوشه کتابهای صوتی من بنویسد؟
کاربر کانتینر مالک فایلها نیست. Chaptarr در صورت تنظیم نبودن متغیرها، از مقادیر پیشفرض PUID=99 و PGID=100 استفاده میکند که مقادیر unRAID هستند و در یک VPS معمولی با سیستمعامل Ubuntu اشتباه عمل میکنند. آنها را روی id -u و id -g خود تنظیم کنید، از همین جفت در کلاینت دانلود استفاده کنید و UMASK=002 را تنظیم کنید تا فایلهای جدید قابلیت نوشتن برای گروه را داشته باشند. مالکیت فایلها را با ls -ln روی دایرکتوری کتابخانه بررسی کنید؛ چون این دستور اعداد را چاپ میکند (نه نامها)، میتوانید مقایسه دقیقی انجام دهید.
چرا پس از import، فضای مصرفی دیسک من دو برابر شد؟
Chaptarr فایل را کپی کرده است چون نتوانسته آن را hardlink کند. mount کردن /downloads و /audiobooks بهعنوان bindهای جداگانه باعث میشود آنها در داخل کانتینر به نقاط mount مجزا تبدیل شوند و هسته سیستمعامل (kernel) به دلیل Invalid cross-device link، از ایجاد hardlink بین نقاط mount مختلف خودداری میکند. یک دایرکتوری والد مانند /srv/media:/data را mount کنید و از /data/downloads و /data/audiobooks در داخل برنامه استفاده کنید. هر دو مسیر باید روی یک فایلسیستم میزبان قرار داشته باشند که df -h این موضوع را تأیید میکند.
آیا Chaptarr کتابهای صوتی من را پخش میکند؟
خیر. این برنامه وظیفه یافتن، دانلود، تغییر نام و سازماندهی فایلها را بر عهده دارد و پخش فایلها توسط برنامه دیگری انجام میشود. Audiobookshelf انتخاب رایجی برای این کار است زیرا موقعیت پخش شما را در دستگاههای مختلف ذخیره میکند؛ برای این کار از ایمیج رسمی ghcr.io/advplyr/audiobookshelf:latest با همان مسیر mount شده کتابهای صوتی میزبان استفاده کنید. Jellyfin نیز اگر پوشه را بهعنوان یک کتابخانه اضافه کنید، فایلها را پخش میکند، هرچند رفتار آن در ادامه پخش (resume) برای کتابهای صوتی طولانی که یک فایل واحد هستند، ضعیفتر است.
آیا اجرای Chaptarr روی کتابخانهای که برایم مهم است ایمن است؟
این نرمافزار در مرحله بتا و از یک fork نوپا است و خود پروژه نیز به این موضوع اذعان دارد، هرچند در حدود شش ماه گذشته و با بیش از 11000 کاربر، گزارشی از فقدان داده ثبت نشده است. بخشهای اطمینانبخش شامل مجوز GPL-3.0 است که امکان fork کردن کد را فراهم میکند و همچنین پایه .NET 10 که از اوت 2026 یک runtime با پشتیبانی بلندمدت (LTS) محسوب میشود. یک تگ ایمیج دقیق مانند 0.9.925 را به جای latest پین کنید، پیش از هر ارتقا از /config نسخه پشتیبان تهیه کنید و آن آرشیو را خارج از سرور نگهداری کنید.