SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor

วิธีติดตั้ง Chaptarr บน VPS จัดการ Audiobook แทน Readarr

เรียนรู้วิธีติดตั้ง Chaptarr ผ่าน Docker Compose เพื่อจัดการ Audiobook และ Ebook แทน Readarr ที่ยุติการพัฒนาไปในปี 2025 พร้อมวิธีตั้งค่า PUID PGID และแก้ปัญหา Metadata

Chaptarr คืออะไร และเหตุใดผู้ใช้ Readarr จึงต้องใช้

Chaptarr เป็น fork ของ Readarr ที่จัดการ audiobook และ ebook จาก instance เดียว โดยตรวจสอบ release ใหม่ ส่งไปยัง download client จากนั้นเปลี่ยนชื่อไฟล์ผลลัพธ์และจัดเก็บลงใน library ของคุณ Chaptarr ไม่สามารถเล่นเนื้อหาได้ จึงต้องใช้งานร่วมกับ player เช่น Audiobookshelf

Readarr ยุติการพัฒนาเมื่อ 27 June 2025 ประกาศจากทีม Servarr ระบุเหตุผลว่า metadata ของโครงการไม่สามารถใช้งานได้อีกต่อไป และความพยายามของชุมชนในการย้ายไปใช้ Open Library หยุดชะงัก repository ถูกเก็บเป็น archive ทำให้ collection ของหนังสือและ audiobook ไม่มีตัวจัดการที่ได้รับการดูแลอย่างต่อเนื่อง และ Chaptarr จึงเข้ามารับหน้าที่นี้ Chaptarr ยังคงรูปแบบที่คุณคุ้นเคยจาก Sonarr และ Radarr เช่น indexer, download client, quality profile และ root folder พร้อมเพิ่มความสามารถสำหรับ audiobook ได้แก่ การจัดระเบียบโดยคำนึงถึง narrator, การรองรับหลาย edition ของชื่อเรื่องเดียวกัน, การรองรับ M4B และ MP3 แบบแบ่งเป็น chapter และการแปลง MP3 เป็น M4B

คู่มือนี้ใช้ image tag chaptarr/chaptarr:0.9.925 ซึ่งเป็น release ล่าสุดเมื่อวันที่ 9 August 2026 ณ วันที่ 11 October 2026 release ล่าสุดคือ 0.9.965 ซึ่งเผยแพร่เมื่อ 27 September 2026 ขั้นตอนด้านล่างทดสอบกับ 0.9.925 เท่านั้น ดังนั้นไฟล์จึงยังใช้ tag ดังกล่าว โปรดอ่าน release notes ก่อนเปลี่ยนไปใช้เวอร์ชันใหม่กว่า Chaptarr ระบุว่าตนเองเป็น beta software โปรดอ่านหัวข้อการบำรุงรักษาที่อยู่ช่วงท้ายก่อนชี้ Chaptarr ไปยัง library ที่ไม่สามารถสร้างทดแทนได้

สิ่งที่ต้องเตรียมก่อนเริ่ม

VPS ที่ติดตั้ง Docker และ Compose plugin แล้ว รวมถึงมีพื้นที่ดิสก์เพียงพอสำหรับคลังไฟล์ Audiobook มีขนาดใหญ่ และการ import ที่ใช้ hardlink ไม่ได้จะเก็บไฟล์ไว้ 2 ชุดชั่วคราว ซึ่งจะอธิบายไว้ในส่วน volume ด้านล่าง หากยังไม่ได้ติดตั้ง Docker บนเครื่อง ให้เริ่มจาก ติดตั้งและเรียกใช้ Docker บน VPS แล้วกลับมาดำเนินการต่อ

ขณะนี้ Chaptarr มีให้ใช้งานเป็น Docker image เท่านั้น การรองรับการติดตั้งแบบ native ยังอยู่ระหว่างการพัฒนา โดยมีแผนทำ Windows build แบบทดลอง และยังไม่มีแพ็กเกจสำหรับ distribution ตัว container เก็บฐานข้อมูลไว้ที่ /config โดยใช้ SQLite เป็นค่าเริ่มต้น และสามารถใช้ PostgreSQL server ภายนอกผ่าน environment variables Chaptarr__Postgres__* ได้ หากมี PostgreSQL ที่ใช้งานอยู่แล้ว สำหรับผู้ใช้ 1 คนบนเครื่อง 1 เครื่อง SQLite เป็นตัวเลือกที่เหมาะสมที่สุด

บริการ Compose สำหรับ Chaptarr

บริการนี้จะถูกแทรกเข้าไปใน stack ที่มีอยู่เดิม โดยจะทำการล็อกเวอร์ชันด้วย tag ที่ปล่อยออกมา (released tag), เปิดใช้งาน web UI บน loopback เท่านั้น และเชื่อมต่อเข้ากับ network ที่โปรแกรมดาวน์โหลดของคุณใช้งานอยู่แล้ว

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 หมายถึง "network นี้มีอยู่แล้ว ให้เชื่อมต่อเข้าไป" ให้ใช้คำสั่งนี้เมื่อ Prowlarr และโปรแกรม torrent ของคุณมาจากโปรเจกต์ Compose คนละตัวกัน เพราะหากใช้ไฟล์ Compose แยกกัน ระบบจะสร้าง network ที่แยกส่วนกันขึ้นมาใหม่ ทำให้ Chaptarr ไม่สามารถค้นหา qbittorrent ผ่านชื่อ host ได้ คุณสามารถตรวจสอบชื่อ network จริงได้จาก docker network ls หาก stack ของคุณรวมอยู่ในไฟล์เดียวอยู่แล้ว ให้เพิ่มบริการ chaptarr: เข้าไปในไฟล์นั้นและลบบล็อก networks: ออกทั้งหมด โครงสร้างโดยรวมสามารถดูได้ที่ stack arr แบบเต็มภายใต้ Docker Compose และกฎการตั้งชื่อสามารถดูได้ที่ วิธีการ resolve ชื่อ network และบริการของ Compose

ให้สร้างไดเรกทอรีสำหรับเก็บ config ด้วยตนเอง จากนั้นจึงเริ่มการทำงาน

mkdir -p ./config
sudo chown 1000:1000 ./config
docker compose up -d
docker compose ps
docker compose logs -f chaptarr

docker compose ps ควรแสดงสถานะ container เป็น Up หาก container แสดงสถานะเป็น Restarting แสดงว่าการเริ่มทำงานล้มเหลวและระบบกำลังพยายามเริ่มใหม่ ซึ่งสาเหตุส่วนใหญ่มักเกิดจากไดเรกทอรี config หากแอปพลิเคชันเริ่มฟังที่พอร์ต 8789 แล้ว log จะหยุดเลื่อน

PUID, PGID และไดเรกทอรีที่ Docker สร้างเป็น root

Chaptarr ใช้ค่าเริ่มต้นเป็น PUID=99 และ PGID=100 หากไม่ได้กำหนดค่าไว้ ค่าเหล่านี้เป็นค่าของ unRAID และบน Ubuntu VPS ทั่วไป ค่าเหล่านี้ไม่ตรงกับผู้ใช้ที่ใช้งานจริง จึงทำให้ไฟล์ถูกสร้างโดยมี owner ที่บัญชีของคุณไม่มีสิทธิ์เขียน อ่านค่าตัวเลขของผู้ใช้ด้วย id -u และ id -g แล้วใส่ค่าดังกล่าวลงในไฟล์

Container ทุกตัวที่เข้าถึงไฟล์ชุดเดียวกันต้องใช้ค่าคู่นี้เหมือนกัน download client จะเขียนไฟล์ลงใน /srv/media/downloads, Chaptarr จะย้ายไฟล์ไปยัง /srv/media/audiobooks และ player จะอ่านไฟล์จากที่นั่น หาก download client เขียนไฟล์ด้วย 1000:1000 แต่ Chaptarr ทำงานด้วย 99:100 การ import จะล้มเหลว สิทธิ์ owner ของไฟล์ไม่ใช่ปัจจัยเดียวที่กำหนดสิทธิ์ การสร้าง, เปลี่ยนชื่อ หรือลบไฟล์ต้องมีสิทธิ์เขียนบนไดเรกทอรีที่เก็บไฟล์นั้น ไดเรกทอรีที่ผู้ใช้ 1000 สร้างด้วยโหมด 755 ที่ใช้กันทั่วไป จะไม่ให้ 99:100 มีสิทธิ์เขียน ดังนั้น Chaptarr จึงไม่สามารถจัดเก็บหนังสือเข้า library หรือลบหนังสือออกจาก downloads ได้ UMASK=002 จะทำให้ไฟล์ใหม่มีสิทธิ์เขียนสำหรับ group ซึ่งเป็นสิ่งที่ต้องใช้เมื่อมีหลาย container แชร์ media group เดียวกัน ดู mapping ทั้งหมดได้ที่ วิธีที่ PUID และ PGID map ผู้ใช้ของ container กับไฟล์บน host

README เตือนถึงปัญหาเฉพาะกรณีหนึ่ง และควรย้ำอีกครั้ง หาก ./config ไม่มีอยู่เมื่อคุณเรียกใช้ docker compose up Docker จะสร้างไดเรกทอรีนี้ให้โดยมี owner เป็น root:root จากนั้น container จะทำงานด้วย UID 1000 และไม่สามารถเขียน database ของตัวเองได้ จึงหยุดทำงานและเริ่มใหม่ซ้ำไปเรื่อย ๆ ตรวจสอบด้วย ls -ln ./config ซึ่งจะแสดง owner เป็นตัวเลขแทนชื่อ ค่า 0 สองตัวหมายความว่า root เป็น owner แก้ไขด้วย sudo chown -R 1000:1000 ./config แล้วเริ่ม container อีกครั้ง

โครงสร้างด้านบนทำการ mount /audiobooks, /ebooks และ /downloads เป็น bind แยกกัน ซึ่งตรงกับคำสั่ง run ของโปรเจกต์เอง แม้จะอ่านง่ายแต่มีข้อเสียที่สำคัญคือ hardlinks จะใช้งานไม่ได้

Hardlink คือชื่อเรียกที่สองของข้อมูลชุดเดียวกันบนดิสก์ มันไม่ใช้พื้นที่เพิ่มและทำงานได้ทันที ซึ่งเป็นเหตุผลที่ตระกูล arr เลือกใช้แทนการคัดลอกไฟล์ Hardlink จะทำงานได้ภายในระบบไฟล์ (filesystem) เดียวกันเท่านั้น ภายในคอนเทนเนอร์จุด mount ทั้งสามนี้แยกจากกัน เคอร์เนลจึงปฏิเสธการสร้างลิงก์แม้ว่า path บนโฮสต์จะอยู่บนดิสก์เดียวกันก็ตาม คุณสามารถทดสอบได้ด้วยตัวเอง

docker exec chaptarr sh -c 'touch /downloads/linktest && ln /downloads/linktest /audiobooks/linktest'

คำสั่งดังกล่าวจะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดลงท้ายด้วย Invalid cross-device link นั่นคือการที่เคอร์เนลปฏิเสธการสร้างลิงก์ข้ามจุด mount ซึ่งเป็นเหตุผลที่ Chaptarr ต้องเปลี่ยนไปใช้วิธีคัดลอกไฟล์แทน การคัดลอกนั้นถูกต้องแต่ช้ากว่า และจะทำให้ audiobook มีไฟล์ซ้ำกันสองชุดจนกว่าคุณจะลบ torrent ออก ซึ่งคุณคงไม่ทำในขณะที่ยังปล่อย seeding อยู่ ให้ลบ /srv/media/downloads/linktest ออกหลังจากนั้น

หากต้องการคงความสามารถในการทำ hardlinks ให้ mount ไดเรกทอรีหลักเพียงจุดเดียวแทน:

    volumes:
      - ./config:/config
      - /srv/media:/data

จากนั้นตั้งค่า root folders ภายใน Chaptarr ให้เป็น /data/audiobooks และ /data/ebooks และกำหนดให้ download client ใช้จุด mount /srv/media:/data เดียวกัน เพื่อให้ทั้งสองคอนเทนเนอร์เห็น path ที่เหมือนกันทุกประการ ตรวจสอบให้แน่ใจก่อนว่าฝั่งโฮสต์เป็นระบบไฟล์เดียวกัน: df -h /srv/media/downloads /srv/media/audiobooks ต้องแสดงค่าเดียวกันในคอลัมน์ Filesystem สำหรับทั้งสองจุด หากค่าต่างกันหมายความว่าอยู่คนละดิสก์กัน และไม่มีรูปแบบการ mount ใดที่สามารถทำ hardlink ข้ามดิสก์ได้ ข้อดีข้อเสียระหว่างวิธีนี้กับ named storage ได้อธิบายไว้ใน การเปรียบเทียบ bind mounts กับ named volumes สำหรับสื่อบันเทิง

การเข้าถึงเว็บ UI โดยไม่เปิดเผยสู่สาธารณะ

บรรทัดพอร์ตถูกเผยแพร่บน 127.0.0.1 ด้วยเหตุผลบางประการ ufw deny 8789 ไม่สามารถป้องกันพอร์ต Docker ที่ถูกเผยแพร่ได้ เนื่องจาก Docker เขียนกฎ NAT (network address translation) ของตนเองลงใน chain ที่ kernel ตรวจสอบก่อนกฎของ ufw ดังนั้น traffic จึงถูกส่งต่อไปก่อนที่กฎของคุณจะถูกนำมาพิจารณา พฤติกรรมนี้ทำให้ผู้ใช้งานเกิดความเข้าใจผิดอยู่เสมอ และมีการอธิบายไว้ใน เหตุใดพอร์ต Docker ที่เผยแพร่จึงเพิกเฉยต่อกฎ ufw ของคุณ การผูก (bind) ไว้กับ loopback จะช่วยหลีกเลี่ยงปัญหานี้ได้โดยสิ้นเชิง

เข้าถึง UI ผ่าน SSH tunnel จากเครื่องของคุณ:

ssh -N -L 8789:127.0.0.1:8789 you@your-server

ปล่อยให้คำสั่งนั้นทำงานอยู่แล้วเปิด http://127.0.0.1:8789 ในเบราว์เซอร์ของคุณ ตั้งค่าการยืนยันตัวตนในการใช้งานครั้งแรก หลังจากนั้นจึงค่อยพิจารณาใช้ reverse proxy พร้อม TLS (transport layer security) ไว้ด้านหน้า เมื่อคุณเริ่มทำ tunnel เข้าไปยังเครื่องมือเหล่านี้สามหรือสี่ตัวโดยมีรหัสผ่านแยกกันในแต่ละตัว คำตอบที่จัดการได้ง่ายกว่าคือการวาง proxy ไว้หลัง เซิร์ฟเวอร์ single sign-on ที่โฮสต์เอง เช่น Authentik เพื่อให้การล็อกอินเพียงครั้งเดียวครอบคลุมทุกแอปพลิเคชัน และการเพิกถอนสิทธิ์เพียงครั้งเดียวจะปิดการเข้าถึงทั้งหมดได้ทันที

การเชื่อมต่อ indexer และ download client

Chaptarr รองรับโปรโตคอลมาตรฐานของ arr สำหรับ indexer และ download client ดังนั้น Prowlarr จึงสามารถส่งข้อมูล indexer เข้าไปได้ในลักษณะเดียวกับที่ทำกับ Sonarr และสามารถเชื่อมต่อกับ torrent หรือ usenet client ทั่วไปได้โดยไม่ต้องมีการตั้งค่าพิเศษ

มีการตั้งค่าหนึ่งที่มักทำให้ผู้ใช้งานส่วนใหญ่เกิดปัญหา เมื่อ Chaptarr ถามหา host ของ download client ห้ามระบุเป็น localhost หรือ 127.0.0.1 เนื่องจากภายใน container ที่อยู่ดังกล่าวหมายถึงตัว container เอง Chaptarr จึงพยายามเชื่อมต่อกับพอร์ต 8080 ของตัวเองและแจ้งว่าไม่สามารถเชื่อมต่อได้ ให้ใช้ชื่อ container คือ qbittorrent ร่วมกับพอร์ต 8080 แทน ตรวจสอบให้แน่ใจว่า container ทั้งสองอยู่ใน network เดียวกันด้วยคำสั่ง docker network inspect arr ซึ่งจะแสดงรายการ container ทั้งหมดที่เชื่อมต่ออยู่โดยระบุชื่อ

หาก download client ของคุณทำงานผ่าน VPN container ด้วย network_mode: "service:gluetun" มันจะไม่มีชื่อเป็นของตัวเองบน network เนื่องจากใช้ network namespace ร่วมกับ Gluetun ให้ระบุที่อยู่เป็น gluetun บนพอร์ตที่ Gluetun เปิดไว้ การตั้งค่าดังกล่าวรวมถึงการกำหนดเส้นทางเครือข่ายที่เกี่ยวข้อง สามารถดูได้ที่ การกำหนดเส้นทาง download client ผ่าน Gluetun

การเปลี่ยนผ่านสู่ Chaptarr: ต้นทุนที่แท้จริงของการย้ายระบบ

Chaptarr ไม่รองรับแหล่งข้อมูล metadata ของ Readarr เนื่องจาก Chaptarr ทำการค้นหาชื่อเรื่อง ผู้แต่ง และฉบับพิมพ์ผ่านไปป์ไลน์ของตนเองโดยใช้ผู้ให้บริการหลายราย ดังนั้นตัวระบุ (identifiers) ที่ Readarr จัดเก็บไว้จึงไม่มีความหมายในระบบนี้ กระบวนการนี้ไม่มีการนำเข้าฐานข้อมูลและไม่มีเส้นทางการอัปเกรดแบบแทนที่ได้ทันที

สำหรับคลังข้อมูลที่มีอยู่ ไฟล์ต่างๆ จะยังคงปลอดภัย แต่การตั้งค่าจะไม่สามารถใช้งานร่วมกันได้ กระบวนการนี้จะไม่ส่งผลกระทบต่อไฟล์ที่อยู่บนดิสก์ คุณต้องเพิ่ม root folder แล้วสั่งนำเข้าคลังข้อมูล จากนั้น Chaptarr จะจับคู่ไฟล์ที่พบกับ metadata ของตนเอง สิ่งที่คุณต้องสร้างใหม่ด้วยตนเอง ได้แก่ quality profiles, รูปแบบการตั้งชื่อไฟล์, การตั้งค่า indexer และ client รวมถึงการแก้ไขทุกรายการที่ Chaptarr จับคู่ผิดพลาด หากคลังข้อมูลมีขนาดใหญ่ คุณจะต้องใช้เวลาตรวจสอบและแก้ไขด้วยตนเอง ดังนั้นควรเผื่อเวลาไว้หนึ่งช่วงเย็นแทนที่จะเป็นเพียงสิบนาที

โปรดดำเนินการตามลำดับนี้ หยุดการทำงานของคอนเทนเนอร์ Readarr แต่ให้เก็บ volume ของการตั้งค่าไว้ เพื่อให้คุณยังสามารถอ่านการตั้งค่าเดิมในขณะที่พิมพ์ข้อมูลใหม่ได้ ให้ชี้ Chaptarr ไปที่โฟลเดอร์ขนาดเล็กหนึ่งโฟลเดอร์ก่อนเพื่อตรวจสอบการจับคู่ข้อมูลก่อนที่จะนำเข้าทั้งหมด และให้ลบคอนเทนเนอร์เก่าออกก็ต่อเมื่อคุณพอใจกับผลลัพธ์แล้วเท่านั้น

มีรายละเอียดด้านความเป็นส่วนตัวที่ควรทราบก่อนที่คุณจะสแกนคลังข้อมูลทั้งหมด: การค้นหา metadata จะถูกส่งไปยัง api2.chaptarr.com ไฟล์ README ระบุว่าคำขอเหล่านั้นอาจมี ID ของผู้ให้บริการ, ข้อความที่ใช้ค้นหา, ประเภทสื่อ, แท็ก และชื่อไฟล์ แต่จะไม่มีการส่ง path เต็ม, ข้อมูลระบุตัวตนของผู้ใช้ และข้อมูลรับรอง (credentials) ออกไป ชื่อไฟล์จะถูกส่งออกจากเซิร์ฟเวอร์ของคุณ ซึ่งเป็นเรื่องปกติสำหรับบริการ metadata แต่คุณควรตัดสินใจเรื่องนี้ด้วยความเข้าใจอย่างถี่ถ้วน

ส่งไฟล์หนังสือเสียงไปยังโปรแกรมเล่นไฟล์

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

ให้ mount path ของโฮสต์ตำแหน่งเดียวกับที่ Chaptarr เขียนไฟล์ลงไป จากนั้นเพิ่ม /audiobooks เป็นคลังข้อมูล (library) ภายในหน้าเว็บ UI โดยรายการใหม่จะปรากฏขึ้นหลังจากการสแกนครั้งถัดไป

หากคุณใช้งาน Jellyfin อยู่แล้ว คุณสามารถเพิ่มโฟลเดอร์ดังกล่าวเป็นคลังข้อมูลในนั้นเพื่อเล่นไฟล์ได้ แม้ว่าความสามารถในการเล่นต่อจากจุดเดิมสำหรับไฟล์หนังสือเสียงที่มีความยาวต่อเนื่องไฟล์เดียวจะทำได้ไม่ดีเท่ากับเซิร์ฟเวอร์ที่ออกแบบมาเพื่อหนังสือเสียงโดยเฉพาะ การตั้งค่าในส่วนนั้นได้อธิบายไว้ใน การรัน Jellyfin เป็นมีเดียเซิร์ฟเวอร์บน VPS สำหรับในส่วนของหนังสืออิเล็กทรอนิกส์ ให้ส่งไฟล์ /srv/media/ebooks ไปยังแอปพลิเคชันสำหรับอ่านหนังสือ โดยงานของ Chaptarr จะสิ้นสุดลงทันทีที่ไฟล์ถูกตั้งชื่อและจัดเก็บเรียบร้อยแล้ว

ความเสี่ยงด้านการดูแลรักษา: licence, runtime และ tag ที่เปลี่ยนแปลงรวดเร็ว

Chaptarr ใช้ licence แบบ GPL-3.0 โดยลิขสิทธิ์เป็นของผู้มีส่วนร่วมใน Chaptarr และมีโค้ดบางส่วนจากทีม Servarr ดังนั้นโค้ดยังคงเปิดให้ใช้งาน และผู้อื่นสามารถ fork ต่อได้หากผู้ดูแลรายนี้หยุดพัฒนา โครงการนี้สร้างบน .NET 10 ซึ่งเป็น runtime รุ่น long term support ปัจจุบัน ณ เดือน August 2026 หมายความว่าพื้นฐานของระบบได้รับการรองรับเป็นเวลาหลายปี ไม่ใช่เพียงไม่กี่เดือน ข้อเท็จจริงทั้งสองประการสำคัญเมื่อประเมินว่าโครงการนี้จะยังมีอยู่ในปีหน้าหรือไม่

หมายเลขเวอร์ชันเปลี่ยนแปลงรวดเร็ว 0.9.925 เผยแพร่เมื่อ 9 August 2026 และมี release เพิ่มอีก 5 รายการภายใน 7 สัปดาห์ถัดมา ทุก release จนถึง 0.9.958 เผยแพร่ในสถานะ pre-release ส่วน 0.9.965 ซึ่งเผยแพร่เมื่อ 27 September 2026 เป็นรายการแรกที่ระบุเป็น full release ให้ระบุ tag แบบตายตัว การใช้ latest หมายความว่า docker compose pull แบบไม่ต้องดูแลอาจเลื่อนระบบไปหลายเวอร์ชันภายใน 1 สัปดาห์ และ fork ที่ยังใหม่เช่นนี้อาจเปลี่ยน API ระหว่าง release จนทำให้ script หรือ dashboard ที่คุณเขียนอ้างอิงใช้ไม่ได้ การ pin เวอร์ชันเป็นแนวปฏิบัติที่ควรใช้กับทุกโครงการใหม่ที่คุณ self-host ซึ่งเป็นเหตุผลเดียวกับที่บทแนะนำ การรัน openGym เป็นตัวติดตามการออกกำลังกายแบบ self-hosted deploy จาก git tag ที่กำหนดตายตัว

สำรองข้อมูลก่อนการ upgrade ทุกครั้ง แล้วจึง upgrade โดยตั้งใจ

docker compose stop chaptarr
sudo tar czf chaptarr-config-backup.tgz ./config
docker compose start chaptarr
docker compose pull chaptarr
docker compose up -d chaptarr

โครงการรายงานว่าไม่พบเหตุการณ์ข้อมูลสูญหายตลอดระยะเวลาประมาณ 6 เดือนและผู้ใช้มากกว่า 11000 ราย แต่ยังแนะนำให้เก็บ backup และไม่ชี้ระบบไปยัง library ที่คุณยอมให้สูญเสียไม่ได้ ควรให้ความสำคัญกับคำแนะนำทั้งสองส่วน คัดลอก archive ของ config ออกจากเซิร์ฟเวอร์ เพราะ backup ที่อยู่บน disk เดียวกับข้อมูลที่ต้องปกป้องไม่ถือเป็น backup tarball เดียวนี้เพียงพอเพราะ Chaptarr เก็บ state ไว้ในไฟล์ SQLite เดียวภายใต้ /config เท่านั้น ส่วนข้อมูลที่อยู่บน database server แยกต่างหากต้อง dump database ด้วย ซึ่งเป็นรูปแบบของขั้นตอน backup เมื่อ self-hosting Chatwoot บน VPS ร่วมกับข้อมูล Postgres และไฟล์ที่อัปโหลด vel.

รูปแบบความล้มเหลวและข้อความที่คุณจะพบ

คอนเทนเนอร์รีสตาร์ทวนซ้ำ docker compose ps จะแสดง Restarting ให้รันคำสั่ง ls -ln ./config หากในคอลัมน์เจ้าของไฟล์มีเลขศูนย์สองตัว แสดงว่า Docker สร้างไดเรกทอรีในฐานะ root และผู้ใช้ของคอนเทนเนอร์ไม่สามารถเขียนข้อมูลลงในฐานข้อมูลได้ ให้รันคำสั่ง sudo chown -R 1000:1000 ./config

การนำเข้าไฟล์ไม่เสร็จสิ้นและไฟล์ยังคงค้างอยู่ในโฟลเดอร์ดาวน์โหลด Chaptarr สามารถอ่านไฟล์จากโฟลเดอร์ดาวน์โหลดได้แต่ไม่สามารถเขียนไฟล์ลงในไลบรารี ให้เปรียบเทียบ ls -ln /srv/media/audiobooks กับ PUID และ PGID ของคุณ ไดเรกทอรีที่เป็นเจ้าของโดย UID อื่น หรือเป็นเจ้าของโดยกลุ่มของคุณแต่ไม่มีสิทธิ์เขียนสำหรับกลุ่ม จะทำให้การย้ายไฟล์ล้มเหลว การใช้ UMASK=002 จะช่วยป้องกันกรณีหลังสำหรับไฟล์ใหม่

การใช้งานดิสก์เพิ่มขึ้นเป็นสองเท่าหลังการนำเข้าแต่ละครั้ง เนื่องจากไม่มีการทำ hardlink ไฟล์จึงถูกคัดลอกแทน ให้รันการทดสอบ ln จากส่วน volumes หากพบข้อผิดพลาดที่ลงท้ายด้วย Invalid cross-device link แสดงว่ายืนยันปัญหาได้ และการแก้ไขคือการทำ single-parent mount

ไคลเอนต์ดาวน์โหลดไม่สามารถเชื่อมต่อได้ คุณระบุ localhost เป็นโฮสต์ ซึ่งภายในคอนเทนเนอร์นั้นหมายถึงตัว 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 tunnel ก่อนใช้งาน

FAQ

ฉันสามารถย้ายคลัง Readarr ไปยัง Chaptarr ได้หรือไม่

ไม่สามารถนำเข้าโดยตรงได้ Chaptarr ไม่รองรับแหล่งข้อมูลเมทาดาทาของ Readarr และใช้ provider pipeline ของตนเอง ดังนั้น identifier ที่ Readarr บันทึกไว้จึงไม่มีความหมาย และไม่มีการแปลงฐานข้อมูล ไฟล์ของคุณบนดิสก์จะไม่ถูกแก้ไข ให้เพิ่ม path เดิมเป็น root folders เรียกใช้การนำเข้าคลัง แล้วให้ Chaptarr จับคู่ไฟล์เอง การกำหนด quality profiles, รูปแบบการตั้งชื่อ, การตั้งค่า indexer และการแก้ไขรายการที่จับคู่ผิดต้องทำด้วยตนเอง ดังนั้นควรเริ่มจากโฟลเดอร์ขนาดเล็ก 1 รายการก่อนนำเข้าทั้งหมด

เหตุใด Chaptarr จึงเขียนลงโฟลเดอร์ audiobook ของฉันไม่ได้

user ของ container ไม่มีสิทธิ์เขียนในไดเรกทอรีนั้น โดยทั่วไปเกิดจาก container ทำงานด้วย UID ที่ต่างจาก UID ของเจ้าของไดเรกทอรี เมื่อไม่ได้กำหนดตัวแปรเหล่านี้ Chaptarr จะใช้ค่า PUID=99 และ PGID=100 ซึ่งเป็นค่าของ unRAID และไม่ถูกต้องบน Ubuntu VPS ทั่วไป ให้กำหนดเป็น id -u และ id -g ของคุณเอง ใช้ค่าคู่นี้เดียวกันกับ download client และกำหนด UMASK=002 เพื่อให้ไฟล์ใหม่ยังเขียนได้โดยกลุ่ม ตรวจสอบ ownership ด้วย ls -ln บนไดเรกทอรีคลัง เนื่องจากคำสั่งนี้แสดงตัวเลขแทนชื่อ จึงสามารถเปรียบเทียบได้

เหตุใดการใช้ดิสก์จึงเพิ่มเป็น 2 เท่าหลังนำเข้า

Chaptarr คัดลอกไฟล์ เนื่องจากไม่สามารถสร้าง hardlink ได้ การ mount /downloads และ /audiobooks เป็น bind แยกกันทำให้ทั้งสองรายการเป็น mount point แยกกันภายใน container และ kernel จะปฏิเสธการสร้าง hardlink ข้าม mount point ด้วย Invalid cross-device link ให้ mount ไดเรกทอรีแม่เพียงรายการเดียว เช่น /srv/media:/data แล้วใช้ /data/downloads และ /data/audiobooks ภายในแอป ทั้งสอง path ต้องอยู่บน filesystem เดียวกันของ host ด้วย ซึ่ง df -h ใช้ยืนยันได้

Chaptarr เล่น audiobook ของฉันได้หรือไม่

ไม่ได้ Chaptarr ใช้ค้นหา ดาวน์โหลด เปลี่ยนชื่อ และจัดเก็บไฟล์ ส่วนการเล่นเป็นหน้าที่ของโปรแกรมอื่น Audiobookshelf เป็นโปรแกรมที่มักใช้ร่วมกัน เนื่องจากจดจำตำแหน่งการเล่นข้ามอุปกรณ์ได้ โดยใช้ image อย่างเป็นทางการ ghcr.io/advplyr/audiobookshelf:latest และ mount path audiobook เดียวกันจาก host Jellyfin ก็เล่นไฟล์เหล่านี้ได้เช่นกัน หากเพิ่มโฟลเดอร์เป็น library แต่การกลับมาเล่นต่อใน audiobook แบบไฟล์เดียวยาวๆ จะทำงานได้ด้อยกว่า

Chaptarr ปลอดภัยสำหรับใช้กับคลังที่ฉันให้ความสำคัญหรือไม่

Chaptarr เป็นซอฟต์แวร์รุ่น beta จาก fork ที่ยังใหม่ และโครงการระบุเรื่องนี้ไว้เอง ขณะเดียวกันก็รายงานว่าไม่พบเหตุการณ์ข้อมูลสูญหายในช่วงประมาณ 6 เดือน และมีผู้ใช้มากกว่า 11000 ราย จุดที่ช่วยเพิ่มความมั่นใจคือใบอนุญาต GPL-3.0 ซึ่งทำให้สามารถ fork โค้ดได้ และฐาน .NET 10 ซึ่งเป็น runtime แบบ long term support ณ เดือน August 2026 ให้ระบุ image tag ที่แน่นอน เช่น 0.9.925 แทน latest สำรองข้อมูล /config ก่อนการ upgrade แต่ละครั้ง และเก็บ archive นั้นไว้นอกเซิร์ฟเวอร์