Frost
Üyecik
Konu Başlıkları Gizle
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?
İlk iş olarak Mac'e Multipass kurup izole bir Ubuntu oluşturuyoruz. Terminal'i açıp şunu yapıştırın:
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ı):
Makine ayağa kalktıktan sonra direkt içine giriş yapıyoruz:
(Artık macOS'ten çıktık, tüm komutları bu hızlı Ubuntu ortamında vereceğiz.)
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:
Bulut diski bağlamamıza yarayacak FUSE yetkisini veriyoruz:
İş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ışı
Çalışma klasörlerimizi yaratıp compose dosyamızı oluşturuyoruz:
Açılan metin editörüne şu yapıyı yapıştırıyoruz:
Dosyayı kaydedip çıkıyoruz (
(Not: Bu sistemin çalışabilmesi için nzbdav sunucusuna ait bilgilerinizi içeren
Her şey tamamsa start veriyoruz:
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:
İ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!
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!