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.
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.
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
- /data/torrents (qBittorrent sadece buraya indirecek)
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:
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.
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.
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.