24 Agustus 2026

Immich: Mengelola Foto Tanpa Menyerah ke Cloud

Mengelola perpustakaan foto keluarga di server sendiri ala galeri cloud modern: pencadangan otomatis dari HP, pencarian AI lokal, plus kelebihan, keterbatasan nyata, dan strategi backup database yang perlu disiapkan.

Foto keluarga menumpuk di HP lalu masuk galeri cloud: kuota gratis makin sempit, langganan makin mahal, semua foto dan metadata tersimpan di server pihak ketiga. Immich menjawab dua hal sekaligus — perpustakaan di mesin sendiri dengan fitur mendekati galeri cloud modern. Ini catatan evaluasi jujur.

Mengapa Menjauh dari Galeri Cloud

Masalah utama galeri cloud bukan hanya biaya, tapi ke mana data pergi. Immich open source berlisensi AGPL-3.0, aktif dikembangkan, dan resmi dijuluki high performance self-hosted photo and video management solution:

  • Pencarian AI & wajah: Foto dikelompokkan otomatis berdasarkan pengenalan wajah dan kata kunci objek, diproses di server lokal.
  • Auto-backup mobile: Aplikasi iOS dan Android mencadangkan foto dari album terpilih secara otomatis di latar belakang.
  • Performa tinggi: Arsitektur microservice dirancang menangani puluhan ribu berkas media tanpa lag.
  • Tanpa langganan: Biaya pindah ke storage sendiri; tidak ada kuota bulanan yang menyusut.

Arsitektur Empat Container

Immich berjalan sebagai empat container yang saling melengkapi:

  1. immich-server: Core API server dan antarmuka web (port 2283).
  2. immich-machine-learning: Service Python untuk ekstraksi fitur AI, pencarian vektor, dan pengenalan wajah; model disimpan di volume model-cache.
  3. immich_postgres: PostgreSQL dengan ekstensi pgvector dan VectorChord untuk metadata foto dan pencarian kontekstual berbasis model CLIP.
  4. immich_redis: Queue dan cache (Valkey/Redis) untuk antrean pemrosesan.

Alur: upload ditulis ke direktori library, job masuk antrean Redis, hasil ekstraksi disimpan ke PostgreSQL. Immich tidak men-scan folder library, jadi metadata database adalah sumber kebenaran utama.

Deployment dengan Docker Compose

Compose di bawah cukup untuk mulai; image database resmi berisi PostgreSQL 14 dengan VectorChord dan pgvector. Template resmi memakai berkas .env untuk UPLOAD_LOCATION, DB_DATA_LOCATION, dan DB_PASSWORD; versi ringkas ini memuat nilainya langsung:

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - ./library:/data
    ports:
      - "2283:2283"
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      - model-cache:/cache
    restart: always

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ganti_password_db
      POSTGRES_USER: postgres
      POSTGRES_DB: immich
    volumes:
      - ./postgres:/var/lib/postgresql/data
    restart: always

volumes:
  model-cache:

Simpan compose, ganti password placeholder, jalankan docker compose up -d, buka port 2283, buat akun admin pertama. Rilis cepat, jadi pin versi lewat IMMICH_VERSION di .env.

Keamanan dan Privasi

  • Pengenalan wajah, pencarian AI, dan metadata lokasi diproses lokal di server sendiri; tidak ada foto dikirim ke API pihak ketiga.
  • Port 2283 sebaiknya tidak langsung terekspos ke internet; akses dari luar rumah lewat reverse proxy HTTPS atau Tailscale.
  • Ganti password PostgreSQL dari placeholder dan jangan pakai ulang credential service lain.

Kelebihan Spesifik yang Terasa

  • Auto-backup HP: Foto baru dari album terpilih terunggah otomatis saat aplikasi dibuka dan berkala di latar belakang.
  • Smart search tanpa tag manual: Pencarian CLIP menerima kata kunci bebas (“pantai saat sunset”) tanpa metadata.
  • Pengelompokan wajah: Wajah dikelompokkan, diberi nama, dicari per orang, dan cluster yang salah bisa digabung.
  • Open source: Kontrol penuh atas kode, tanpa lock-in penyedia.

Kontra dan Keterbatasan

  • Pemrosesan AI makan resource: Embedding dan deteksi wajah jalan di background; indexing awal ribuan foto terasa di mesin kecil. Akselerasi GPU bisa lewat image tag khusus (cuda, rocm, openvino, dst.) tapi butuh setup tambahan.
  • Database adalah titik rawan: Immich tidak men-scan folder library; metadata dan path tersimpan di PostgreSQL. Database hilang = galeri harus dibangun ulang; backup database wajib, bukan opsional.
  • Storage lebih besar dari berkas asli: Di UPLOAD_LOCATION, Immich membuat thumbnail, video hasil transcode, dan file profil di samping library.
  • Rilis cepat: Fitur baru datang cepat, tapi upgrade perlu diperhatikan; pin versi dan baca release notes.
  • Satu mesin = satu failure domain: Salinan di mesin sama melindungi dari kehilangan file, bukan dari kehilangan seluruh mesin.

Backup dan Disaster Recovery

Dua aset dicadangkan bersamaan: folder media (UPLOAD_LOCATION) dan database PostgreSQL — penyimpan metadata album, path berkas, dan cluster wajah. Tanpa database, berkas utuh tapi struktur galeri hilang.

Immich punya backup database otomatis: dump .sql.gz di UPLOAD_LOCATION/backups, jadwal dan retensi diatur dari UI (default harian, retensi belasan backup), restore via web di bagian Maintenance atau saat onboarding. Dump hanya metadata, bukan foto atau video — salinan berkas media tetap dibuat sendiri. Idealnya kedua salinan off-host mengikuti pola 3-2-1.

Kesimpulan

Immich menutup dua celah galeri cloud: kendali data dan biaya. Di satu mesin dengan storage terbatas, siapkan diri untuk resource pemrosesan AI dan disiplin backup; tooling sudah disediakan, tapi salinan off-host tetap tanggung jawab pemilik. Jika siap, pengalamannya mendekati galeri cloud modern tanpa menyerahkan foto ke pihak ketiga.

Referensi