Frost

Üyecik
Katılım
4 Temmuz 2026
Mesajlar
6
Beğeniler
3
Yer
Pembroke Pines, FL
Selamlar herkese,

Köşede tozlanan Mac Mini'sini ya da MacBook'unu gerçek bir medya kütüphanesine (Plex, Radarr, Sonarr vb.) çevirmek isteyip de başarılı olamayan veya takılma sorunları yaşayanlar için tamamen kendi kullandığım ve tam stabiliteye kavuşturduğum yapıyı paylaşmak istedim. Bizzat derlediğim ve yabancı kaynaklarda da çokça tartışılan I/O darboğazını aşmanın yolunu sizlere adım adım anlatacağım.

Sorun şu: macOS üzerinde standart Docker Desktop kurduğunuzda, araya giren sanallaştırma katmanı (VirtioFS gibi), bulut diskleri FUSE ile sisteme bağlamaya çalıştığınızda hatalarla karşılaşıyor. Plex kütüphane taraması yaparken veya büyük bir dosya işlenirken sistem donuyor, okuma/yazma hataları veriyor ve performansı kayıpları yaşanıyor.

Bu dertten tamamen kurtulup, Mac'in diskini 1 GB bile doldurmadan devasa bir arşiv yaratmanın sırrı şu üçlüde yatıyor: Multipass + Ubuntu VM + Docker.

Neden Bu Yöntemi Seçiyoruz?

  • Tam Uyumluluk: Bağlantı (mount) işlemlerini doğrudan Multipass ile kurduğumuz Ubuntu'nun kalbinde (native) yapıyoruz. Ana makine ile sanal makine arasında dosya izinleri yüzünden kopmalar yaşanmıyor.
  • Sıfır Takılma: Disk taramalarında yaşanan o sinir bozucu kilitlenmeler tamamen ortadan kalkıyor.
  • Sistemi Yormaz: Docker Desktop uygulamasının RAM ve işlemci sömüren yapısı yerine, Multipass doğrudan Apple'ın kendi yerel altyapısını (Hypervisor) kullanarak çok hafif çalışıyor.

Önemli Not: Benim aşağıda paylaştığım yapı, içeriğin kolay kolay silinmediği ve kalitenin her zaman üst düzeyde olduğu Usenet (nzbdav) üzerine kuruludur. Bildiğiniz gibi Debrid servislerinde bazen eski içeriklere ulaşmak sıkıntı olabiliyor. Bu rehberi birebir yapabilmeniz için sağlam bir Usenet Provider ve Indexer ikilisine ihtiyacınız var (bu konuyu bilmiyorsanız araştırmanızı öneririm). Tabii ki "Ben Debrid ile mutluyum" diyenler, aşağıdaki compose dosyasındaki nzbdav kısımlarını kendi zurg veya cli_debrid ayarlarıyla kolayca değiştirebilirler.



Kurulum Adımları​


# 1. Aşama: Multipass ile Temel Sistemi Hazırlama​


İlk iş olarak Mac'e Multipass kurup izole bir Ubuntu oluşturuyoruz. Terminal'i açıp şunu yapıştırın:

Bash:
brew install --cask multipass


Yüklendikten sonra cihazımızın gücüne göre sanal makinemize kaynak ayırıp başlatıyoruz (Örn: 4 Çekirdek, 4GB RAM, 40GB Disk alanı):

Bash:
multipass launch --name mediaserver --cpus 4 --memory 4G --disk 40G


Makine ayağa kalktıktan sonra direkt içine giriş yapıyoruz:

Bash:
 multipass shell mediaserver


(Artık macOS'ten çıktık, tüm komutları bu hızlı Ubuntu ortamında vereceğiz.)

# 2. Aşama: Docker ve Disk Altyapısı​


Tüm sistemi kendi içinde haberleşecek (internal) şekilde ayarlayacağımız için Ubuntu'ya ekstra yazılımlar kurup şişirmiyoruz. Sadece Docker ve mount için FUSE modülü yeterli.

Docker'ı yüklüyoruz:

Bash:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker ubuntu

Bulut diski bağlamamıza yarayacak FUSE yetkisini veriyoruz:

Bash:
sudo apt update && sudo apt install fuse -y


# 3. Aşama: Compose Dosyası ve İç Bağlantılar​


İşin büyüsü burada. Usenet akışını (nzbdav) alıp Rclone ile sanal bir diske dönüştürme işlemini dışarıda değil, direkt Docker konteynerinin içinde yapacağız. Rclone aldığı bu akışı rshared ile paylaşıma sunacak; Plex ve Arr otomasyonları da rslave komutuyla bunu sıfır kayıpla kendi içlerine alacak.

Çalışma klasörlerimizi yaratıp compose dosyamızı oluşturuyoruz:

Bash:
mkdir -p ~/docker-stack/config/rclone
mkdir -p ~/docker-stack/mnt/remote
cd ~/docker-stack
nano docker-compose.yml

Açılan metin editörüne şu yapıyı yapıştırıyoruz:

YAML:
version: '1'
services:
  # --- 1. USENET VE BAGLANTI (MOUNT) SERVISLERI ---
  nzbdav:
    image: nzbdav/nzbdav:latest
    container_name: nzbdav
    restart: unless-stopped
    healthcheck:
      test: curl -f http://localhost:3000/health || exit 1
      interval: 1m
      retries: 3
    ports:
      - "3000:3000"
    volumes:
      - ./config/nzbdav:/config
      - ./mnt/remote:/mnt/remote
    environment:
      - PUID=1000
      - PGID=1000

  nzbdav_rclone:
    image: rclone/rclone:latest
    container_name: nzbdav_rclone
    restart: unless-stopped
    cap_add:
      - SYS_ADMIN
    devices:
      - /dev/fuse:/dev/fuse:rwm
    security_opt:
      - apparmor:unconfined
    volumes:
      # Rclone yayini "rshared" ile diger konteynerlere paylasir
      - ./mnt/remote:/mnt/remote:rshared
      - ./config/rclone:/config/rclone
    depends_on:
      nzbdav:
        condition: service_healthy
    command: >
      mount nzbdav: /mnt/remote/nzbdav
      --config /config/rclone/rclone.conf
      --uid=1000
      --gid=1000
      --allow-other
      --links
      --use-cookies
      --vfs-cache-mode=full
      --vfs-cache-max-size=20G
      --buffer-size=0M
      --vfs-read-ahead=512M
      --dir-cache-time=20s

  # --- 2. OTOMASYON MERKEZI: RADARR & SONARR ---
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - ./config/radarr:/config
      - ./media/movies:/movies 
      # Disk "rslave" ile iceri alinir ve okuma/yazma (rw) hakki verilir
      - ./mnt/remote/nzbdav:/mnt/nzbdav:rw,rslave
    ports:
      - "7878:7878"
    restart: unless-stopped
    depends_on:
      - nzbdav_rclone

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr  
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - ./config/sonarr:/config
      - ./media/tv:/tv 
      - ./mnt/remote/nzbdav:/mnt/nzbdav:rw,rslave
    ports:
      - "8989:8989"
    restart: unless-stopped
    depends_on:
      - nzbdav_rclone

  # --- 3. MEDYA OYNATICI: PLEX ---
  plex:
    image: lscr.io/linuxserver/plex:latest
    container_name: plex
    environment:
      - PUID=1000
      - PGID=1000
      - VERSION=docker
      # Kendi claim kodunuzu https://www.plex.tv/claim uzerinden almaniz gerek
      - PLEX_CLAIM=claim-kodunuzu-buraya-yazin
    ports:
      - "32400:32400/tcp"
      - "32400:32400/udp"
    volumes:
      - ./config/plex:/config
      - ./media:/media
      # Plex sadece izleyici oldugu icin ro (read-only) hakkiyla calisir
      - ./mnt/remote/nzbdav:/mnt/nzbdav:ro,rslave
    restart: unless-stopped
    depends_on:
      - nzbdav_rclone

  # --- 4. EKSTRA ARACLAR ---
  seerr:
    image: ghcr.io/seerr-team/seerr:latest
    init: true
    container_name: seerr
    environment:
      - LOG_LEVEL=debug
      - TZ=Europe/Istanbul
      - PORT=5055
    ports:
      - "5055:5055"
    volumes:
      - ./config/seerr:/app/config
    restart: unless-stopped

  profilarr:
    image: santiagosayshey/profilarr:latest
    container_name: profilarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - ./config/profilarr:/config
    ports:
      - "6868:6868"
    restart: unless-stopped

  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - ./config/bazarr:/config
      - ./media/movies:/movies 
      - ./media/tv:/tv
      - ./mnt/remote/nzbdav:/mnt/nzbdav:rw,rslave
    ports:
      - "6767:6767"
    restart: unless-stopped
    depends_on:
      - nzbdav_rclone

Dosyayı kaydedip çıkıyoruz (Ctrl+O, Enter, Ctrl+X).

(Not: Bu sistemin çalışabilmesi için nzbdav sunucusuna ait bilgilerinizi içeren rclone.conf dosyasını mutlaka ~/docker-stack/config/rclone/ dizinine atmayı unutmayın.)

Her şey tamamsa start veriyoruz:

Bash:
docker compose up -d



Ve Mutlu Son​


Bu saatten sonra Mac cihazınıza dokunmanıza bile gerek yok, kendi halinde arkada sorunsuz şekilde çalışacaktır. Servislere yerel IP adresiniz üzerinden erişebilirsiniz (Örneğin Plex için: http://MAC-YEREL-IP:32400/web).

İstediğiniz cihazdan yapılandırdığınız arşive erişip sıfır gecikmeyle içeriklerinizi tüketebilirsiniz. Kurulum sırasında WebDAV veya Rclone kısımlarında takılan olursa konuya yazsın, elimden geldiğince destek olurum. İyi seyirler!