Immich Kurulumu: 6 GB RAM ve Güvenli Güncelleme Rehberi
Immich kurulumunda 6 GB RAM gereksinimi, 2283 portu HTTPS yapılandırması, exit 137 bellek hatası ve pgvecto.rs uyumsuzluğu gibi kritik sorunların çözüm yollarını inceleyin.
Ne inşa ediyorsunuz
Immich, Google Photos'un gerçek bir alternatifi olan, kendi kendine barındırılan (self-hosted) bir fotoğraf ve video yedekleme servisidir. Kamera rulosunu arka planda yükleyen, zaman çizelgesi, albümler, yüz tanıma ve herhangi bir etiketleme yapmanıza gerek kalmadan "plaj" veya belirli bir kişiyi bulan makine öğrenimi destekli arama özelliklerine sahip bir telefon uygulaması mevcuttur. Servisi kendi sahip olduğunuz bir VPS üzerinde çalıştırırsınız; orijinal dosyalar diskinizde kalır ve hiç kimse size bir şeyler satmak için bu dosyaları taramaz. Eğer hala diğer belirgin seçenekle kıyaslama yapıyorsanız, PhotoPrism ve Immich karşılaştırmamız her iki servisin RAM gereksinimlerini, telefon uygulamalarını ve yedekleme komutlarını yan yana incelemektedir.
Kurulum, projenin kendi Docker Compose dosyası üzerinden dört container ile gerçekleştirilir. Bu kısım on dakika sürer. Kılavuzun geri kalanı ise zorlukların yaşandığı bölümdür: makine öğrenimi container'ı küçük bir sunucuda yüksek bellek tüketir, orijinal dosyalar disk alanını hızla tüketir, mobil uygulama şifrelenmemiş HTTP sunucularını reddeder ve Immich, dikkatsiz bir docker compose pull komutunun veritabanınızın başlatılamaz hale gelmesine neden olabileceği kadar sık köklü değişiklikler (breaking changes) yayınlar. Bu dört hususu ciddiye alırsanız Immich son derece kararlı çalışır. Bunları göz ardı ederseniz bir hafta sonunuzu kaybedebilirsiniz.
Ön koşullar ve dikkat edilmesi gerekenler
- RAM: Resmi belgeler minimum 6 GB ve önerilen 8 GB değerini belirtse de, 4 GB ve swap alanı mutlak alt sınır olarak kabul edilmelidir.
immich-serverve Postgres container'ları mütevazı kaynak tüketir.immich-machine-learningcontainer'ı ise en çok kaynak tüketen bileşendir; arama dizinlerini oluşturmak için CLIP ve yüz tanıma modellerini RAM'e yükler. 2 GB RAM'e sahip bir sunucuda çekirdek (kernel) bu süreci sonlandıracaktır. 4 GB RAM'iniz olsa dahi swap alanı ekleyin. - Disk: Tüm kütüphanenizi ve üzerine ek bir payı kapsayacak şekilde boyutlandırın. Orijinal dosyalarınızın tamamı kopyalanır; ayrıca Immich küçük resimler ve önizleme görselleri oluşturur (toplam boyutun yaklaşık %10-20'si kadar). 200 GB'lık bir fotoğraf koleksiyonu için 300 GB'lık bir disk alanı gereklidir. Postgres, bu boyuta kıyasla oldukça küçüktür.
- CPU: Modern herhangi bir KVM VPS yeterlidir, ancak CPU üzerinde makine öğrenimi (ML) işlemleri yavaştır. Büyük bir içe aktarma işleminde akıllı arama dizinleme süreci arka planda saatlerce sürebilir. Bu normaldir; GPU kullanımı zorunlu değildir.
- VPS'e yönlendirilmiş bir alan adı. Mobil uygulama, HTTPS uç noktasını kesinlikle tercih eder ve ön tarafta bir reverse proxy kullanmanız gerekir. Bu kurulum, Docker, TLS ve yedekleme ile self-hosted Nextcloud kurulumu ile aynı yapıdadır; Immich, bu dosya sunucusunun fotoğraf tarafındaki karşılığıdır.
- Docker ve Compose eklentisi: Docker Engine ve Docker'ın kendi apt deposundan sağlanan Compose v2 eklentisi, Docker Compose temel rehberimizde anlatıldığı şekilde kurulmalıdır.
Adım 1: Her şeyden önce swap alanı ekleyin
Küçük bir VPS üzerinde Immich'in en sık karşılaşılan başarısızlık nedeni, ML container'ının OOM-killed (bellek yetersizliği nedeniyle sonlandırılma) durumuna düşmesidir. Çekirdeğe nefes alacak bir alan sağlayın.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -hfree -h komutu artık 4.0Gi boyutunda bir Swap: satırı göstermelidir. Bu işlem ML performansını artırmaz, ancak 4 GB belleğe sahip bir makinede indeksleme sırasında container'ın çökmesini engeller.
Adım 2: Resmi compose ve env dosyalarını alın, kopyalamak yerine orijinalini kullanın
Immich, servis sürümlerini ve kritik olarak veritabanı imajını, dağıttığı dosyaların içinde sabitler. Bir blogdan (bu blog dahil) kopyaladığınız bir compose dosyasını tek doğru kaynak olarak kabul etmeyin. Yayınlanan varlıkları indirin:
sudo mkdir -p /opt/immich && cd /opt/immich
sudo wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
sudo wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envBunlar etiketlenmiş sürümlerden geldiği için imaj referansları eşleşir. Compose dosyası dört servis tanımlar; herhangi bir değişiklik yapmadan önce her birinin ne olduğunu bilmek faydalıdır:
immich-server(ghcr.io/immich-app/immich-server, containerimmich_server): API ve web arayüzü;2283numaralı portu dinler. Yüklemelerinizi/datadizinine bağlar.immich-machine-learning(ghcr.io/immich-app/immich-machine-learning, containerimmich_machine_learning): CLIP arama ve yüz tanıma servisi. İndirilen modelleri birmodel-cachevolume alanında önbelleğe alır. Bellek tüketimi en yüksek olan servistir.database(containerimmich_postgres): Benzerlik aramasına güç veren VectorChord vektör eklentisine sahip Postgres. İmaj etiketi, compose dosyası içerisinde doğrudan digest ile sabitlenmiştir; örneğinghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:.... Eski kurulumlarpgvecto.rskullanıyordu; bunun desteği Immich v3.0 ile kaldırıldı, bu nedenle bugün kurduğunuz her şey VectorChord kullanır. Bu etiketi asla manuel olarak düzenlemeyin.redis(containerimmich_redis): İş kuyrukları için bir Valkey/Redis örneği.
Adım 3: Fotoğraflarınızın ve veritabanınızın bulunduğu .env yapılandırması
.env dosyasını açın ve dört ayarı yapılandırın. İşaretli satırın altındaki her şey olduğu gibi kalmalıdır.
# Where original uploads are stored on the host
UPLOAD_LOCATION=/opt/immich/library
# Where the Postgres data lives. NEVER put this on an NFS/network share.
DB_DATA_LOCATION=/opt/immich/postgres
# "v3" is a floating tag that tracks the latest v3.x. Pin a full tag like
# v3.0.2 instead — then you upgrade on purpose, not by surprise.
IMMICH_VERSION=v3.0.2
# Change this to a long random string. Letters and digits only.
DB_PASSWORD=REPLACE_WITH_A_LONG_RANDOM_STRING
# Set your timezone so timestamps and "on this day" line up
TZ=Europe/London
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immichSize sorun yaşatmayacak iki kural. UPLOAD_LOCATION, büyük disk alanınızı işaret etmelidir; eğer daha sonra bir veri birimi (data volume) bağlarsanız, bunu en baştan ilgili mount yoluna ayarlayın. Çünkü sonradan taşımak, küçük resimlerin (thumbnails) taşınmasını ve varlık yollarının güncellenmesini gerektirir. Ayrıca DB_DATA_LOCATION yerel disk üzerinde olmalıdır: NFS veya SMB paylaşımı üzerindeki Postgres bozulur; belgeler bunu açıkça belirtmektedir. DB_PASSWORD içerisinde yalnızca harf ve rakam kullanırsanız, bağlantı dizgisi (connection string) kaçış karakterlerinden kaynaklanan bir hata sınıfını önlemiş olursunuz.
Adım 4: İlk çalıştırma ve yönetici kullanıcısının oluşturulması
cd /opt/immich
sudo docker compose up -d
sudo docker compose psDoğru bir sonuç, tamamı running durumunda olan ve nihayetinde healthy durumuna geçen dört adet container'dır:
NAME STATUS
immich_machine_learning Up (healthy)
immich_postgres Up (healthy)
immich_redis Up (healthy)
immich_server Up (healthy)İlk up işlemi birkaç gigabaytlık imajı çeker, bu nedenle tamamlanması için zaman tanıyın. İlerlemeyi sudo docker compose logs -f immich-server ile izleyin; sunucu hazır olduğunda 2283 portunu dinlediğine dair bir kayıt düşecektir. Şimdi tarayıcınızda http://YOUR_SERVER_IP:2283 adresini açın. İlk ziyarette bir Başlarken sihirbazı görüntülenecektir; oluşturacağınız ilk hesap yönetici hesabıdır. Güçlü bir parola belirleyin; bu hesap sunucu ayarlarının, kullanıcı yönetiminin ve daha sonra ihtiyaç duyacağınız ML yapılandırmasının sahibidir.
Adım 5: Mobil uygulama ve arka plan yedekleme
App Store veya Play Store üzerinden "Immich" uygulamasını yükleyin. Giriş ekranında sizden bir Server Endpoint URL istenecektir. Şema dahil tam URL'yi girin; örneğin https://photos.example.com (uygulama /api kısmını kendisi ekler). Az önce oluşturduğunuz hesapla giriş yapın, ardından uygulamanın Backup ekranını açın, yedeklenecek albümleri seçin (genellikle Camera ve Screenshots) ve Background backup seçeneğini etkinleştirin. iOS arka plan yedekleme işlemi işletim sistemi tarafından kısıtlanır; ön plan yüklemeleri her zaman çalışır, arka plan yüklemeleri ise işletim sistemi izin verdiğinde gerçekleşir.
Kullanıcıların en çok zorlandığı nokta burasıdır, bu yüzden uygulama ile uğraşmadan önce Adım 6'yı okuyun.
Adım 6: Bir reverse proxy üzerinden HTTPS ve tam URL kuralı
Mobil uygulama HTTPS kullanmayı gerektiriyor. 2283 portunun önüne bir reverse proxy yerleştirip TLS sonlandırma işlemini burada gerçekleştirin. Birden fazla container çalıştırıyorsanız birden fazla Docker uygulaması için otomatik TLS sağlayan Traefik en düzenli seçenektir; tek bir label bloğu photos.example.com adresini immich-server container'ına yönlendirir ve sertifikayı sizin için alır. nginx kullanmayı tercih ediyorsanız Certbot ve nginx ile Let's Encrypt kılavuzu sertifika almanızı ve bir proxy_pass http://127.0.0.1:2283; bloğu oluşturmanızı sağlar. Bu proxy kurulduktan sonra yeni bir servis eklemek çoğunlukla yeni bir alt alan adı tanımlamaktan ibarettir. Bu sayede Jellyfin için 90'lar video mağazası görünümüne sahip Halcyon gibi bir medya ön yüzü aynı sunucuda Immich'in yanında çalışabilir. Aynı durum, Codex ve Claude Code'u tek bir API arkasına alan self-hosted HarnessRouter için de geçerlidir. Bu uygulama özellikle loopback adresine bağlanır ve yalnızca önündeki proxy TLS sonlandırdığında erişilebilir hale gelir. Bu nedenle alt alan adını yönlendirmeden önce varsayılan giriş bilgilerini değiştirin. Ancak her container herkese açık bir hostname gerektirmez. self-hosted open-kritt güvenlik tarayıcısı gibi yalnızca yöneticilerin kullandığı bir araç proxy arkasına hiç alınmamalıdır. UI yalnızca gerektiğinde SSH tüneli üzerinden açılmalıdır. Bazı uygulamalar HTTP kullanmadığı için proxy'yi atlar. self-hosted RustDesk relay sunucusu bunun en açık örneğidir. Bu sunucu birkaç ham TCP ve UDP portunu dinler ve alt alan adı yerine firewall kuralları gerektirir. Immich için bir proxy ayarı önemlidir: upload boyutu limitini artırın, çünkü telefon videoları büyüktür. nginx'te bu ayar server bloğu içinde client_max_body_size 50000M; biçiminde tanımlanır. Varsayılan 1 MB değeri video yüklemelerini 413 Request Entity Too Large ile reddeder.
Uygulamanın uyguladığı kural şudur: uç nokta erişilebilir olmalı ve pratikte HTTPS kullanmalıdır. http:// uç noktaları veya port numarası belirtilmemiş doğrudan IP adresleri, "uygulama sunucuya ulaşamıyor" hatasının temel kaynağıdır; bu durum aşağıda tanımlanan hata başlıkları altında ele alınmıştır.
Adım 7: Harici kütüphaneler ve yüklemeler, mevcut bir fotoğraf ağacını içe aktarma
Fotoğrafların Immich'e aktarılmasının iki yolu vardır ve bunlar aynı şey değildir.
- Yüklemeler, Immich'in sahipliğinde olan varlıklardır. Uygulama veya web yükleyicisi, dosyayı
UPLOAD_LOCATIONdizinine kopyalar. Immich bu dosyaları yeniden adlandırabilir, taşıyabilir ve silebilir. - Harici kütüphaneler, sunucunuzda halihazırda bulunan bir klasörde, eski bir
Picturesağacında veya bir NAS dışa aktarımında yer alan dosyaların salt okunur şekilde içe aktarılmasıdır. Immich bunları yerinde indeksler ve zaman çizelgesinde gösterir, ancak orijinallerini asla değiştirmez veya silmez.
Mevcut bir ağacı içe aktarmak için, onu sunucu container'ına salt okunur olarak bağlayın (mount). immich-server: altındaki docker-compose.yml dosyasını düzenleyin ve bir volume ekleyin:
immich-server:
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- /srv/photos:/mnt/media/photos:ro:ro ifadesi, Immich'in orijinallere asla dokunamayacağını garanti eder. Container'ı sudo docker compose up -d ile yeniden oluşturun, ardından web arayüzünde avatarınıza gidin → Administration → External Libraries → Create Library yolunu izleyin, sahip kullanıcıyı seçin, Folders altındaki Add butonuna tıklayın ve ana makine yolu olan /srv/photos yerine container yolu olan /mnt/media/photos değerini girin. Scan butonuna tıklayın. Ana makine yolunu container yolu yerine kullanmak, harici kütüphanelerle ilgili yapılan bir numaralı hatadır; tarama hiçbir şey bulamaz ve sıfır varlık rapor eder.
Adım 8: Immich'in gerektirdiği yükseltme disiplini
Bu bölüm, sorunsuz çalışan bir Immich ile bozulmuş bir Immich arasındaki farkı belirler. Immich hızlı sürümler yayınlar; geriye dönük düzeltme (backport) yapmaz veya sürüm düşürmeyi desteklemez. v3 etiketini körü körüne takip etmek, er ya da geç veritabanınızın bozulmasına yol açacaktır. Sürümü sabitleyip ardından notları okuma alışkanlığı, sunucunuzdaki her uzun ömürlü container için uygulanmalıdır; kendi kendine barındırılan bir KiroCrew aracının, bir sonraki yeniden başlatmada kendiliğinden değişmesine izin vermek yerine bilinen iyi bir etikete sabitlenmesinin nedeni budur. Disiplin şöyledir:
- Bir sürümü sabitleyin.
IMMICH_VERSIONdeğerini, her zaman en yeni v3.x sürümünü çeken değişkenv3yerine,v3.0.2gibi somut bir etikete ayarlayın. - Yükseltme yapmadan önce her seferinde sürüm notlarını okuyun. Özellikle veritabanı veya vektör uzantısı değişiklikleri gibi köklü değişiklikler burada belirtilir. v3.0 sürümü buna bariz bir örnektir: pgvecto.rs tamamen kaldırılmıştır, bu nedenle eski uzantıyı kullanan herkesin yükseltme yapmadan önce (v1.133 ile gelen) VectorChord geçişini tamamlaması gerekmiştir.
- Önce veritabanını yedekleyin (Adım 9). Her zaman yedek alın, ancak notlarda veritabanından bahsediliyorsa bunu iki kat daha fazla önemseyin.
- Yeni compose dosyasını da alın.
IMMICH_VERSIONyalnızca sunucu ve ML imajlarını sabitler. Postgres imajı,docker-compose.ymliçindeki özet (digest) değeriyle sabitlenmiştir; bu nedenle daha yeni bir veritabanı uzantısı gerektiren bir sürüm, yeni bir compose dosyası ile gelir. Her iki sürüm varlığını da yeniden indirin,.envdeğerlerinizi tekrar uygulayın ve ardından yükseltme yapın. - Mobil istemcilerinizi de aynı zaman diliminde güncelleyin. Sunucu yalnızca kendi ana sürümüyle iletişim kurar ve uygulama, mevcut ve bir önceki ana sürümü destekler. Sunucu uygulamadan daha ileri bir sürüme geçtiğinde, siz güncelleyene kadar telefonda
Your app major version is not compatible with the server!hatası görünür; bu nedenle uygulamayı önce güncellemek en güvenli yoldur.
Yeni dosyaları yerleştirdikten sonra çalıştırılacak komutlar şunlardır:
cd /opt/immich
sudo docker compose pull
sudo docker compose up -d
sudo docker image pruneAdım 9: Yedeklemeler, veritabanı dökümü ARTI orijinaller ve test süreci
Immich yedeklemesi iki parçadan oluşur; biri olmadan diğeri işe yaramaz. Veritabanı albüm yapısını, yüzleri, arama dizinlerini ve varlık ile dosya arasındaki eşleşmeyi tutar. Orijinaller dizini ise fotoğrafların kendisini barındırır. Birini yedekleyip diğerini yedeklemezseniz, ya organizasyonu olmayan fotoğraflarınız ya da eksik dosyalara işaret eden boş bir kabuğunuz olur. Bu iki parçalı yapı sadece Immich'e özgü değildir: self-hosted bir Chatwoot destek masası da aynı şekilde bir Postgres dökümü ve uploads dizini eşleşmesine ihtiyaç duyar; aksi takdirde geri yüklenen gelen kutusundaki tüm ekler kaybolur. Postgres veri dizinini bir dosya ağacı olarak kopyalamak, döküm adımını atlamak için bir kısayol gibi görünse de kullanılabilir bir yedekleme değildir; bu, tam Immich yedekleme ve geri yükleme kılavuzunun boş bir zaman çizelgesiyle sonuçlanan geri yükleme hatalarının yanında ele aldığı bir tuzaktır.
Veritabanını, Postgres container'ı içerisinden pg_dump ile dökün; tüm kümeyi değil, özellikle immich veritabanını hedefleyin:
sudo docker exec -t immich_postgres pg_dump --clean --if-exists \
--dbname=immich --username=postgres | gzip > /opt/immich/immich-db-$(date +%F).sql.gzArdından UPLOAD_LOCATION'i, tüm /opt/immich/library ağacını ve özellikle library/, upload/ ve profile/ alt klasörlerini restic, rsync veya borg kullanarak başka bir makineye ya da nesne depolama alanına yedekleyin. Bu işi zamanlayan her ne ise (bir cron girdisi veya systemd timer), başarısız olduğunda uyarı gönderebileceği bir yere ihtiyaç duyar. Kendi ntfy push sunucunuza yönlendirilmiş bir systemd OnFailure= birimi, döküm işlemi bozulduğunda bunu geri yükleme sırasında fark etmenizi beklemek yerine, o gece telefonunuza bir mesaj gönderir. Önce veritabanını, sonra dosyaları yedekleyin; böylece döküm, dosya yedeklemesinin henüz kopyalamadığı bir fotoğrafa referans vermez. Harici kütüphaneleri kendi gerçek kaynaklarında ayrı olarak yedekleyin; Immich bunların sahibi değildir.
Şimdi herkesin atladığı kısım: geri yüklemeyi test edin. Geri yükleme, sunucusu hiç başlatılmamış temiz bir yığın üzerinde ve vektör uzantısı döküm ile uyumlu bir Postgres imajı üzerinde çalışmalıdır; veritabanı imaj etiketini asla doğaçlama yapmamanızın nedeni tam olarak budur. Aynı compose ve .env dosyasına sahip boş bir makinede, eski durumları temizleyin, sadece veritabanını ayağa kaldırın ve ardından dökümü yükleyin:
cd /opt/immich
sudo docker compose down -v
sudo docker compose pull
sudo docker compose create
sudo docker start immich_postgres
sleep 10
gunzip --stdout immich-db-2026-07-15.sql.gz |
sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" |
sudo docker exec -i immich_postgres psql --dbname=immich --username=postgres --single-transaction --set ON_ERROR_STOP=on
sudo docker compose up -dsearch_path'un sed ile yeniden yazılması, VectorChord veritabanında isteğe bağlı değildir; bunu atlarsanız geri yükleme yarıda kesilir. Yığın, orijinalleriniz yerindeyken tekrar ayağa kalktığında web arayüzünü açın: fotoğraflarınız ve albümleriniz oradaysa yedeklemeniz çalışıyor demektir. Bunu hiç yapmadıysanız, bir yedeklemeniz yok, sadece bir umudunuz var demektir.
Hata modları ve karşılaşacağınız dizgeler
ML container'ı OOM-killed durumuna düşer. sudo docker compose logs immich-machine-learning aniden kesilir, docker compose ps üzerinde Restarting görülür ve çıkış kodu 137 olur. sudo dmesg | grep -i oom bunu doğrular: Out of memory: Killed process ... (python3). Arama ve yüz tanıma işleri bu noktada durur. Bunun nedeni, modeller için yetersiz RAM bulunmasıdır. Çözümler, önem sırasına göre şunlardır: swap alanı ekleyin (Adım 1); VPS'e daha fazla RAM verin; veya gerçekten mümkün değilse, Administration → Settings → Machine Learning Settings yolunu izleyerek Smart Search ve Facial Recognition seçeneklerini kapatıp ML özelliğini devre dışı bırakın. Bu durumda yedekler ve albümler korunur ancak içerik bazlı arama özelliği kaybedilir. immich-machine-learning servisini compose dosyasından kaldırmak da aynı sonucu verir.
Postgres bir yükseltme sonrasında başlamayı reddeder. Sunucu günlüğü The database currently has VectorChord 0.5.3 activated, but the Postgres instance only has 0.4.2 available. This most likely means the extension was downgraded. gibi bir satırla döngüye girer veya daha eski yığınlarda The pgvecto.rs extension is not available in this Postgres instance. hatası verir. Bunun nedeni, eklenti sürümü verilerinizin yükseltildiği sürümden daha eski olan bir veritabanı imajıdır; bu durum neredeyse her zaman imaj etiketinin manuel düzenlenmesinden veya daha yeni bir yedeğin daha eski bir imaja geri yüklenmesinden kaynaklanır. Çözüm, eşleşen Postgres imajını kullanmak, veritabanınızla uyumlu olan sürümün compose dosyasını almak, sürüm düşürme yapmamak ve yalnızca uyumlu bir imaja geri yükleme yapmaktır.
Mobil uygulama sunucuya erişemez. URL'yi girdikten sonra giriş ekranında bir bağlantı hatası / Server is not reachable mesajı görünür. Üç olası neden vardır: proxy yalnızca https:// sunarken siz http:// yazmışsınızdır; doğrudan backend'e bağlandınız ancak portu belirtmediniz, bu yüzden example.com:2283 yerine example.com (port 443) denendi; veya reverse proxy /api trafiğini iletmiyordur. Tam https://photos.example.com URL'sini girerek ve önce telefon tarayıcısında yüklendiğini doğrulayarak sorunu çözün. Tarayıcı çalışıyor ancak uygulama çalışmıyorsa, proxy yolu (path) kırpıyor olabilir veya sertifika kendinden imzalıdır; uygulama güvenilmeyen sertifikaları reddeder.
İçe aktarma sırasında disk dolar. Yüklemeler başarısız olmaya başlar, küçük resimler boş görünür ve günlüklerde ENOSPC: no space left on device veya Postgres tarafından could not extend file ... No space left on device hatası görülür. df -h, UPLOAD_LOCATION biriminin %100 dolu olduğunu gösterir. Büyük bir kütüphaneyi içe aktarmadan önce disk boyutunu planlamanızın nedeni budur. Kurtarma işlemi için daha büyük bir birim bağlayın, yığını durdurun, UPLOAD_LOCATION içeriğini buraya taşıyın, .env ayarını güncelleyin ve tekrar başlatın; veya sağlayıcınız izin veriyorsa mevcut diski genişletin. Postgres disk dolduğunda kilitlenebilir, bu nedenle bozulma olduğunu varsaymadan önce yer açın ve veritabanı container'ını yeniden başlatın.
FAQ
Immich ne kadar RAM ve disk alanına ihtiyaç duyar?
Immich'in resmi gereksinimleri minimum 6 GB RAM, önerilen ise 8 GB'tır. Küçük bir kütüphane için 4 GB RAM ve swap alanı pratik alt sınırdır; makine öğrenimi container'ı ani bellek artışlarına neden olduğundan her durumda swap yapılandırılmalıdır. Disk tarafında, kütüphanenizin toplam boyutuna ek olarak oluşturulan küçük resimler ve önizlemeler için yaklaşık %10-20 oranında ek alan ayırın. Depolama yerel olmalıdır; Postgres veri dizinini asla bir ağ paylaşımı üzerinde tutmayın. Başka neleri barındıracağınıza henüz karar vermediyseniz, 2026 yılında neler self-host edilir rehberi, Immich'in kapladığı alanı diğer servislerle kıyaslamalı olarak sunar.
Immich'i GPU olmadan çalıştırabilir miyim?
Evet. Makine öğrenimi container'ı CPU üzerinde sorunsuz çalışır; GPU yalnızca akıllı arama indekslemeyi ve doğru imaj varyantı kullanıldığında video kod dönüştürme işlemlerini hızlandırır. CPU üzerinde, büyük bir kütüphanenin ilk indekslenmesi arka planda saatler sürebilir ancak bu durum yedeklemeleri veya fotoğraf görüntülemeyi engellemez. Eğer donanımınız makine öğrenimi için çok yetersizse, yönetici ayarlarından Akıllı Arama ve Yüz Tanıma özelliklerini devre dışı bırakarak diğer tüm işlevleri kullanmaya devam edebilirsiniz.
Immich'i nasıl güvenli bir şekilde yükseltebilirim?
IMMICH_VERSION değerini v3.0.2 gibi somut bir etikete sabitleyin, her yükseltme öncesinde sürüm notlarını okuyun ve önce veritabanını yedekleyin. Postgres imajı IMMICH_VERSION yerine docker-compose.yml içinde sabitlendiğinden, hedef sürümünüzden hem compose dosyasını hem de example.env dosyasını yeniden indirin, değerlerinizi tekrar uygulayın ve ardından docker compose pull && docker compose up -d komutunu çalıştırın. Sürümün otomatik güncellenmesine asla izin vermeyin; Immich köklü değişiklikler (breaking changes) içeren sürümler yayınlar ve sürüm düşürmeyi desteklemez.
Tam olarak neleri yedeklemeliyim?
İki şeyi birlikte yedeklemelisiniz: immich veritabanının bir pg_dump yedeği ve tüm UPLOAD_LOCATION orijinal dosyalar dizini. Veritabanı albümleri, yüzleri ve varlık-dosya eşleştirmelerini tutar; dizin ise fotoğrafların kendisini barındırır. Geri yükleme işlemi için her ikisi ve uyumlu bir vektör uzantısına sahip bir veritabanı imajı gereklidir. Önce veritabanı dökümünü alın, ardından dosya kopyalama işlemini gerçekleştirin. Geri yükleme işlemini en az bir kez boş bir makinede test edin; test edilmemiş bir yedek, yedek sayılmaz.
Mevcut fotoğraf klasörümü nasıl içe aktarırım?
Klasörü salt okunur (read-only) olarak immich-server container'ına ek bir volume (örneğin - /srv/photos:/mnt/media/photos:ro) şeklinde bağlayın, container'ı yeniden oluşturun ve ardından Administration → External Libraries kısmından bir kütüphane oluşturarak container yolu olan /mnt/media/photos dizinini ekleyin. Immich dosyaları yerinde indeksler ve hiçbir zaman değiştirmez veya silmez. En yaygın hata, container yolu yerine host yolunu girmektir; bu durumda tarama işlemi hiçbir sonuç bulamaz.