SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor

VPS Uzerinde Jellyfin Kurulumu ve Medya Sunucusu Rehberi

VPS uzerinde Docker ile Jellyfin kurarak kendi medya arsivinizi yonetin. Dosya izinleri, blok depolama baglantilari ve CPU transcode limitleri hakkinda teknik detaylari ogrenin.

Ne inşa ediyorsunuz

Bir VPS üzerinde Jellyfin medya sunucusu: bir container, üç volume ve film ile dizilerinizi barındıran bir blok depolama diski; herhangi bir tarayıcıdan veya Jellyfin uygulamasından erişilebilir. Kurulum, on beş satırlık bir compose dosyasıdır. Kurulum sonrasında ortaya çıkan tüm sorunlar iki temel nedenden kaynaklanır: container'ın okuyamadığı dosya izinleri ve GPU'su olmayan bir VPS'ten yapamayacağı bir video transcode işlemini talep etmek. Bu kılavuz, destek taleplerinin ana kaynağı oldukları için bu iki konuya geniş yer ayırmaktadır.

Jellyfin ücretsiz ve tamamen açık kaynaklıdır; hesap zorunluluğu, ücretli özellikler veya telemetri içermez. Bu nedenle 2026 yılında kendi sunucunuzda barındırmaya değer şeyler listelerinin neredeyse tamamında yer alır. Sahip olduğunuz medyayı oynatır. Herhangi bir içerik ile birlikte gelmez ve bu kılavuz içerik edinme üzerine değildir.

Transkodlama gerçeği: herhangi bir kiralama yapmadan önce

Bunu öncelikle okuyun, çünkü satın alacağınız şeyi değiştirecektir. Bir medya sunucusu, oynat tuşuna bastığınızda iki şeyden birini yapar. Direct play, dosyayı olduğu gibi aktarır: VPS diskten baytları okur ve ağ üzerinden gönderir; bu işlem neredeyse hiç CPU harcamaz. Transcoding ise videoyu anlık olarak yeniden kodlar; yeni çözünürlük, yeni kodek veya gömülü altyazı ekler ve bu tamamen CPU gücü gerektiren bir iştir.

Tipik bir VPS'in GPU'su yoktur. Bu nedenle her video transkodlama işlemi libx264/libx265 ile CPU üzerinde çalışır ve yazılımsal kodlama maliyetlidir. Tek bir 1080p H.264 transkodlama işlemi, paylaşımlı birkaç vCPU'yu tamamen meşgul edebilir; 4K veya HEVC transkodlama ise genellikle gerçek zamanlı hıza yetişemez, bu yüzden oynatma durur ve sürekli tamponlama yapar. Intel iGPU veya Nvidia kartına sahip ev tipi bir cihazda bu işlemi ucuz kılan donanımsal transkodlama, sağlayıcınız GPU örnekleri kiralamadığı sürece sizin için mevcut değildir.

Bu nedenle VPS üzerindeki temel strateji şudur: transkodlamadan kaçının. Kitaplığınızı istemcilerinizin yerel olarak oynatabildiği kodeklerde tutun: H.264 video, AAC veya AC3 ses, MP4 veya MKV kapsayıcısı kullanın ve direct-play destekleyen istemci uygulamalarını seçin: Android TV, iOS ve Roku için yerel Jellyfin uygulamaları, ayrıca Infuse, Kodi ve masaüstü Jellyfin Media Player. Bunu yaparsanız VPS, oynatma sırasında hiçbir zaman ffmpeg transkodlama işlemi çalıştırmak zorunda kalmaz ve mütevazı bir 2 vCPU sunucu aynı anda birkaç kişiye yayın yapabilir. Transkodlama yapmayı planlıyorsanız çok daha büyük ve pahalı bir sunucuya ihtiyacınız olur; bu durumda bile 4K oynatmak riskli bir tercihtir.

Bant genişliği hesabını da yapın, çünkü bu diğer sürpriz noktadır. Direct play, dosyayı kendi bit hızında gönderir. Sıkıştırılmış bir 1080p dosya 8-12 Mbps hızında çalışır; 1080p Blu-ray remux 20-30 Mbps; 4K HDR ise 40-80 Mbps hızındadır. 10 Mbps hızındaki dosyaları direct-play ile izleyen üç kişi, VPS'inizden sürekli 30 Mbps yükleme trafiği demektir. Planınızdaki iki rakamı kontrol edin: port hızı (30 Mbps yükleme hızını destekliyor mu?) ve aylık veri transfer kotası. İki saatlik 10 Mbps hızındaki bir film yaklaşık 9 GB veri harcar; dolayısıyla 1 TB/aylık kotalı bir plan ayda yüz civarında filme, yani günde üç veya dört filme denk gelir. 4K izleyen bir hane ise dört ila sekiz kat daha fazla bit hızıyla bu kotayı çok daha hızlı tüketir. Aynı sunucudan trafik çıkışına neden olan diğer her şeyi de bu bütçeye dahil edin; buna, iki eşin doğrudan bağlanamadığı durumlarda tüm uzak masaüstü oturumunu taşıyan kendi kendine barındırılan RustDesk relay servisi de dahildir.

Ön gereksinimler

  • root veya sudo yetkilerine sahip, Docker ve Compose eklentisi kurulu güncel bir Ubuntu 24.04 KVM VPS.
  • Medya dosyalarınız için kütüphane boyutunuza uygun bir blok depolama birimi (aşağıdaki boyutlandırma bölümüne bakınız). VPS ile birlikte gelen küçük kök dizin diski, film arşiviniz için uygun değildir.
  • Genel HTTPS erişimi istiyorsanız bir alan adı veya her şeyi özel tutmak isterseniz aynı VPS üzerinde bir WireGuard VPN.
  • Yasal olarak yayınlama hakkına sahip olduğunuz medya dosyaları; kendi kopyalarınız, kendi kayıtlarınız veya mülkiyeti size ait dosyalar.

Blok depolama birimini önce bağlayın

Birimi sağlayıcınızın panelinden ekleyin, ardından bulun ve mount edin. Cihaz adını lsblk komutuyla öğrenin; bu isim /dev/sdb veya /dev/vdb gibi bir şey olacaktır, asla root diski olmamalıdır.

lsblk
sudo mkfs.ext4 /dev/sdb          # ONLY on a new, empty volume: this ERASES it
sudo mkdir -p /mnt/media
sudo blkid /dev/sdb              # copy the UUID shown for this device

Diski /dev/sdb ile değil, UUID ile mount edin; çünkü cihaz harfleri yeniden başlatmalarda değişebilir ve yanlış diski formatlamanıza veya mount etmenize neden olabilir. /etc/fstab dosyasına bir satır ekleyin:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /mnt/media  ext4  defaults,nofail  0  2
sudo mount -a
df -h /mnt/media

nofail ayarı önemlidir: bu ayar olmadan, blok birimi herhangi bir zamanda ayrılırsa sunucu açılmayı reddeder ve acil durum kabuğuna (emergency shell) düşer. Buradaki en büyük hata, içinde veri bulunan bir birimde mkfs.ext4 komutunu çalıştırmaktır; bu işlem verileri siler. Yalnızca yeni birimleri formatlayın; eğer diskte zaten kütüphaneniz varsa, doğrudan fstab satırına geçin.

Medya dosyalarını Jellyfin'in beklediği şekilde düzenleyin

Jellyfin, meta verileri klasör ve dosya adlarına göre eşleştirir. Düzenleme hatalı yapılırsa filmler başlığı olmayan dosyalar olarak görünür ve kapak resimleri yüklenmez ya da bölümler yanlış dizilerle eşleşir. Dört kural, işin büyük kısmını halleder: her film, eşleşen bir dosya adına sahip kendi klasöründe bulunmalıdır ve bu klasör Name (Year) şeklinde adlandırılmalıdır (Jellyfin yılı isteğe bağlı tutar ancak yıl bilgisi eşleştirmeyi çok daha güvenilir kılar); sezon klasörleri S01 değil, Season 01 şeklinde adlandırılmalıdır; bölüm dosyaları S01E01 formatını kullanmalıdır ve özel bölümler Season 00 içine yerleştirilmelidir.

/mnt/media
├── Movies
│   ├── Blade Runner (1982)
│   │   └── Blade Runner (1982).mkv
│   └── Arrival (2016)
│       └── Arrival (2016).mkv
└── Shows
    └── Severance (2022)
        ├── Season 01
        │   ├── Severance - S01E01.mkv
        │   └── Severance - S01E02.mkv
        └── Season 00
            └── Severance - The Lexington Letter.mkv

Filmlerdeki (Year) kısmı bir süsleme değildir; yeniden çevrimleri ayırt ederek eşleştiricinin doğru başlığı bulmasını sağlar. Movies ve Shows klasörlerini ayrı üst düzey klasörler olarak tutun; çünkü her biri belirli bir içerik türüne sahip bir Jellyfin kütüphanesi haline gelir ve bunları karıştırmak meta veri sağlayıcısının kafasını karıştırır. Jellyfin, üçüncü bir klasör olarak fotoğrafları da memnuniyetle indeksleyecektir ancak bu, amaca yönelik bir fotoğraf sunucusuna kıyasla zayıf bir deneyim sunar. Bu nedenle, albümleriniz sizin için önemliyse onları PhotoPrism veya Immich çalıştıran ayrı bir sunucuya taşıyın ve bu sunucuyu film ve TV içeriklerine ayırın.

İzinler: kütüphanelerin boş görünmesinin bir numaralı nedeni

İnsanların bir akşamını boşa harcamasına neden olan yanlış kanı şudur: Resmi jellyfin/jellyfin imajı, PUID/PGID ortam değişkenlerini dikkate almaz; bunlar LinuxServer.io imajına (lscr.io/linuxserver/jellyfin) aittir. Resmi imajda kullanıcıyı compose dosyasındaki user: anahtarı ile kontrol edersiniz; eğer bu anahtarı belirtmezseniz container root yetkileriyle çalışır. Hangi yöntemi kullanırsanız kullanın kural aynıdır: container'ın çalıştığı uid/gid, tüm medya dizinlerini okuyabilmeli ve bu dizinler içinde gezinebilmelidir.

Standart bir Ubuntu sistemindeki ilk root olmayan kullanıcı olan 1000 uid/gid değerini kullanacağız. Kendi değerinizi doğrulayın ve sahiplik ayarlarını yapın:

id                                  # confirm your user is uid=1000 gid=1000
sudo chown -R 1000:1000 /mnt/media
sudo find /mnt/media -type d -exec chmod 755 {} \;
sudo find /mnt/media -type f -exec chmod 644 {} \;
mkdir -p ~/jellyfin/config ~/jellyfin/cache
sudo chown -R 1000:1000 ~/jellyfin

Dizinlerin sadece okuma değil, çalıştırma (execute) bitine (755 içindeki x) ihtiyacı vardır; bu bit olmadan container, klasör ismini listelese bile klasörün içine giremez. Tüm kütüphaneyi boş gösteren tuzak, üst dizindir: Eğer container'ın uid değeri mount noktasının kendisinde gezinemiyorsa, /media/Movies veya /media/Shows dizinlerine asla ulaşamaz ve günlük kayıtlarında Access to the path ... is denied hatası ile tüm kütüphane anında boş görünür. Okuyamadığı her bir medya klasörü günlüğe kaydedilir ve atlanır; bu nedenle root kullanıcısı ile kopyalanan dosyalar kütüphanede sessizce kaybolur. İşte bu yüzden, tek bir klasörü düzeltmek yerine tüm dizinlerde özyinelemeli (recursive) olarak chown komutunu çalıştırıyor ve çalıştırma bitini ayarlıyoruz.

docker-compose dosyası

services:
  jellyfin:
    image: jellyfin/jellyfin:12
    container_name: jellyfin
    user: "1000:1000"
    restart: unless-stopped
    ports:
      - "127.0.0.1:8096:8096"
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media:/media:ro
    environment:
      - JELLYFIN_PublishedServerUrl=https://jellyfin.example.com

Satır satır inceleme: jellyfin/jellyfin:12, güncel 12.x sürüm hattını (2026-10-10 itibarıyla 12.2) takip eder. user: "1000:1000", Jellyfin sürecinin çalışacağı uid/gid değerlerini belirler. Bu ayar, dosyaların sahipliğini veya izinlerini değiştirmez; Docker, mount edilen dizinlerde ana makinenin uid/gid değerlerini koruduğu için yukarıdaki chown değerinin bu ayarla eşleşmesi gerekir. /config, tüm sunucuyu, hesapları, kütüphaneleri, meta verileri ve izleme durumunu barındırır; bu nedenle yazılabilir olmalı ve yedeklenmesi gereken ana dizin budur. /cache, geçici çalışma alanıdır. Medya dizini, :ro (salt okunur) olarak özellikle ayarlanmıştır: Jellyfin, görsel ve meta verileri varsayılan olarak /config altında saklar; bu sayede kütüphanenize yazma iznine ihtiyaç duymaz. Salt okunur yapı, dosyalarınızı yanlışlıkla silinmeye veya hatalı bir eklentiye karşı korur. Port, 127.0.0.1 adresine özellikle bağlanmıştır; Jellyfin web girişi düz HTTP kullandığından 8096 portunu asla doğrudan genel internete açmamalıyız. JELLYFIN_PublishedServerUrl, sunucunun yerel ağda otomatik keşif (LAN UDP yayını) için duyurduğu adrestir. İnternet üzerindeki istemciler bu yayını görmez ve doğrudan uygulamaya girdiğiniz URL'yi kullanır. Bu değeri, istemcilerin görmesi gereken adres olarak ayarlayın ve uzak cihazlarda bu URL'yi manuel olarak girmeniz gerektiğini unutmayın.

Servisi compose dizini içerisinden başlatın:

docker compose up -d
docker logs -f jellyfin

İlk çalıştırma: kurulum sihirbazı ve kütüphaneleriniz

Port localhost adresine bağlı olduğundan, güvenlik duvarında bir delik açmak yerine sihirbaza dizüstü bilgisayarınızdan bir SSH tüneli aracılığıyla erişin:

ssh -L 8096:127.0.0.1:8096 you@your-vps-ip

Şimdi http://localhost:8096 adresine gidin. Sihirbaz sizi dil seçimi ve ardından güçlü bir parolaya sahip bir yönetici kullanıcısı oluşturma adımlarına yönlendirecektir; bu hesap sunucunuzun yetkili hesabıdır, bu nedenle başka bir yerde kullandığınız geçici bir parolayı kullanmayın. İlk kütüphanenizi ekleyin: içerik türü olarak Movies seçeneğini belirleyin, yolu /media/Movies olarak gösterin (ana makine yolu değil, container içindeki yol) ve Shows için /media/Shows ile işlemi tekrarlayın. İşlemi tamamladığınızda Jellyfin tarama yapacaktır. Küçük bir kütüphane için doğru sonuç, bir veya iki dakika içinde posterlerin ve başlıkların yüklenmesidir. Kütüphaneleri daha sonra Dashboard → Libraries altından ekleyebilir veya düzenleyebilir, Scan All Libraries ile taramayı zorlayabilirsiniz. Temel işlevler çalıştığında, Halcyon'un Jellyfin tarafından zaten getirilmiş görselleri kullanarak kütüphaneyi 90'ların video dükkanı gibi gezilebilir bir arayüze dönüştürmesi sayesinde alternatif bir arayüz kullanmaya değer olacaktır.

Herhangi bir transcoding işlemine ihtiyaç duyuyorsanız, Dashboard → Playback → Transcoding kısmını açın ve transcode geçici yolunu /cache/transcodes olarak ayarlayın; böylece yoğun veri trafiği /config alanını şişirmek yerine önbellek birimine yazılır. Donanım hızlandırma ayarını None olarak bırakın, hızlandırma yapacak bir GPU bulunmamaktadır.

Uzaktan erişim: TLS reverse proxy veya VPN üzerinde tutma

Jellyfin'e dışarıdan erişmek için iki güvenli yöntem ve kaçınılması gereken bir güvensiz yöntem mevcuttur. Güvensiz yöntem, 8096 numaralı portu doğrudan internete açmaktır: giriş bilgileri açık metin olarak iletilir ve port saatler içinde kaba kuvvet (brute-force) saldırısına uğrar.

Seçenek A, TLS reverse proxy. Jellyfin'i Docker uygulamalarınız için otomatik TLS sağlayan Traefik arkasında bir alt alan adına yerleştirin veya Certbot ile alınmış Let's Encrypt sertifikası kullanan bir nginx arkasına alın. Jellyfin gerçek zamanlı güncellemeler için WebSocket kullanır, bu nedenle proxy'nin upgrade başlıklarını iletmesi gerekir. Traefik bunu otomatik yapar; nginx için ise bu başlıkların açıkça belirtilmesi ve upstream tarafında HTTP/1.1 kullanılması gerekir, aksi takdirde yükseltme işlemi gerçekleşmez:

location / {
    proxy_pass http://127.0.0.1:8096;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Yerel otomatik keşif özelliğinin doğru URL'yi duyurması ve uzak uygulamaların verdiğiniz adresi kullanması için JELLYFIN_PublishedServerUrl değerini https:// adresine ayarlayın; ayrıca giriş denemelerine karşı kaba kuvvet saldırılarını yavaşlatmak için fail2ban ekleyin. Sunucu halka açık hale geldiğinde, izleyicilerinizden önce kesintiden haberdar olmak için Uptime Kuma aracını bu URL'ye yönlendirin. Bildirimleri kendi barındırdığınız bir ntfy sunucusuna yönlendirin; böylece başarısız bir kontrol, ertesi sabah okuyacağınız bir e-posta yerine telefonunuza anlık bildirim olarak gelir. İnternete açık bir giriş noktası oluşturmak, sadece 443 numaralı portun yanıt verdiğine güvenmek yerine sunucunun geri kalanını denetlemek için de iyi bir fırsattır: sudo ss -tlnp komutu, dinlemede olan tüm portları ve arkalarındaki süreçleri listeler. Eğer sunucuda kendi kodunuzu da çalıştırıyorsanız, open-kritt depoları ve bağımlılıklarını güvenlik açıkları için tarar; bu araç dinleme portlarını değil, kaynak kodunu denetler.

Seçenek B, VPN üzerinde gizli tutma. 8096 numaralı portu internete kesinlikle açmayın; Jellyfin'e yalnızca aynı sunucuda sonlanan bir WireGuard tüneli üzerinden erişin. Bir ev kullanımı için bu en basit ve güvenli seçenektir; sertifika gerektirmez, halka açık değildir ve kaba kuvvet saldırı yüzeyi oluşturmaz. Compose dosyasındaki localhost bağlaması burada tek başına yeterli değildir, çünkü 127.0.0.1 üzerinde yayınlanan bir port VPN istemcilerinden değil, yalnızca VPS'in kendisinden erişilebilir durumdadır. Portu bunun yerine sunucunun tünel adresi üzerinde yayınlayın (örneğin kendi WireGuard sunucu IP'nizi kullanarak "10.8.0.1:8096:8096") veya localhost üzerinde tutup önüne tünel adresini dinleyen bir proxy koyun ve ardından VPN üzerinden bağlanın. Tünelin kendisi için özel bir VPS için WireGuard VPN kurulumu rehberine bakın.

Depolama boyutlandırma ve yedekleme

Bütçenizi dosya sayısına göre değil, kaliteye göre planlayın. Sıkıştırılmış 1080p filmlerin her biri 4-15 GB, 1080p remux sürümler 20-40 GB, 1080p bir dizi sezonu 15-40 GB, 4K içerikler ise film başına 40-100 GB yer kaplar. Birkaç yüz film ve bazı dizilerden oluşan bir kütüphane için 2-4 TB arası bir birim gereklidir; blok depolama birimini sonradan taşımaya çalışmaktansa en başta yüksek kapasiteli yapılandırmak daha maliyet etkin bir yöntemdir.

/config tüm sunucu durumunu içerir, bu nedenle yedeklemeniz gereken tek şey budur. Anlık görüntü (snapshot) alın veya servisi durdurup tar ile arşivleyin ve kopyayı sunucu dışında saklayın:

docker compose down
sudo tar czf jellyfin-config-$(date +%F).tgz -C ~/jellyfin config
docker compose up -d

/cache ve transcode klasörü geçicidir, silinebilirler. /mnt/media üzerindeki medya dosyalarını ayrı olarak yedekleyebilir veya boyutları nedeniyle yeniden erişilebilir olduklarını varsayarak yedeklemeyebilirsiniz; çoğu kullanıcı ikinci yöntemi tercih eder. Yükseltmeler docker compose pull && docker compose up -d ile yapılır; yukarıdaki :12 etiketi 12.x serisi içinde kalır, bu nedenle bir sonraki ana sürüme geçmek bilinçli bir etiket değişikliği gerektirir. Jellyfin sürüm notlarını geçiş yapmadan önce inceleyin, çünkü ana sürümlerde kütüphane şeması geçişleri gerçekleşir. Jellyfin, 12.0 (Eylül 2026) sürümüyle sürüm numaralarındaki "10." ön ekini kaldırmıştır: 12.0, 10.12 olması beklenen sürümdür, 11.x sürümü yoktur ve 10.11.x eski şemadaki son seridir. Eğer eski bir compose dosyanız hala jellyfin/jellyfin:10 etiketini içeriyorsa, 10.11 sürümünde sabitlenmiştir (bu etiket en son 2026-06-06 tarihinde 10.11.11 sürümüne güncellenmiştir) ve asla 12.x sürümünü çekmeyecektir. Dosyayı :12 sürümüne taşımak basit bir etiket değişikliğinden fazlasıdır: 12.0 sürümü veritabanı şemasını değiştirir ve ilk açılışta verileri yeniden yazar. Bu nedenle sunucuyu durdurun ve yukarıda belirtilen yedeği mutlaka alın; çünkü geri dönüşün tek yolu bu yedektir. 12.0 sürümü, 10.10.7 veya herhangi bir 10.11.x sürümünden doğrudan yükseltilebilir ve sonrasında tam bir kütüphane taraması gerektirir; bu işlem normalden belirgin şekilde daha uzun sürer. Sabitlenmiş bir etiket ve yedeklenmiş bir durum dizini, her zaman çalışan bir container için tüm reçetedir; bu aynı zamanda self-hosted bir ajanın bellek ve zamanlamalarını yeniden başlatmalar arasında koruma yönteminin temelidir.

Hata modları ve karşılaşacağınız dizgeler

Tarama sonrasında kütüphane boş görünüyor. Dashboard → Logs (veya ~/jellyfin/config/log/log_*.log) kısmındaki günlük kaydı şunu gösterir:

System.UnauthorizedAccessException: Access to the path '/media/Movies' is denied.

Konteynerin uid değeri ilgili yolu okuyamıyor. Neden: medya dosyalarının root veya user: değerinizden farklı bir uid tarafından sahiplenilmesi, bir dizinin execute bitinin eksik olması veya üst dizin mount noktasının ilgili uid tarafından erişilebilir olmaması. Çözüm: chown -R 1000:1000 /mnt/media, dizinler için 755, dosyalar için 644 komutlarını uygulayın ve ardından yeniden taratın.

Oynatma sırasında CPU kullanımı tavan yapıyor ve takılmalar yaşanıyor. docker stats jellyfin, CPU kullanımının çekirdek sayınızın katları şeklinde %100'e yaklaştığını ve Dashboard → Playback kısmında oturumun Transcode olarak, hızın ise 1.0x değerinin altında listelendiğini gösterir. İstemci doğrudan oynatma (direct-play) yapmıyor; bu nedenle VPS, CPU üzerinden gerçek zamanlıdan daha yavaş bir transcode işlemi gerçekleştiriyor ve yetişemiyor. Neden: desteklenmeyen bir codec veya konteyner, altyazı gömme (burn-in) işlemi veya HDR ton eşleme. Çözüm: doğrudan oynatmayı destekleyen bir istemciye geçin, kaynak dosyaları H.264/AAC formatında tutun, çoğu Jellyfin istemcisinin kendi başına işleyemediği ve gömme işlemini zorunlu kılan görüntü tabanlı altyazılar (PGS/VOBSUB) yerine metin tabanlı altyazılar (SRT) kullanın ve 4K HDR içerikleri CPU tabanlı sunucularda oynatmaktan kaçının.

"No compatible streams are available." Tam mesaj genellikle şöyledir: "This client isn't compatible with the media and the server isn't sending a compatible media format." İstemci kaynağı reddetti ve yedek transcode işlemi de başlatılamadı. Neden: hatalı bir ffmpeg komutu, okunamayan bir dosya veya kullanıcının profilinde video dönüştürmenin engellenmiş olması. Çözüm: Dashboard → Logs içerisindeki ffmpeg satırını okuyun, dosyanın genel olarak oynatılabilir olduğunu doğrulayın, transcode işlemine ihtiyaç duyuyorsanız kullanıcının oynatma izinlerini kontrol edin ve tarayıcı kaynaklı codec uyumsuzluklarını elemek için ikinci bir istemci ile deneyin.

Filmlerin posteri yok veya yanlış poster görünüyor. Meta veriler eşleşmedi. Neden: bir klasör veya dosya adının, meta veri sağlayıcınızda listelenen başlıkla eşleşmemesi, yeniden çevrim veya yaygın başlıklı yapımlarda sürümleri ayırt edecek yıl bilgisinin bulunmaması, sezon klasörünün Season 01 yerine S01 olarak adlandırılması veya bölümlerin S01E01 formatında olmaması. Çözüm: yukarıdaki yapıya göre yeniden adlandırın, ardından Refresh metadata → Replace all işlemini yapın veya doğru TMDB/TVDB kaydını sabitlemek için tek bir öğe üzerinde Identify özelliğini kullanın.

FAQ

Bir VPS, GPU olmadan video kod dönüştürme (transcoding) yapabilir mi?

Evet, ancak yalnızca CPU üzerinden yapılabilir ve bu işlem yüksek kaynak tüketir. Tek bir 1080p yazılımsal kod dönüştürme işlemi birden fazla vCPU'yu tamamen meşgul edebilir; 4K veya HEVC içerikler ise genellikle gerçek zamanlı performansa yetişemez ve oynatma sırasında takılmalara neden olur. En verimli yöntem kod dönüştürmeden kaçınmaktır: kütüphanenizi H.264/AAC formatında tutun ve doğrudan oynatma (direct-play) yapan istemci uygulamaları kullanın; böylece VPS yalnızca veri akışı sağlar. Yalnızca anlık kod dönüştürmeye gerçekten ihtiyacınız varsa GPU destekli bir sunucu kiralayın.

Jellyfin kütüphanem tarama sonrasında neden boş görünüyor?

Neredeyse her zaman izinlerle ilgili bir sorundur. Resmi jellyfin/jellyfin imajı, belirlediğiniz user: (veya root) kullanıcısı ile çalışır; eğer dosyalar bu kullanıcı tarafından okunabilir değilse, tarama günlüklerinde Access to the path ... is denied hatası oluşur ve dosyalar atlanır. Sahiplik ayarlarını chown -R 1000:1000 /mnt/media ile düzeltin, dizinlere çalıştırma (execute) izni verin (755) ve yeniden taratın. Üst dizinleri de kontrol edin; çünkü konteynerin kullanıcı kimliği /mnt/media dizinine erişemiyorsa kütüphane klasörlerine ulaşamaz ve sonuç boş döner. İkinci en yaygın neden ise klasör yapısının Jellyfin'in beklediği formatla eşleşmemesidir.

Jellyfin'e uzaktan ve güvenli bir şekilde nasıl erişirim?

İki iyi seçenek mevcuttur. Giriş ve akışın şifrelenmesi için bir alt alan adı (subdomain) üzerinde TLS reverse proxy arkasına alın ve fail2ban ekleyin; şifrenizi düz metin olarak gönderen 8096 numaralı portu asla doğrudan dış dünyaya açmayın. Diğer seçenek ise sunucuyu tamamen özel tutmak ve yalnızca VPN üzerinden erişmektir; bu, ev kullanımı için en basit ve güvenli yöntemdir. Uygulamalara genel IP adresini doğrudan verin; otomatik keşif (autodiscovery) yerel ağ yayınıdır ve internet üzerinden gelen istemcilere ulaşmaz.

Jellyfin VPS'i ne kadar disk ve bant genişliğine ihtiyaç duyar?

Disk ihtiyacı kaliteye bağlıdır: sıkıştırılmış 1080p film başına 4-15 GB, remux dosyalar için 20-40 GB ve 4K için 40-100 GB ayırın; bu nedenle çoğu kütüphane için 2-4 TB arası bir blok depolama alanı önerilir. Bant genişliği, doğrudan oynatma bit hızına göre belirlenir; 1080p akış başına 8-12 Mbps, 4K için ise çok daha fazlası gerekir. Bu nedenle port hızınızın eşzamanlı izleyici sayısını desteklediğinden emin olun ve aylık veri transfer limitlerini takip edin. Kod dönüştürme planlıyorsanız CPU kapasitesini yüksek tutun; doğrudan oynatma yapacaksanız çekirdek sayısından ziyade bant genişliğine öncelik verin.

Bir VPS üzerinde Jellyfin çalıştırmak yasal mı?

Jellyfin'in kendisi ücretsiz, açık kaynaklı bir yazılımdır ve çalıştırılması tamamen yasaldır. Önemli olan içeriktir: yalnızca sahip olduğunuz veya bulundurma lisansına sahip olduğunuz medyaları, kendi disk kopyalarınızı, kayıtlarınızı veya hak sahibi olduğunuz dosyaları yayınlayın. Jellyfin herhangi bir medya ile gelmez ve herhangi bir içerik edinme yöntemi sunmaz; halihazırda sahip olduğunuz bir kütüphane için bir oynatıcıdır.