Paylaş

Okuma Listem

# Saatlik Popüler Etiketler
Etiketler yükleniyor...
Kelimero Ağı

Docker ile Arr Stack Kurulumu: Medya Sunucusu ve Dosya İzinleri Çözümü

Odaklan
Dinle
Kaydet
[ÖZET] Kendi ev sunucunuzda (Self-Hosted) tam otomatik bir medya kütüphanesi kurmak istiyorsanız, Radarr, Sonarr, Prowlarr ve bir indirme istemcisinden (qBittorrent/Transmission) oluşan efsanevi "Arr" dizilimini (The Arr Stack) Docker üzerinde ayağa kaldırmak en mantıklı yoldur. Filmlerin ve dizilerin otomatik olarak bulunup indirilmesi, isimlendirilmesi, kapak fotoğraflarının çekilmesi ve medya oynatıcınıza (Jellyfin/Plex) hazır hale getirilmesi bu sistemin görevidir. Ancak bu muazzam otomasyonu kuran binlerce kullanıcının hevesi, ekranda beliren "Access Denied" (Erişim Engellendi), "Folder is not writable by user" veya "Import failed" hatalarıyla kursağında kalır. İndirme yazılımı dosyayı başarıyla indirir, ancak Sonarr veya Radarr o dosyayı alıp arşiv klasörüne taşıyamaz. Çoğu kullanıcı panikle klasörlere "chmod 777" (herkese tam yetki) atayarak güvenlik açığı yaratır veya Docker Volume (Birleştirme) ayarlarını yanlış yapılandırarak dosyaların diskte iki kat yer kaplamasına (Hardlink hatası) neden olur. Bu kapsamlı rehberde, Arr Stack mimarisini Docker üzerinde kurarken karşılaşılan Linux dosya izinleri kabusunu, PUID/PGID eşleştirmelerini, Hardlink (Sert bağlantı) mucizesini ve kusursuz bir medya sunucusu klasör yapısının nasıl tasarlanacağını en sade ve teknik haliyle inceliyoruz.
SONARR RADARR QBITTORRENT PUID=1000 /DATA /torrents /media
Ortak İzin Mimarisi: Sonarr, Radarr ve indirme istemcisi gibi farklı Docker konteynerlerinin (sol) aynı sabit disk klasörüne (sağ) sorunsuz erişebilmesi ve dosyaları kopyalamadan (Hardlink) taşıyabilmesi için, hepsinin ana sisteme aynı kullanıcı kimliğiyle (PUID=1000) bağlanması zorunludur.

1. "The Arr Stack" Nedir ve Otomasyon Nasıl Çalışır?

Dijital belge arşivlemede (Örneğin Paperless-ngx) olduğu gibi, medya dosyalarınızı (film, dizi, müzik) barındırmak için de tam bağımsız sistemler kurabilirsiniz. "Arr Stack", medya yönetimini otomatikleştiren yazılımlar ailesine verilen genel addır. Bu ailenin temel üyeleri Radarr (Filmler), Sonarr (Diziler), Lidarr (Müzik) ve Prowlarr'dır (İndeksleyici ve arama motoru).

Sistem şu şekilde işler: Siz Sonarr arayüzüne girip "Breaking Bad" dizisini eklersiniz. Prowlarr, belirlediğiniz torrent veya usenet sitelerinde bu dizinin uygun çözünürlükteki bölümlerini arar. Bulduğunda, indirme istemcinize (qBittorrent, Transmission vb.) komut gönderir. İndirme bittiğinde Sonarr devreye girer, indirilen karışık isimli video dosyasını alır, adını standart formata göre düzeltir, altyazısını çeker ve nihai medya arşiv klasörünüze (Plex veya Jellyfin'in okuduğu klasöre) taşır. Tüm bu süreç arka planda ve el değmeden gerçekleşir. Ancak bu kusursuz balenin bozulduğu tek bir nokta vardır: Dosya İzinleri.

2. Kâbusun Başlangıcı: Neden Erişim Engellendi (Access Denied) Hatası Alıyoruz?

İşletim sistemi olarak Linux (Ubuntu, Debian, OpenMediaVault) kullanıyorsanız ve bu uygulamaları Docker konteynerleri (Container) olarak çalıştırıyorsanız, Linux'un katı dosya güvenlik kurallarıyla yüzleşmek zorundasınız.

Linux'ta her dosyanın bir "Sahibi" (Owner) ve bir "Grubu" (Group) vardır. Docker konteynerleri, varsayılan olarak izole bir ortamda "root" (Süper Yönetici) olarak çalışmaya eğilimlidir. Ancak linuxserver.io gibi popüler kaynaklardan indirdiğiniz Radarr veya qBittorrent imajları, güvenlik gereği "abc" isimli kısıtlı bir kullanıcı yaratır ve uygulamayı onun üzerinden çalıştırır.

Senaryo şu şekilde çöker: qBittorrent konteyneri bir filmi indirip /downloads klasörüne kaydeder. Ancak qBittorrent bu dosyayı oluştururken kendi içindeki kullanıcının (Örneğin UID 911) kimliğini kullanır. İndirme bitince Radarr konteyneri bu dosyayı alıp /movies klasörüne taşımak için klasöre girer. Ancak Radarr konteynerinin kimliği farklıdır (Örneğin UID 1000). Linux çekirdeği Radarr'a şu cevabı verir: "Bu dosya sana ait değil, okuyabilirsin ama taşıyamaz veya silemezsin." İşte Radarr arayüzünde gördüğünüz o kırmızı "Import failed, path does not exist or is not accessible by Radarr" hatasının tek sebebi budur.

3. PUID ve PGID (Kullanıcı ve Grup Kimlikleri) Mantığı

Bu kimlik karmaşasını çözmenin yolu, tüm Docker konteynerlerine "Aynı kişi" olduklarını söylemektir. Ana Linux makinenizde (Docker'ın kurulu olduğu sunucuda) sizin giriş yaptığınız bir kullanıcı hesabı vardır. Bu hesabın sistemsel numarasına UID (User ID), dahil olduğu grubun numarasına ise GID (Group ID) denir. Klasik bir Linux kurulumunda ilk oluşturulan kullanıcının UID ve GID numarası 1000'dir.

Docker Compose dosyamızda Radarr, Sonarr ve qBittorrent konteynerlerinin altına PUID=1000 ve PGID=1000 yazarsak, bu uygulamalara şu emri vermiş oluruz: "Siz içeride hangi uygulama olursanız olun, dosyaları ana makinedeki 1000 numaralı kullanıcının yetkisiyle yazın ve okuyun." Hepsi aynı kimliği kullandığı için birbirlerinin dosyalarını özgürce taşıyabilir, silebilir ve yeniden adlandırabilirler.

SUNUCUNUZDAKİ UID VE GID NUMARASINI ÖĞRENMEK
Ana makinenizin (Linux Sunucunuzun) terminaline SSH ile bağlanın ve şu komutu yazıp Enter'a basın:

id $USER

Karşınıza şöyle bir çıktı gelecektir: uid=1000(tarik) gid=1000(tarik) groups=1000(tarik),27(sudo),999(docker)

Buradaki uid=1000 ve gid=1000 değerleri, sizin Docker Compose dosyanıza yazmanız gereken altın anahtarlardır.

4. Hardlink (Sert Bağlantı) Mucizesi ve Çifte Depolama Sorunu

İzinleri çözdükten sonra Arr stack kullanıcılarının düştüğü en büyük ikinci hata Volume (Birim) Mimarisi hatasıdır. Birçoğumuz Docker Compose yazarken indirme istemcisine - /mnt/disk/downloads:/downloads yolunu, Radarr'a ise - /mnt/disk/movies:/movies yolunu veririz. Bu görünüşte mantıklıdır ancak otomasyonun kalbine sıkılmış bir kurşundur.

Torrent protokolü, indirilen dosyanın yerinde kalmasını (Seed edilmesini) gerektirir. Eğer Radarr, indirme klasöründeki dosyayı alıp arşiv klasörüne taşırsa torrent bozulur. Bu yüzden Radarr, orijinal dosyayı elleyemez, onu arşiv klasörüne Kopyalar. 50 GB'lık bir 4K film indirdiğinizde, aynı filmden diskinizde iki tane olur (Biri downloads'ta, diğeri movies'te) ve diskiniz anında dolar.

Bunun çözümü Hardlink (Sert Bağlantı) teknolojisidir. Hardlink, aynı fiziksel dosyayı diskin farklı klasörlerinde iki farklı dosyaymış gibi gösteren bir Linux özelliğidir. Dosya aslında diskte bir tanedir (50 GB kaplar), ancak hem indirme programı onu kendi klasöründe görür ve Seed etmeye devam eder, hem de Radarr onu kendi arşiv klasöründe görür ve Plex'e sunar.

KRİTİK BİLGİ // HARDLİNK İÇİN TEK KÖK KLASÖR ŞARTI
Linux'ta Hardlink (Sert bağlantı) işlemi, yalnızca aynı bağlama noktası (Mount Point) içinde gerçekleşebilir.

Eğer Docker'a /downloads ve /movies diye iki ayrı volume yolu gösterirseniz, Docker bunları "Farklı diskler" olarak algılar. Farklı diskler arasında Hardlink yapılamaz, mecburen kopyalama (Copy) yapılır.

Hardlink mucizesini kullanabilmek için, tüm uygulamalara tek bir kök klasör göstermelisiniz: /data. Ve iç klasör yapılarını bu /data klasörünün altında oluşturmalısınız.

5. Kusursuz Klasör Mimarisi (Atomic Move)

Hardlink ve hızlı taşıma (Atomic Move) işlemlerinin kusursuz çalışması için ana sabit diskinizde (veya NAS cihazınızda) şu klasör hiyerarşisini oluşturmalısınız:

  • /data (Ana Kök Klasör - Tüm Docker konteynerlerine sadece bu bağlanacak)
    • /data/torrents (qBittorrent sadece buraya indirecek)
      • /data/torrents/movies
      • /data/torrents/tv
    • /data/media (Arşiv Klasörünüz - Plex/Jellyfin burayı okuyacak)
      • /data/media/movies
      • /data/media/tv

6. Adım Adım Sorunsuz Docker Compose Örneği

Yukarıda anlattığımız UID/GID izin eşleştirmelerini ve tek kök klasör (Hardlink) mantığını birleştiren, ömür boyu hata vermeden çalışacak kusursuz bir docker-compose.yml dosyası şablonu şöyledir:

docker-compose.yml (ARR STACK)
version: "3"
services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - /opt/qbittorrent/config:/config
      - /mnt/sabitdisk/data:/data  # DİKKAT: Tek kök klasör
    ports:
      - 8080:8080
      - 6881:6881
      - 6881:6881/udp
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - /opt/radarr/config:/config
      - /mnt/sabitdisk/data:/data  # DİKKAT: qBittorrent ile aynı yol
    ports:
      - 7878:7878
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Istanbul
    volumes:
      - /opt/sonarr/config:/config
      - /mnt/sabitdisk/data:/data  # DİKKAT: Hepsi aynı kök dizini görüyor
    ports:
      - 8989:8989
    restart: unless-stopped
    

Bu kurulumda, Radarr'ın ayarlarına girdiğinizde indirme yolu veya medya yolu olarak /data/torrents/movies ve /data/media/movies klasörlerini göstereceksiniz. Hepsi aynı /data çatısı altında olduğu için Radarr taşıma işlemi yapmak istediğinde kopyalama yapmayacak, anında bir Hardlink oluşturarak diskinizde yer kazandıracaktır.

7. Mevcut Dosya İzinlerini Terminalden Onarmak (Chmod ve Chown)

Docker komutlarınızı yukarıdaki gibi düzelttiniz, ancak sistem hala geçmişten kalan dosyaları taşıyamıyor mu? Bunun sebebi, daha önceden root yetkisiyle indirilmiş dosyaların fiziksel izinlerinin hala kilitli kalmasıdır. Ana klasörünüzün sahipliğini zorla kendi kullanıcınıza (1000) vermeniz gerekir.

Linux terminalinizi (SSH) açın ve arşivinizin bulunduğu ana klasörün üzerine şu iki komutu sırasıyla çalıştırın. (Bu komuttaki /mnt/sabitdisk/data yolunu kendi /data klasörünüzün gerçek yoluyla değiştirin):

1. Sahipliği Değiştirmek (Chown):
sudo chown -R 1000:1000 /mnt/sabitdisk/data
Bu komut (-R parametresi sayesinde) data klasörünün ve içindeki binlerce alt klasör ile dosyanın sahibini ve grubunu 1000 numaralı kullanıcıya (Sizin PUID ve PGID'inize) devreder.

2. Okuma ve Yazma Yetkilerini Ayarlamak (Chmod):
sudo chmod -R 775 /mnt/sabitdisk/data
Bu komut, klasörün sahibine (Siz) ve grubunuza tam okuma/yazma/çalıştırma yetkisi verirken, dışarıdan gelen misafir kullanıcılara sadece okuma yetkisi verir.

GÜVENLİK UYARISI // CHMOD 777 TUZAĞI
İnternetteki birçok forumda, erişim engellendi hatalarını çözmek için sudo chmod -R 777 komutunu çalıştırmanız tavsiye edilir. Bu, bir bilgisayar korsanına veya zararlı bir yazılıma evinizin anahtarını altın tepside sunmaktır.

777 izni, ağınıza sızan herhangi bir uygulamanın o klasördeki dosyaları silmesine veya fidye yazılımıyla (Ransomware) şifrelemesine olanak tanır. PUID/PGID eşleştirmesi doğru yapıldığında asla 777 iznine ihtiyaç duymazsınız.

8. Synology NAS, Unraid ve OMV Kullanıcıları İçin İpuçları

Eğer Ubuntu veya Debian gibi saf bir Linux yerine Synology DSM, TrueNAS, Unraid veya OpenMediaVault (OMV) gibi hazır NAS işletim sistemleri kullanıyorsanız, dosya izinleri sadece UID/GID ile bitmeyebilir. Bu sistemler, dosya güvenliği için ek bir katman olan ACL (Access Control Lists) kullanırlar.

Örneğin Synology NAS'ta, Docker uygulamasının kendi oluşturduğu bir kullanıcı hesabı vardır. Arr Stack'i kurarken, NAS arayüzündeki Shared Folder (Ortak Klasör) > Permissions (İzinler) bölümüne giderek, /data klasörünüz için oluşturduğunuz Docker kullanıcısına açıkça Okuma ve Yazma (Read/Write) izni vermeniz gerekir. Aksi takdirde, PUID=1000 girseniz dahi NAS'ın ACL güvenlik duvarı Docker konteynerinin diske yazmasını engelleyecektir.

"Yazılım otomasyonları sihirli değildir; onlar katı mantık kurallarıyla işleyen işçilerdir. İşçilerinize doğru yetki kartlarını (PUID) ve doğru depo kapılarını (Volume/Hardlink) verdiğinizde, yıllarca bir kez bile takılmadan sizin için kusursuz bir kütüphane inşa ederler."

Sonuç: Otomasyonun Kusursuz İşleyişi

Ev sunucunuzda kendi Netflix'inizi (veya belge arşivinizi) yönetmek, dijital bağımsızlığın en keyifli aşamalarından biridir. Medya sunucusu kurulumlarında ve Docker yapılarında karşılaşılan hataların %90'ı yazılımın bozuk olmasından değil, Linux çekirdeğinin dosya sahipliği protokollerinin ihlal edilmesinden kaynaklanır.

Arr Stack (Radarr, Sonarr, vb.) konteynerlerinizi yapılandırırken PUID ve PGID değerlerini ana kullanıcınızla birebir aynı tutarak erişim engeli (Access Denied) kâbusunu kökünden çözebilirsiniz. Daha da önemlisi, Docker Volume bağlamalarını her uygulama için ayrı klasörler şeklinde değil, tek bir ana /data kök dizini üzerinden yaparak Hardlink (sert bağlantı) özelliğini aktif hale getirebilirsiniz. Bu sayede indirdiğiniz yüksek boyutlu filmler diskinizde iki kez kopyalanıp yer israf etmez, anında arşivinize taşınır. İzinleri ve klasör mimarisini bir kez doğru oturttuğunuzda, sunucunuz aylarca arayüzüne bile bakmanıza gerek kalmadan sessiz ve kusursuz bir şekilde çalışmaya devam edecektir.

İçeriği Paylaş
T

T.T

Kelimero'nun kurucusu. Araştırmayı, etimolojiyi ve bilginin köklerine inmeyi seven bir dijital kültür elçisi.

Sonraki İçerik Yeni Yayınlara Git Önceki İçerik Eski Yayınlara Git
Sizin İçin Seçilenler