SSD Nodes Learn RAM 8GB — $66/ปี
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-01

ติดตั้ง arr stack ด้วย Docker Compose ไฟล์เดียว

รัน Prowlarr, Sonarr, Radarr และ qBittorrent บน VPS ด้วย Docker Compose ไฟล์เดียว พร้อม PUID, PGID และโครงสร้าง volume ที่ทำให้ hardlink ทำงานได้

สิ่งที่คุณกำลังสร้าง

Docker Compose arr stack ประกอบด้วย 4 containers ที่ใช้จัดการคลังสื่อ ได้แก่ Prowlarr สำหรับการตั้งค่า indexer, Sonarr สำหรับซีรีส์, Radarr สำหรับภาพยนตร์ และ qBittorrent เป็น download client ทั้งหมดสื่อสารกันผ่าน Compose network โดยใช้ชื่อ service และใช้โครงสร้างโฟลเดอร์เดียวกันบน host การติดตั้งทำได้รวดเร็ว ส่วนที่กำหนดว่า stack จะทำงานได้ต่อเนื่องหลายปีหรือทำให้คุณต้องแก้ปัญหาทุกสัปดาห์คือการจัดวาง volume ดังนั้นเนื้อหาส่วนใหญ่ของคู่มือนี้จึงกล่าวถึงเรื่องดังกล่าว

stack นี้ไม่ค้นหาเนื้อหาให้คุณ Prowlarr จะเก็บ indexer ที่คุณเพิ่มเข้าไป และคุณเป็นผู้ตัดสินใจว่าจะใช้ indexer ใด รวมถึงเป็นผู้รับผิดชอบตามกฎหมาย คู่มือนี้ครอบคลุมการเชื่อมต่อพื้นฐาน ได้แก่ users, paths, permissions, container networking และการตรวจสอบที่ยืนยันว่าระบบทำงาน

หากคุณไม่เคยเขียนไฟล์ Compose มาก่อน โปรดอ่าน พื้นฐาน Docker Compose สำหรับ VPS ก่อน บทความนี้ถือว่า docker compose version แสดงผลบางอย่างบน server ของคุณอยู่แล้ว

เมื่อ Sonarr ดำเนินการดาวน์โหลดเสร็จแล้ว ระบบจะนำเข้าไฟล์ไปยังคลังสื่อของคุณ หากโฟลเดอร์ดาวน์โหลดและโฟลเดอร์คลังสื่ออยู่ใน filesystem เดียวกัน การนำเข้าจะใช้ hardlink ซึ่งเป็นชื่ออีกชื่อหนึ่งที่ชี้ไปยังข้อมูลเดียวกันบนดิสก์ วิธีนี้ไม่ใช้พื้นที่เพิ่มเติมและไม่เสียเวลาเพิ่มเติม torrent ยังคง seeding จากชื่อเดิม ขณะที่ media server อ่านไฟล์ผ่านชื่อใหม่

หากโฟลเดอร์ทั้งสองอยู่คนละ filesystem kernel จะสร้าง link ดังกล่าวไม่ได้ Sonarr จะเปลี่ยนไปใช้การคัดลอกแทน season ขนาด 40 GB จะใช้พื้นที่ดิสก์ 80 GB และใช้เวลาหลายนาทีในการอ่านและเขียนข้อมูล นอกจากนี้ import log จะบันทึกว่า hardlink ล้มเหลวและไฟล์ถูกคัดลอกแทน บน VPS ที่กำหนดพื้นที่ดิสก์ไว้ตายตัว นี่คือสาเหตุที่พื้นที่เต็มภายในหนึ่งสัปดาห์

จุดที่มักทำให้เกิดปัญหาคือ ภายใน container bind mount ถือเป็นขอบเขตของ filesystem เมานต์ /mnt/data/torrents เป็น /downloads และ /mnt/data/media เป็น /tv แม้ว่าทั้งสองจะอยู่บนดิสก์ของ host เดียวกัน แต่ Sonarr จะมองว่าเป็น mount แยกกัน และจะไม่ยอมสร้าง link ข้าม mount เหล่านั้น เอกสารอย่างเป็นทางการของอิมเมจ LinuxServer.io ระบุเรื่องนี้โดยตรงว่า การใช้ path /downloads และ /tv แยกกันทำให้ไม่สามารถใช้ hardlink ได้

วิธีแก้คือใช้ mount เดียว ทุก container ที่เข้าถึงสื่อจะต้องได้รับ volume เดียวกันคือ /mnt/data:/data และทุก path ที่ใช้ต้องเป็นโฟลเดอร์ภายใน volume นี้ มี mount point เดียว มี filesystem เดียว และ hardlink จะทำงานได้

สร้างผู้ใช้ กลุ่ม และโฟลเดอร์

คอนเทนเนอร์จะเขียนไฟล์โดยใช้ ID ผู้ใช้แบบตัวเลข ซึ่งกำหนดโดย PUID และ PGID ใช้บัญชีของคุณเอง เพื่อให้คุณอ่านและแก้ไขไฟล์เหล่านั้นผ่าน SSH ได้โดยไม่ต้องใช้ sudo

id -u
id -g

โดยปกติ ทั้งสองคำสั่งจะแสดง 1000 บน Ubuntu VPS ที่เพิ่งสร้างใหม่ จากนั้นให้สร้างโครงสร้างไดเรกทอรี วางโครงสร้างนี้ไว้บนดิสก์ที่เก็บสื่อของคุณ และให้โครงสร้างทั้งหมดอยู่บนดิสก์เดียวกัน

sudo mkdir -p /mnt/data/torrents/movies /mnt/data/torrents/tv
sudo mkdir -p /mnt/data/media/Movies /mnt/data/media/Shows
sudo chown -R 1000:1000 /mnt/data
sudo chmod -R 775 /mnt/data

ตรวจสอบว่าทั้งหมดอยู่บนระบบไฟล์เดียวกันจริงก่อนดำเนินการต่อ:

df --output=source,target /mnt/data/torrents /mnt/data/media

ทั้งสองบรรทัดต้องแสดงอุปกรณ์ต้นทางเดียวกัน หากเป็นอุปกรณ์คนละตัว hardlink จะไม่สามารถทำงานได้ ไม่ว่าคุณจะกำหนดค่าในคอนเทนเนอร์อย่างไร

โฟลเดอร์ไลบรารีใช้ชื่อ Movies และ Shows โดยตั้งใจ หากคุณใช้งาน Jellyfin เป็นเซิร์ฟเวอร์สื่อของคุณ อยู่แล้ว ให้ mount /mnt/data/media ใน Jellyfin เป็น /media จากนั้นไลบรารีจะอยู่ที่ /media/Movies และ /media/Shows ตามตำแหน่งที่คู่มือนั้นกำหนดไว้ทุกประการ

ไฟล์สภาพแวดล้อม

เก็บค่าที่เปลี่ยนแปลงตามเซิร์ฟเวอร์ไว้ใน .env ถัดจากไฟล์ Compose

mkdir -p ~/arr && cd ~/arr

เขียน ~/arr/.env:

PUID=1000
PGID=1000
TZ=Etc/UTC
DATA_ROOT=/mnt/data

ตั้งค่า TZ เป็นโซนของคุณเอง เช่น Europe/Berlin แอปพลิเคชัน arr จะกำหนดเวลางานและประทับบรรทัดบันทึกในโซนดังกล่าว ดังนั้นค่าที่ไม่ถูกต้องจะทำให้บันทึกทั้งหมดสับสนในภายหลัง

ไฟล์ Compose

เขียน ~/arr/docker-compose.yml:

services:
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ./config/prowlarr:/config
    ports:
      - 127.0.0.1:9696:9696
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ./config/sonarr:/config
      - ${DATA_ROOT}:/data
    ports:
      - 127.0.0.1:8989:8989
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ./config/radarr:/config
      - ${DATA_ROOT}:/data
    ports:
      - 127.0.0.1:7878:7878
    restart: unless-stopped

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - WEBUI_PORT=8080
      - TORRENTING_PORT=6881
    volumes:
      - ./config/qbittorrent:/config
      - ${DATA_ROOT}:/data
    ports:
      - 127.0.0.1:8080:8080
      - 6881:6881
      - 6881:6881/udp
    stop_grace_period: "10s"
    restart: unless-stopped

ไฟล์นี้มี 4 ส่วนที่ทำหน้าที่สำคัญ

${DATA_ROOT}:/data เหมือนกันในคอนเทนเนอร์ทั้ง 3 รายการที่เข้าถึงสื่อ Prowlarr ไม่ต้องใช้ค่านี้ เพราะ Prowlarr ไม่เคยเปิดไฟล์สื่อ

พอร์ตเว็บทุกพอร์ตผูกกับ 127.0.0.1 ดังนั้น Docker จึงเผยแพร่พอร์ตผ่าน loopback address เท่านั้น หากใช้ 8989:8989 โดยตรง พอร์ตจะถูกเผยแพร่ผ่านทุก interface และกฎไฟร์วอลล์ของ Docker เองจะส่งทราฟฟิกนั้นผ่านกฎ deny ของ ufw โดยตรง พฤติกรรมนี้ทำให้ผู้ดูแลระบบสับสนอยู่เสมอ และมีคำอธิบายไว้ใน เหตุผลที่ Docker เผยแพร่พอร์ตผ่าน ufw โดยตรง

พอร์ต 6881 ถูกเผยแพร่ผ่านทุก interface โดยตั้งใจ นี่คือพอร์ตที่ torrent ใช้รับฟัง และต้องเข้าถึงได้เพื่อรองรับการเชื่อมต่อขาเข้าจาก peer อนุญาตพอร์ตนี้ด้วย sudo ufw allow 6881 และอ่าน พื้นฐานไฟร์วอลล์ ufw สำหรับ VPS หากยังไม่คุ้นเคยกับคำสั่งนี้

ไดเรกทอรีการกำหนดค่าแยกกันสำหรับแต่ละแอปพลิเคชัน และมีเพียง volume สื่อเท่านั้นที่ใช้ร่วมกัน สร้างไดเรกทอรีเหล่านี้ก่อนเริ่มทำงานครั้งแรก เพื่อให้เป็นของ user ของคุณแทนที่จะเป็นของ root:

mkdir -p ~/arr/config/prowlarr ~/arr/config/sonarr ~/arr/config/radarr ~/arr/config/qbittorrent
docker compose up -d
docker compose ps

บริการทั้ง 4 รายการควรอ่าน running ณ เดือน July 2026 อิมเมจเหล่านี้เผยแพร่บน lscr.io และแท็ก latest จะติดตามรุ่นเสถียรปัจจุบัน ดังนั้นให้ระบุแท็กรุ่นโดยตรงหากต้องการให้การอัปเกรดเกิดจากการตัดสินใจของคุณเอง ไม่ใช่เกิดขึ้นโดยไม่คาดหมาย

เข้าถึงส่วนติดต่อเว็บอย่างปลอดภัย

เนื่องจากพอร์ตเหล่านี้ผูกไว้กับ loopback จึงยังไม่มีการเปิดเผยบริการออกสู่ภายนอก ให้ส่งต่อพอร์ตผ่าน SSH จากเครื่องของคุณเอง:

ssh -L 9696:127.0.0.1:9696 -L 8989:127.0.0.1:8989 \
    -L 7878:127.0.0.1:7878 -L 8080:127.0.0.1:8080 you@your-server

ขณะนี้ http://127.0.0.1:8989 ในเบราว์เซอร์จะเข้าถึง Sonarr บนเซิร์ฟเวอร์ได้ สำหรับการเข้าถึงแบบถาวร ให้วางสแตกไว้ด้านหลัง Traefik พร้อมใบรับรอง TLS สำหรับหลายแอป หรือเข้าถึงเซิร์ฟเวอร์ผ่าน WireGuard VPN ที่คุณโฮสต์เอง ไม่ควรให้แอปพลิเคชันเหล่านี้เชื่อมต่อกับอินเทอร์เน็ตสาธารณะโดยมีเพียงหน้าล็อกอินของแอปเองเป็นกลไกป้องกัน

qBittorrent จะสร้างรหัสผ่านผู้ดูแลแบบสุ่มเมื่อเริ่มทำงานครั้งแรก และแสดงรหัสผ่านดังกล่าวใน log ของคอนเทนเนอร์ ให้อ่านรหัสผ่านแล้วเปลี่ยนในส่วนติดต่อเว็บ:

docker compose logs qbittorrent | grep -i password

หากข้ามขั้นตอนการเปลี่ยนรหัสผ่าน ระบบจะสร้างรหัสผ่านแบบสุ่มใหม่ทุกครั้งที่เริ่มทำงานอีกครั้ง และคุณจะต้องกลับมาอ่านจาก log ทุกครั้ง

ตั้งค่าเส้นทางภายในแต่ละแอปพลิเคชัน

ใน qBittorrent ให้เปิด Options จากนั้นเลือก Downloads และตั้งค่าเส้นทางบันทึกเริ่มต้นเป็น /data/torrents ให้โฟลเดอร์ดาวน์โหลดที่ยังไม่เสร็จอยู่ภายในโครงสร้างเดียวกัน เช่น /data/torrents/incomplete การดาวน์โหลดที่เสร็จสิ้นในตำแหน่งภายนอก /data จะไม่สามารถสร้าง hard link ไปยังไลบรารีได้

ใน Sonarr ให้เปิด Settings จากนั้นเลือก Media Management แล้วเพิ่มโฟลเดอร์ราก /data/media/Shows ส่วนใน Radarr ให้ใช้โฟลเดอร์ราก /data/media/Movies เส้นทางเหล่านี้เป็นเส้นทางภายใน container ระบบจะปฏิเสธเส้นทางของโฮสต์ /mnt/data/media/Shows เนื่องจากไดเรกทอรีดังกล่าวไม่มีอยู่จากมุมมองของ container

ในทั้ง Sonarr และ Radarr ให้เปิด Settings จากนั้นเลือก Download Clients แล้วเพิ่ม qBittorrent โดยใช้โฮสต์เป็น qbittorrent และพอร์ตเป็น 8080 ชื่อบริการสามารถใช้เป็นชื่อโฮสต์ได้ เนื่องจาก Compose ทำให้ container ทั้ง 4 รายการอยู่ในเครือข่ายเดียวกัน และมีบริการ DNS ภายใน เครือข่ายนี้ อย่าใช้ localhost ในส่วนนี้ เพราะภายใน Sonarr container ค่า localhost คือ Sonarr

ปล่อยให้ Remote Path Mappings ว่างไว้ ฟีเจอร์นี้ใช้แปลงเส้นทางที่ไคลเอนต์ดาวน์โหลดรายงาน ให้เป็นเส้นทางที่ arr application มองเห็นได้ เมื่อมี mount /data ร่วมกัน ทั้งสอง container จะใช้เส้นทางเดียวกันอยู่แล้ว นี่เป็นเหตุผลประการที่สองที่ทำให้โครงสร้างนี้คุ้มค่ากับการตั้งค่า

เชื่อมต่อ Prowlarr กับ Sonarr และ Radarr

Prowlarr จะส่งการกำหนดค่า indexer ไปยังแอปพลิเคชันอื่น จึงกำหนดค่า indexer เพียงครั้งเดียวแทนการกำหนดค่าซ้ำสองครั้ง Prowlarr ต้องใช้คีย์ API (application programming interface) จากแต่ละแอปพลิเคชัน

ใน Sonarr ให้เปิด Settings จากนั้นเปิด General แล้วคัดลอก API key ใน Prowlarr ให้เปิด Settings จากนั้นเปิด Apps เพิ่มแอปพลิเคชัน Sonarr แล้วกรอกข้อมูล 3 ช่อง Prowlarr Server คือ http://prowlarr:9696 Sonarr Server คือ http://sonarr:8989 API Key คือค่าที่คัดลอกมา กด Test ผลลัพธ์สีเขียวหมายความว่า Prowlarr เชื่อมต่อไปยัง Sonarr ผ่านเครือข่าย Compose สำเร็จ ทำซ้ำกับ Radarr ที่ http://radarr:7878

ผลลัพธ์สีแดงที่ระบุว่าปฏิเสธการเชื่อมต่อ โดยเกือบทุกครั้งหมายถึงชื่อ service ไม่ถูกต้อง หรือไม่มีคำนำหน้า http:// ตรวจสอบว่าชื่อนี้สามารถ resolve ได้จากภายใน container:

docker compose exec prowlarr curl -sS -o /dev/null -w '%{http_code}\n' http://sonarr:8989

รหัสสถานะ HTTP ยืนยันว่าเส้นทางเครือข่ายใช้งานได้ ข้อผิดพลาดในการ resolve ชื่อยืนยันว่าชื่อ service ไม่ถูกต้อง

ตรวจสอบว่ามีการสร้างฮาร์ดลิงก์จริง

อย่าเชื่อถือการตั้งค่าจนกว่าจะตรวจสอบจำนวนลิงก์แล้ว หลังจากนำเข้ารายการหนึ่งรายการ ให้เปรียบเทียบไฟล์ที่ดาวน์โหลดกับไฟล์ในไลบรารี:

stat -c '%i %h %n' /mnt/data/torrents/tv/*/*.mkv
stat -c '%i %h %n' /mnt/data/media/Shows/*/*/*.mkv

ตัวเลขแรกคือ inode และตัวเลขที่สองคือจำนวนลิงก์ ไฟล์ที่สร้างฮาร์ดลิงก์จะแสดง inode เดียวกันในทั้งสองตำแหน่ง และมีจำนวนลิงก์เป็น 2 หาก inode แตกต่างกัน โดยแต่ละ inode มีจำนวนลิงก์เป็น 1 แสดงว่า Sonarr คัดลอกไฟล์ และบันทึกการนำเข้าจะแจ้งว่าการสร้างฮาร์ดลิงก์ล้มเหลว

ให้ตรวจสอบพื้นที่ดิสก์ด้วย df -h /mnt/data ควรเปลี่ยนแปลงเพียงเล็กน้อยเมื่อมีการนำเข้า เนื่องจากฮาร์ดลิงก์จะเพิ่มชื่อไฟล์โดยไม่เพิ่มข้อมูล

สิ่งที่ทำงานล้มเหลวจริง

ข้อผิดพลาดด้านสิทธิ์เมื่อ import หมายความว่า user id ของ container ไม่สามารถเขียนลงในโฟลเดอร์ไลบรารีได้ ข้อความคือ Access to the path ... is denied ใช้ ls -ln /mnt/data/media ตรวจสอบว่า owner id ตรงกับ PUID ของคุณ และโปรดจำไว้ว่าไดเรกทอรีต้องมี execute bit ก่อนที่ container จะเข้าไปได้

ไฟล์ที่แสดงว่าเป็นของ root หมายความว่า container เริ่มทำงานก่อนที่ไดเรกทอรีบน host จะมีอยู่ ดังนั้น Docker จึงสร้างไดเรกทอรีนั้นเป็น root ให้หยุด stack, chown ไดเรกทอรี แล้วเริ่มทำงานอีกครั้ง

การลบ torrent จาก qBittorrent แล้วพบว่าไฟล์ในไลบรารีหายไป หมายความว่า import เป็นการ copy ที่ถูกลบภายหลัง หรือคุณลบข้อมูลแทนที่จะลบเฉพาะรายการ torrent หากเป็น hardlink จริง การลบชื่อหนึ่งจะไม่กระทบอีกชื่อหนึ่ง เนื่องจากข้อมูลจะถูกลบออกจากดิสก์เมื่อจำนวน link เหลือศูนย์เท่านั้น

ดิสก์ที่เต็มเร็วกว่าปริมาณสื่อที่คุณเพิ่ม คือกรณีที่ปัญหาการ copy มีต้นทุนสูงที่สุด ให้เรียกใช้การตรวจสอบ stat ที่กล่าวไว้ข้างต้นก่อนซื้อพื้นที่จัดเก็บเพิ่ม

สิ่งที่ชุดซอฟต์แวร์นี้ต้องการจาก VPS

แอปพลิเคชัน arr ทั้งสามรายการใช้ทรัพยากรน้อย แอปพลิเคชันเหล่านี้จะเรียกดู indexer เป็นระยะ เขียนข้อมูลลงในฐานข้อมูล SQLite ขนาดเล็ก และเปลี่ยนชื่อไฟล์ เซิร์ฟเวอร์ที่มี RAM 2 GB สามารถเรียกใช้ container ทั้งสี่รายการได้อย่างสบาย ภาระงานหลักมาจากส่วนอื่น download client จะใช้ความสามารถในการอ่านและเขียนข้อมูลของดิสก์จนเต็มเมื่อจัดการ torrent ขนาดใหญ่ และ media server ที่ทำ transcoding วิดีโอบนเครื่องเดียวกันจะใช้ CPU สูง ให้จัดเก็บสื่อไว้ใน volume ที่มีอัตราการรับส่งข้อมูลจริงสูง และตั้ง bandwidth limit ให้กับ download client หากเซิร์ฟเวอร์ยังต้องทำงานอื่นที่สำคัญกับคุณ

FAQ

เนื่องจากต้นทางและปลายทางอยู่คนละ filesystem จากมุมมองของ container การ bind mount แยกกัน 2 รายการ เช่น /downloads และ /tv จะถือเป็นคนละ filesystem แม้ว่าทั้งคู่จะมาจากดิสก์เดียวกันบนโฮสต์ก็ตาม ให้ mount ไดเรกทอรีแม่เพียงรายการเดียวเป็น /data ในทุก container แล้ววางไดเรกทอรีดาวน์โหลดและไลบรารีไว้ภายในนั้น จากนั้นจึงสามารถสร้างลิงก์ได้ ตรวจสอบผลลัพธ์ด้วย stat -c '%i %h %n' กับไฟล์ทั้ง 2 รายการ โดยต้องมี inode เดียวกันและมีจำนวนลิงก์เป็น 2

ควรใช้ PUID และ PGID ใด?

ให้ใช้ id ตัวเลขของบัญชีบนโฮสต์ที่เป็นเจ้าของ media tree โดยดูค่าได้จาก id -u และ id -g ใน Ubuntu VPS ที่ติดตั้งใหม่ ค่าดังกล่าวมักเป็น 1000 ทั้งคู่ container ทุกตัวใน stack ต้องใช้ค่าคู่นี้เหมือนกัน มิฉะนั้นแอปพลิเคชันหนึ่งจะเขียนไฟล์ที่อีกแอปพลิเคชันหนึ่งไม่มีสิทธิ์แก้ไขได้ หลังเปลี่ยนค่าแล้ว ให้สร้าง container ใหม่ด้วย docker compose up -d --force-recreate และแก้ไขเจ้าของไฟล์ที่มีอยู่ด้วย chown -R

จำเป็นต้องเปิดเผยเว็บอินเทอร์เฟซเหล่านี้สู่อินเทอร์เน็ตหรือไม่?

ไม่จำเป็น และไม่ควรทำเช่นนั้น ให้ bind แต่ละพอร์ตที่เผยแพร่ไว้กับ 127.0.0.1 ในไฟล์ Compose จากนั้นเข้าถึงอินเทอร์เฟซผ่าน SSH tunnel, VPN หรือ reverse proxy ที่ยุติการเชื่อมต่อ TLS (transport layer security) และเพิ่มการยืนยันตัวตนของตนเอง การเผยแพร่พอร์ตโดยตรงมีความเสี่ยงมากกว่าที่เห็น เนื่องจาก Docker เพิ่มกฎไฟร์วอลล์ของตนเอง และกฎ ufw deny จะไม่หยุด traffic ดังกล่าว

จะค้นหารหัสผ่าน qBittorrent ได้จากที่ใด?

อิมเมจ LinuxServer.io จะแสดงรหัสผ่านชั่วคราวสำหรับผู้ใช้ admin ใน startup log ให้เรียกใช้ docker compose logs qbittorrent | grep -i password เพื่ออ่านรหัสผ่าน จากนั้นตั้งรหัสผ่านถาวรใน Options และ Web UI ระบบจะสร้างรหัสผ่านชั่วคราวใหม่ทุกครั้งที่ restart จนกว่าคุณจะตั้งรหัสผ่านของตนเอง

Jellyfin ใช้โฟลเดอร์เดียวกันได้หรือไม่?

ได้ และนี่คือจุดประสงค์ของโครงสร้างดังกล่าว ให้ mount /mnt/data/media เข้า media server เป็น /media จากนั้นไลบรารีจะอยู่ที่ /media/Movies และ /media/Shows ขณะที่ Sonarr และ Radarr เขียนข้อมูลไปยังไดเรกทอรีเดียวกันผ่าน /data/media กำหนด PUID และ PGID ให้ media server ใช้เหมือนกัน เพื่อให้สามารถอ่านข้อมูลที่ arr stack เขียนได้

#sonarr#radarr#prowlarr#docker-compose#self-hosting