Uzun zamandır aklımda olan bir konuydu: dijital anılarımı, yani fotoğraf ve videolarımı bulut servislerinin elinden alıp tamamen kendi kontrolüme geçirmek. Google Fotoğraflar’ın sunduğu kolaylıklar tartışılmazdı, ama zamanla veri mahremiyeti ve vendor lock-in konuları beni rahatsız etmeye başladı. Özellikle ücretsiz depolama limitlerinin değişmesi ve gelecekteki belirsizlikler, bu kararı hızlandıran etkenler oldu.
Sonunda kararımı verdim ve bu geçişi tamamladım. Bu yazıda, neden Google Fotoğraflar’dan ayrıldığımı, Immich adında açık kaynaklı bir çözümü neden seçtiğimi, kendi sunucuma kurulumunu nasıl yaptığımı, verilerimi nasıl aktardığımı ve bu süreçte karşılaştığım teknik detayları ve edindiğim dersleri paylaşacağım. Amacım, kendi dijital varlıklarını yönetmek isteyenlere pratik bir rehber sunmak.
Neden Kendi Fotoğraf Sunucum? Google’dan Ayrılma Sebeplerim
Bulut servislerinin yaygınlaşmasıyla hayatımız kolaylaştı, orası kesin. Özellikle Google Fotoğraflar, sınırsız depolama sunduğu zamanlarda pek çoğumuzun bir numaralı tercihiydi. Ancak zamanla bu durum değişti ve benim için bazı kırmızı çizgiler belirginleşmeye başladı.
İlk sebep, veri mahremiyeti ve kontrol meselesiydi. Fotoğraflarımız, özel anılarımız, kişisel verilerimiz. Bunların büyük bir şirketin sunucularında, onların belirlediği şartlarda saklanması bana her zaman tam güven vermiyordu. Reklam hedeflemesi veya veri analizi gibi konular bir yana, verilerin kontrolünün tamamen benden bağımsız olması, özellikle bir MSP olarak yıllardır sistem güvenliğiyle uğraşan biri için kabul edilemezdi. Kendi sunucumda, verilerimin nerede olduğunu, kimin erişebileceğini ve hangi şartlarda işleneceğini ben belirlerim.
İkinci büyük etken ise uzun vadeli maliyet ve vendor lock-in riskiydi. Google Fotoğraflar’ın ücretsiz sınırsız depolama modelinden vazgeçmesi, bu riski somutlaştırdı. Şirketler zamanla politikalarını değiştirebilir, fiyatlandırmalarını revize edebilir. Diyelim ki bugün cüzi bir miktar ödüyorsunuz, ama beş yıl sonra bu miktar katlanarak artabilir. Milyonlarca fotoğrafı başka bir yere taşımak ise hem zaman alıcı hem de teknik olarak yorucu bir süreç. Bu, beni tek bir sağlayıcıya bağımlı hale getiren bir durumdu ve bu bağımlılıktan kurtulmak istedim.
Üçüncü bir sebep de performans ve özellik kısıtlamalarıydı. Belirli bir boyuttaki videoların sıkıştırılması, orijinal kalitenin korunmaması gibi durumlar beni rahatsız ediyordu. Kendi sunucumda, depolama alanım yettiği sürece her şeyi orijinal kalitesinde tutabilirim. Ayrıca, yapay zeka destekli etiketleme, yüz tanıma gibi özelliklerin bulutta nasıl işlendiğine dair şeffaflık eksikliği de bir soru işaretiydi. Benzer özelliklere kendi sunucumda, açık kaynak kodlu Immich ile erişmek, bu endişelerimi giderdi.
Bu sebeplerin ışığında, kendi fotoğraf ve video arşivimi buluttan alıp kendi sunucuma taşımaya karar verdim. Bu, sadece teknik bir geçiş değil, aynı zamanda dijital bağımsızlık yolunda atılmış önemli bir adımdı.
Immich’e İlk Bakış: Neden Bu Çözümü Seçtim?
Google Fotoğraflar’dan ayrılma kararımdan sonra, piyasadaki alternatifleri araştırmaya başladım. Önemli kriterlerim vardı: açık kaynak olması, aktif geliştirme sürecine sahip olması, mobil uygulamalarının bulunması ve modern özellikleri (AI etiketleme, yüz tanıma gibi) desteklemesi. Birkaç farklı çözümü inceledikten sonra Immich, bu kriterlerin çoğunu fazlasıyla karşıladığı için öne çıktı.
İlk olarak, açık kaynak olması benim için temel bir gereklilikti. Kodu inceleyebilir, topluluğun desteğini alabilir ve gelecekteki gelişim yönünü etkileyebilirim. Bu, kapalı kaynak bir yazılıma göre çok daha fazla esneklik ve şeffaflık sunuyor. Immich’in GitHub deposu oldukça aktif, bu da projenin canlı olduğunu ve sürekli iyileştirildiğini gösteriyor.
İkinci olarak, Immich’in zengin özellik seti beni etkiledi. Mobil uygulamaları sayesinde fotoğrafları otomatik yedekleyebilir, albümler oluşturabilir ve anılarımı kolayca yönetebilirim. Google Fotoğraflar’ın sunduğu çoğu özelliği (arama, paylaşım, harita görünümü) Immich’te de bulmak mümkün. Özellikle AI destekli etiketleme ve yüz tanıma özellikleri, kendi sunucumda çalışmasına rağmen oldukça başarılı. Bu özellikler sayesinde binlerce fotoğraf arasında arama yapmak çok daha kolay hale geliyor. Örneğin, “kediler” veya “doğum günü” gibi anahtar kelimelerle hızla ilgili fotoğraflara ulaşabiliyorum.
Üçüncü olarak, teknik mimarisi ve kurulum kolaylığı da önemliydi. Immich, Docker Compose ile kolayca dağıtılabilen mikroservis tabanlı bir mimariye sahip. PostgreSQL veritabanı, Redis, Nginx (reverse proxy olarak), makine öğrenimi servisleri ve ana uygulama sunucusu gibi bileşenlerden oluşuyor. Bu modüler yapı, gerektiğinde ölçeklenebilirlik ve bakım kolaylığı sağlıyor. Ben de Docker Compose ile birçok servisimi yönettiğim için, Immich’in bu yapısı bana yabancı gelmedi.
Alternatif olarak PhotoPrism ve Nextcloud Photos gibi çözümler de vardı. PhotoPrism güçlü bir fotoğraf yönetimi aracı olsa da, mobil uygulama deneyimi ve AI özellikleri Immich kadar gelişmiş değildi. Nextcloud Photos ise Nextcloud ekosisteminin bir parçası olarak iyi çalışıyor, ancak sadece fotoğraf odaklı bir çözüm aradığım için Immich’in daha optimize olduğunu düşündüm.
Kısacası, Immich benim için hem teknik açıdan sağlam, hem özellikler açısından zengin, hem de açık kaynak felsefesine uygun bir çözüm oldu. Bu seçimimden oldukça memnunum.
Altyapıyı Hazırlamak: Docker Compose ile Kurulum
Immich’i kendi sunucuma kurmak için, mevcut altyapımdan faydalandım. Genellikle sistemlerimi VPS (Virtual Private Server) üzerinde Docker Compose ile çalıştırdığım için, Immich de bu yapıya mükemmel uyum sağladı. Kurulum süreci, doğru adımları izlediğinizde oldukça basitti.
Öncelikle, Immich için uygun bir sunucu seçmek gerekiyor. Benim tercihim, yeterli disk alanı (fotoğraf arşivime göre değişir, benim için birkaç TB gerekiyordu) ve makine öğrenimi işlemleri için yeterli CPU gücüne sahip bir VPS oldu. Örneğin, tipik bir kurulum için en az 8GB RAM ve 4 çekirdekli bir CPU öneririm. Disk tarafında, fotoğraflarınızın büyüklüğüne göre NVMe SSD veya yüksek performanslı bir SATA SSD tercih etmek, özellikle thumbnail oluşturma ve arama işlemleri sırasında performansı artıracaktır. İşletim sistemi olarak Ubuntu Server LTS kullanıyorum.
Kuruluma başlamadan önce sunucumda Docker ve Docker Compose’un kurulu olduğundan emin oldum. Eğer kurulu değilse, aşağıdaki komutlarla hızlıca kurabilirsiniz:
# Docker kurulumu
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
# Docker Compose kurulumu (genellikle en güncel versiyonu tercih ederim)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Docker ve Docker Compose hazır olduktan sonra, Immich’in kendi dokümantasyonundan sağladığı docker-compose.yml dosyasını indirdim ve kendi ihtiyaçlarıma göre küçük düzenlemeler yaptım. Bu dosya, Immich’in tüm bileşenlerini (sunucu, mikroservisler, web arayüzü, makine öğrenimi, PostgreSQL, Redis) tanımlar.
Örnek bir docker-compose.yml yapısı şu şekilde görünebilir:
version: "3.8"
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:release
command: ["start-server.sh"]
volumes:
- /path/to/your/upload_location:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001 # Internal port for Immich API
restart: always
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-microservices:release
command: ["start-microservices.sh"]
volumes:
- /path/to/your/upload_location:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
restart: always
immich-web:
container_name: immich_web
image: ghcr.io/immich-app/immich-web:release
env_file:
- .env
restart: always
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:release
env_file:
- .env
restart: always
postgres:
container_name: immich_postgres
image: postgres:15
environment:
POSTGRES_USER: immich
POSTGRES_PASSWORD: your_strong_password
POSTGRES_DB: immich
volumes:
- /path/to/your/postgres_data:/var/lib/postgresql/data
restart: always
redis:
container_name: immich_redis
image: redis:6.2-alpine
restart: always
Bu dosyadaki /path/to/your/upload_location ve /path/to/your/postgres_data kısımlarını kendi sunucumdaki kalıcı depolama alanlarının yollarıyla değiştirdim. Ayrıca, .env dosyasında Immich’in ihtiyaç duyduğu ortam değişkenlerini (örneğin veritabanı bağlantı bilgileri, API anahtarları vb.) belirledim. Güvenlik için your_strong_password kısmını mutlaka benzersiz ve güçlü bir şifreyle değiştirdim.
Tüm bu hazırlıklar bittikten sonra, docker-compose.yml dosyasının bulunduğu dizinde docker compose up -d komutunu çalıştırarak Immich’i ayağa kaldırdım. Servisler birkaç dakika içinde çalışmaya başladı. İlk çalıştırmada Immich, veritabanı şemasını oluşturur ve gerekli tüm bileşenleri başlatır. Daha sonra bir Nginx reverse proxy kurarak Immich’e dışarıdan HTTPS üzerinden erişimi sağladım, bu konuda “Nginx reverse proxy” başlıklı yazılarıma bakılabilir.
Kurulumun ardından, Immich web arayüzüne erişerek ilk kullanıcı hesabımı oluşturdum ve sistemin düzgün çalışıp çalışmadığını kontrol ettim. Bu noktadan sonra, asıl iş olan veri aktarımına geçmeye hazırdım.
Veri Aktarımı ve Senkronizasyon: Google Takeout’tan Immich’e
Immich kurulumunu tamamladıktan sonra en kritik aşama, Google Fotoğraflar’daki tüm anılarımı kendi sunucuma güvenli ve eksiksiz bir şekilde aktarmaktı. Bu süreç, beklediğimden biraz daha fazla dikkat ve manuel müdahale gerektirdi.
İlk adım, Google Takeout kullanarak verilerimi Google Fotoğraflar’dan indirmekti. Google Takeout, Google servislerindeki verilerinizi toplu olarak indirmenizi sağlayan bir araç. Buradan sadece Google Fotoğraflar’ı seçtim ve tüm arşivimi ZIP veya TGZ dosyaları halinde indirme talebinde bulundum. Arşivimin boyutu oldukça büyüktü, bu yüzden indirme işlemi günlerce sürdü ve birden fazla parçaya bölündü.
İndirilen dosyaları sunucuma aktardıktan sonra, asıl zorluk başladı. Google Takeout, fotoğrafların yanı sıra her fotoğraf için ayrı bir JSON dosyası (.json uzantılı) da indiriyor. Bu JSON dosyaları, fotoğrafın çekildiği tarih, konum bilgileri, albüm bilgileri gibi metadata’yı içeriyor. Immich’in bu metadata’yı doğru bir şekilde işlemesi için, fotoğrafların ve ilgili JSON dosyalarının doğru bir şekilde eşleştirilmesi gerekiyordu.
Karşılaştığım temel sorunlar şunlardı:
- JSON Metadata Eşleşmesi: Her fotoğraf için bir JSON dosyası bulunuyordu (örneğin,
IMG_1234.jpgveIMG_1234.jpg.json). Ancak bazı durumlarda dosya adları eşleşmiyordu veya JSON dosyaları eksikti. - Tarih ve Saat Bilgisi: Bazı fotoğrafların dosya adları, orijinal çekim tarihini yansıtmıyordu. JSON dosyalarındaki
photoTakenTimeveyacreationTimegibi alanları kullanarak bu bilgileri düzeltmek gerekti. - Yinelenen Dosyalar: Google Fotoğraflar’da zamanla oluşan yedeklemeler veya farklı cihazlardan yüklemeler nedeniyle yinelenen dosyalar olabiliyordu.
- Klasör Yapısı: Google Takeout, verileri yıla ve aya göre düzenlenmiş klasörler halinde indiriyordu, ancak bu yapı Immich için doğrudan ideal değildi.
Bu sorunları çözmek için Immich’in kendi CLI aracından (immich-cli) faydalandım. immich-cli aracı, yerel diskinizdeki fotoğrafları Immich sunucusuna yüklemek için oldukça kullanışlı. Özellikle --dedupe (yinelenenleri kaldırma) ve --album (yüklerken albüm oluşturma) gibi seçenekleri işimi kolaylaştırdı.
Verilerimi aktarmak için kullandığım temel adımlar şunlardı:
-
Verileri Hazırlama: İndirdiğim Google Takeout arşivlerini sunucumdaki geçici bir dizine (
/mnt/google_takeout_import) açtım. -
Metadata İşleme (Opsiyonel ama Önemli): Bazı eski fotoğraflar için metadata’yı düzeltmek amacıyla
exiftoolgibi araçları kullandım. Örneğin, JSON dosyasındakicreationTimebilgisini fotoğrafın EXIF verisine yazmak:# Örnek: exiftool ile JSON'daki tarihi JPG dosyasına yazma # Bu komut, ilgili JSON dosyasının varlığını kontrol ederek çalışır. find /mnt/google_takeout_import -name "*.jpg" -print0 | while IFS= read -r -d $'\0' file; do json_file="${file}.json" if [ -f "$json_file" ]; then creation_time=$(jq -r '.photoTakenTime.timestamp' "$json_file" | xargs -I {} date -d @{} +"%Y:%m:%d %H:%M:%S") if [ -n "$creation_time" ]; then exiftool -overwrite_original "-DateTimeOriginal=$creation_time" "-CreateDate=$creation_time" "$file" fi fi doneBu betik, her JPG dosyası için ilgili JSON dosyasını kontrol eder ve
photoTakenTime.timestampalanını okuyarak fotoğrafınDateTimeOriginalveCreateDateEXIF etiketlerine yazar. Bu, Immich’in doğru tarih bilgilerini almasını sağlar.jqveexiftoolpaketlerinin kurulu olması gerekir. -
Immich’e Yükleme: Immich CLI aracını kullanarak fotoğrafları yükledim. Büyük klasörleri parça parça yüklemek, olası bağlantı kesintileri veya hatalar durumunda süreci daha yönetilebilir kılıyordu.
# Immich CLI kurulumu (eğer kurulu değilse) npm install -g @immich-app/cli # Immich CLI ile yükleme komutu immich upload --recursive --dedupe --album "Google Takeout Import" /mnt/google_takeout_import/--recursiveile alt klasörleri de taradım,--dedupeile zaten Immich’te olan dosyaların atlanmasını sağladım ve--albumile tüm bu dosyaları “Google Takeout Import” adında bir albüme ekledim. Bu sayede, aktarım sonrası düzenleme yapmam daha kolay oldu.
Bu adımların ardından, binlerce fotoğraf ve videom Immich sunucuma başarıyla aktarıldı. İlk senkronizasyon ve thumbnail oluşturma işlemleri biraz zaman aldı, ancak sonunda tüm anılarım kendi kontrolüm altında, kendi sunucumda güvenle duruyordu.
Güvenlik ve Yedekleme Stratejileri
Kendi fotoğraf sunucumu kurmak, sadece verilerimi Google’dan çekmekle kalmadı, aynı zamanda bu verilerin güvenliğini ve sürekliliğini sağlamak sorumluluğunu da tamamen bana yükledi. Bir MSP olarak, bu konuya özel bir hassasiyet gösteriyorum. İyi bir güvenlik ve yedekleme stratejisi olmadan, self-hosting’in hiçbir anlamı kalmaz.
Güvenlik Katmanları
Immich sunucum için uyguladığım güvenlik önlemleri birkaç katmandan oluşuyor:
- Ağ Seviyesi Firewall: Sunucumun önünde bir firewall (örn.
ufwveya Sophos XGS gibi bir donanım firewall) kullanıyorum. Sadece gerekli portları (örneğin, Nginx için 80 ve 443) dış dünyaya açtım. Immich’in kendi portu olan 3001’i doğrudan dışarıya açmak yerine, bir Nginx reverse proxy arkasına aldım. Bu, doğrudan erişimi engelleyerek saldırı yüzeyini küçültüyor.
Bu komutlar, sunucumda HTTP ve HTTPS portlarını açar. İç ağdaki Docker servislerine erişim, sadece Nginx üzerinden sağlanır.sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable - Nginx Reverse Proxy ve SSL/TLS: Immich web arayüzüne ve API’sine dışarıdan erişim için Nginx reverse proxy kullanıyorum. Nginx, hem yük dengeleme hem de güvenlik katmanı olarak görev yapıyor. En önemlisi, tüm iletişimi Let’s Encrypt ile sağladığım ücretsiz SSL/TLS sertifikalarıyla şifreliyorum. Bu, verilerin şifreli aktarımını garanti eder.
Bu Nginx yapılandırması, tüm HTTP isteklerini HTTPS’ye yönlendirir, SSL sertifikalarını kullanır ve Immich servisine güvenli bir şekilde proxy yapar.server { listen 80; server_name immich.mydomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name immich.mydomain.com; ssl_certificate /etc/letsencrypt/live/immich.mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/immich.mydomain.com/privkey.pem; location / { proxy_pass http://localhost:2283; # Immich internal API port 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; client_max_body_size 5000M; # Max upload size proxy_read_timeout 300s; proxy_send_timeout 300s; } }client_max_body_sizeveproxy_read_timeoutgibi değerleri, büyük fotoğraf/video dosyalarının sorunsuz yüklenmesi için artırdım. - Güçlü Parolalar ve Kullanıcı Yönetimi: Immich üzerindeki kullanıcı hesaplarım için güçlü, benzersiz parolalar kullanıyorum. Multi-factor authentication (MFA) desteği geldiğinde hemen etkinleştireceğim. Ayrıca, sunucuya SSH erişimi için parola yerine SSH key kullanıyor ve düzenli olarak logları kontrol ediyorum.
- Güncel Tutma: İşletim sistemini ve Docker konteynerlerini düzenli olarak güncel tutuyorum. Bu, bilinen güvenlik açıklarının kapatılması için hayati önem taşır.
docker compose pull && docker compose up -dkomutunu düzenli olarak çalıştırarak Immich konteynerlerini güncel tutarım.
Yedekleme Stratejileri
Yedekleme, felaket anında verilerinizi kurtarmanın tek yoludur. Benim için 3-2-1 kuralı altın standarttır: verinin 3 kopyası, 2 farklı ortamda, 1 tanesi offsite (uzak konumda) olmalı.
- Immich Veritabanı Yedeklemesi: Immich, tüm metadata’yı PostgreSQL veritabanında saklar. Bu veritabanının düzenli olarak yedeklenmesi kritik. Günde bir kez
pg_dumpkullanarak veritabanının bir kopyasını alıyorum.
Bu komut,# PostgreSQL veritabanı yedeği alma docker exec immich_postgres pg_dump -U immich immich > /path/to/backup/db_backup_$(date +%Y%m%d%H%M%S).sqlimmich_postgreskonteyneri içindekiimmichveritabanının bir dökümünü alır ve belirlenen yedekleme dizinine kaydeder. - Fotoğraf ve Video Dosyaları Yedeklemesi: Immich’in yüklediği tüm fotoğraf ve video dosyaları,
uploaddizininde saklanır. Bu dizinin de düzenli olarak yedeklenmesi şart. Ben bu dizini Acronis ile offsite bir depolama alanına yedekliyorum. Acronis, imaj ve dosya yedeklemede oldukça esnek ve güvenilir bir çözüm sunuyor. Ayrıca, Synology NAS’ımda da bu dosyaların anlık görüntülerini (snapshots) alıyorum. - Offsite Yedekleme: Yerel yedekler önemlidir, ancak yangın, hırsızlık veya donanım arızası gibi durumlara karşı bir offsite yedeğinizin olması gerekir. Ben hem veritabanı yedeğimi hem de fotoğraf dosyalarımı şifreli bir şekilde bulut depolama alanına (örneğin Backblaze B2 veya S3 uyumlu bir servis) aktarıyorum.
rclonegibi araçlar bu konuda çok işime yarıyor.
Bu komut, yerel yedek dizinimi uzak bir depolama alanıyla senkronize eder.# rclone ile offsite yedekleme (örnek) rclone sync /path/to/backup remote:immich-backups --log-file=/var/log/rclone-immich.logremoteburada yapılandırılmış bir rclone hedefidir.
Bu güvenlik ve yedekleme stratejileri sayesinde, Immich sunucumdaki anılarımın güvende olduğundan emin olabilirim. Kendi verilerimi yönetmek, aynı zamanda bu verileri korumak için gerekli adımları atmak anlamına geliyor.
Performans İyileştirmeleri ve Bakım İpuçları
Immich gibi bir fotoğraf yönetim sistemini kendi sunucunuzda çalıştırmak, performans ve sürekli bakım gerektiren bir iştir. Özellikle binlerce fotoğraf ve video ile uğraşırken, sistemin akıcı çalışmasını sağlamak için bazı optimizasyonlar ve düzenli bakım rutinleri uygulamak kaçınılmaz oluyor.
Performans İyileştirmeleri
- Depolama I/O Optimizasyonu: Fotoğraf ve video dosyaları, özellikle thumbnail oluşturma ve arama işlemleri sırasında yoğun disk I/O’su gerektirir. Bu nedenle, ana depolama alanı olarak yüksek hızlı bir SSD (NVMe tercih edilir) kullanmak performansı önemli ölçüde artırır. PostgreSQL veritabanının da SSD üzerinde olması, metadata sorgularının hızını iyileştirir.
- Örneğin, 100GB’lık bir fotoğraf kütüphanesini NVMe SSD’ye taşıdığımda, ilk indeksleme ve thumbnail oluşturma süreleri SATA SSD’ye göre yaklaşık %30-40 oranında azaldı.
- CPU ve RAM Kaynakları: Immich’in makine öğrenimi bileşeni (immich-machine-learning) ve mikroservisler (immich-microservices), yüz tanıma ve nesne algılama gibi yoğun görevler sırasında CPU’yu oldukça kullanır. Yeterli CPU çekirdeği (en az 4-6 çekirdek) ve RAM (en az 8-16GB, kütüphane büyüklüğüne