Ruang penyimpanan Google Foto gratis sudah lama habis, dan biaya langganan Google One tiap bulan terasa sayang untuk sekadar menyimpan foto keluarga. Kalau itu keresahan yang sama dirasakan, ada opsi lain yang sepenuhnya berada di bawah kendali sendiri: menjalankan server foto pribadi di rumah. Artikel ini membahas cara install Immich di Docker secara lengkap, mulai dari menyiapkan server, mengonfigurasi file docker-compose.yml dan .env, sampai menghubungkan aplikasi mobile agar foto dari HP ter-backup otomatis seperti Google Foto.
Semua perintah di bawah sudah diuji langsung di Ubuntu Server dengan Immich versi 3.1.0, jadi bisa diikuti baris demi baris tanpa perlu banyak modifikasi.
Apa itu Immich?
Immich adalah aplikasi manajemen foto dan video self-hosted yang open source, dirancang untuk menjadi pengganti langsung Google Foto atau iCloud Photos. Aplikasi ini punya fitur backup otomatis dari smartphone, pencarian berbasis AI (termasuk deteksi wajah dan pencarian pakai deskripsi teks), pembuatan album, timeline, hingga sharing link publik, semuanya berjalan di server milik sendiri.
Mengapa Memilih Immich?
- Kontrol penuh atas data. Foto dan video tersimpan di storage sendiri, bukan di server pihak ketiga.
- Tidak ada batas kuota buatan. Kapasitas penyimpanan hanya dibatasi oleh hard disk yang dipasang di server.
- Fitur AI lokal. Pencarian wajah dan pencarian semantik berjalan di server sendiri lewat modul
immich-machine-learning, tanpa mengirim data ke cloud pihak ketiga. - Gratis dan open source. Tidak ada biaya lisensi, source code bisa diaudit siapa saja di GitHub.
- Instalasi terstandarisasi lewat Docker Compose. Semua service (server, database, cache, machine learning) sudah dipaketkan jadi satu stack yang gampang dijalankan dan diupdate.
Immich vs Google Foto
Sebelum memutuskan pindah, ada baiknya membandingkan langsung dua opsi ini dari sisi privasi, biaya, dan kontrol data.
| Aspek | Immich (Self-Hosted) | Google Foto |
|---|---|---|
| Privasi data | Data tetap di storage sendiri, tidak dipindai untuk iklan | Data disimpan di server Google, tunduk pada kebijakan privasi Google |
| Biaya | Gratis (software), biaya riil hanya hardware dan listrik | Gratis terbatas, lalu langganan Google One bulanan |
| Kapasitas | Sebesar kapasitas disk yang dipasang | Dibatasi paket langganan |
| Kontrol data | Penuh, termasuk backup dan migrasi | Terbatas pada fitur yang disediakan Google |
| Kompresi kualitas | Tidak ada, foto tersimpan sesuai resolusi asli | Storage saver bisa mengompresi foto |
| Kebutuhan maintenance | Perlu dikelola sendiri (update, backup, keamanan server) | Dikelola sepenuhnya oleh Google |
Trade-off utamanya jelas: Immich menawarkan privasi dan kontrol penuh, tapi menuntut tanggung jawab teknis untuk merawat server sendiri. Google Foto lebih praktis karena semua urusan infrastruktur ditangani otomatis, dengan konsekuensi data berada di luar kendali langsung pengguna.
Persiapan & Prasyarat Sistem
Spesifikasi Perangkat Keras
Dokumentasi resmi Immich mencantumkan kebutuhan hardware minimum sebagai berikut:
- CPU: minimum 2 core, direkomendasikan 4 core (arsitektur amd64 atau arm64). Untuk amd64, versi 3 ke atas butuh dukungan mikroarsitektur x86-64-v2, yang sudah dipenuhi hampir semua CPU produksi 2012 ke atas.
- RAM: minimum 6 GB, direkomendasikan 8 GB. Fitur machine learning bisa dimatikan kalau server hanya punya RAM 4 GB.
- Storage: disarankan pakai filesystem Unix-compatible seperti EXT4 atau ZFS yang mendukung ownership user/group. Alokasikan tambahan 10-20% dari ukuran library untuk thumbnail dan video hasil transcode.
- Storage database: khusus untuk PostgreSQL, wajib pakai SSD lokal, bukan network share (NFS/SMB), karena performa I/O database sangat sensitif terhadap latensi.
Rekomendasi Praktis: Untuk pemakaian rumahan dengan 1-3 pengguna, mini PC atau NAS dengan CPU 4 core dan RAM 8 GB umumnya sudah cukup nyaman, termasuk untuk menjalankan fitur pencarian wajah dan pencarian semantik secara bersamaan.
Kebutuhan Perangkat Lunak
- Sistem operasi: Linux 64-bit direkomendasikan (Ubuntu, Debian, dan sejenisnya). Windows bisa menjalankan Immich lewat Docker Desktop atau WSL 2, sedangkan macOS lewat Docker Desktop.
- Docker Engine: versi 25 ke atas, lengkap dengan Docker Compose plugin. Perintah yang dipakai adalah
docker compose(dua kata, tanpa strip), bukandocker-composelama yang sudah tidak didukung. - Akses terminal: akses SSH atau terminal langsung ke server untuk menjalankan perintah instalasi.
Kalau Docker belum terpasang, install Docker Engine dan plugin Compose terlebih dahulu:
curl -fsSL https://get.docker.com | sudo shSetelah perintah di atas selesai, logout dan login ulang supaya perubahan group docker berlaku, lalu cek instalasi dengan docker compose version.
Akses Jaringan
Immich berjalan sebagai web service di port 2283, jadi ada dua hal yang perlu disiapkan di sisi jaringan:
- IP lokal statis. Set IP address server jadi statis (lewat konfigurasi router atau static IP di OS) supaya alamat server tidak berubah-ubah setiap kali perangkat reboot atau reconnect ke jaringan.
- Domain dan reverse proxy (opsional). Kalau ingin mengakses Immich dari luar jaringan rumah, siapkan reverse proxy seperti Nginx Proxy Manager, Caddy, atau Traefik, lengkap dengan sertifikat HTTPS. Jangan expose port 2283 langsung ke internet tanpa proxy dan HTTPS, karena berisiko dari sisi keamanan.
Langkah-Langkah Instalasi
1. Membuat Direktori Kerja
Buat folder khusus untuk menyimpan file konfigurasi Immich, terpisah dari direktori lain di server.
mkdir immich
cd immich2. Mengunduh File Konfigurasi
Ambil file docker-compose.yml dan .env resmi langsung dari repository GitHub Immich menggunakan wget:
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envIsi docker-compose.yml yang terunduh mendefinisikan empat service utama: immich-server (backend dan web UI), immich-machine-learning (mesin AI untuk pencarian wajah dan semantik), redis (cache dan job queue), serta database (PostgreSQL dengan ekstensi vector search). Isinya kurang lebih seperti ini:
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
healthcheck:
disable: false
volumes:
model-cache:File ini tidak perlu diubah manual kecuali ada kebutuhan khusus, karena semua nilai variabelnya diambil dari file .env di langkah berikutnya.
3. Konfigurasi File .env
Buka file .env dengan text editor pilihan, misalnya nano .env, lalu sesuaikan beberapa variabel penting berikut.
Mengatur lokasi penyimpanan foto (UPLOAD_LOCATION)
Variabel ini menentukan folder di server tempat semua file foto dan video asli disimpan. Ganti path default kalau ingin menyimpan data di disk atau mount point khusus, misalnya hard disk eksternal yang di-mount ke /mnt/photos:
UPLOAD_LOCATION=/mnt/photos/immich-library
DB_DATA_LOCATION=./postgresMengubah kunci rahasia database
Password default DB_PASSWORD=postgres wajib diganti dengan password acak yang kuat sebelum container pertama kali dijalankan. Gunakan hanya karakter alfanumerik (A-Za-z0-9) tanpa simbol atau spasi, supaya tidak memicu error parsing environment variable.
DB_PASSWORD=g7Xk29PqvL8mZaR4Penting: Password database hanya bisa diganti dengan aman sebelum container database pertama kali dijalankan. Kalau container sudah pernah start dengan password lama, ganti variabel
DB_PASSWORDsaja tidak cukup, karena data password sudah tersimpan di dalam volume PostgreSQL.
TZ=Asia/JakartaTimezone yang benar memastikan timestamp foto, jadwal job backend, dan log server sesuai dengan waktu lokal.
4. Menjalankan Container
Setelah semua variabel di .env disesuaikan, jalankan seluruh stack Immich dengan perintah berikut dari dalam folder immich-app:
sudo docker compose up -d
Perintah ini akan mengunduh image immich-server, immich-machine-learning, redis (Valkey), dan database (PostgreSQL) dari registry, lalu menjalankan semuanya di background. Proses unduhan bisa memakan waktu beberapa menit tergantung kecepatan internet, terutama untuk image machine learning yang ukurannya cukup besar.
Pantau proses startup dengan melihat log secara real-time:
sudo docker compose logs -fServer siap diakses ketika log immich_server menunjukkan pesan bahwa aplikasi berhasil listen di port 2283, dan status seluruh container menunjukkan healthy saat dicek lewat sudo docker compose ps.
Konfigurasi Awal via Web UI
Akses Dasbor
Buka browser di komputer manapun yang satu jaringan dengan server, lalu akses:
http://<IP-Server>:2283Ganti <IP-Server> dengan alamat IP lokal server, misalnya http://192.168.1.10:2283.
Membuat Akun Admin
Pengguna pertama yang melakukan registrasi di halaman ini otomatis menjadi administrator server. Klik tombol Getting Started, lalu isi email dan password untuk akun admin. Simpan kredensial ini di tempat aman, karena akun admin punya akses penuh untuk mengelola user lain, storage template, dan konfigurasi server.
Pengaturan Dasar
Setelah login pertama kali, beberapa pengaturan yang layak dicek dari menu Administration:
- Tema dan bahasa: ubah lewat menu Account Settings sesuai preferensi masing-masing user.
- Machine learning (AI): fitur pencarian wajah dan pencarian semantik biasanya sudah aktif secara default lewat container
immich-machine-learning. Status dan pengaturan detailnya bisa dicek di Administration > Settings > Machine Learning. - Storage template: mengatur pola penamaan folder otomatis untuk file yang di-upload, defaultnya mengikuti pola
Tahun/Tahun-Bulan-Tanggal/NamaFile. Pengaturan ini ada di Administration > Settings > Storage Template. - Manajemen user: tambah anggota keluarga atau teman lewat Administration > Users supaya mereka bisa punya library terpisah di server yang sama.
Menghubungkan Aplikasi Mobile (Android / iOS)
Unduh Aplikasi
Immich menyediakan aplikasi resmi untuk kedua platform mobile utama:
- Android lewat Google Play Store, cari "Immich"
- iOS lewat Apple App Store, cari "Immich"
Log In ke Server
Saat pertama membuka aplikasi, masukkan URL server lengkap dengan port di kolom endpoint, misalnya http://192.168.1.10:2283 untuk akses dari jaringan lokal, atau alamat domain publik kalau sudah pakai reverse proxy untuk akses dari luar rumah. Lanjutkan login memakai email dan password akun yang sudah dibuat di web UI.
Setup Backup Otomatis
Setelah berhasil login, masuk ke menu backup di aplikasi, lalu pilih album di HP yang ingin dicadangkan, misalnya album Kamera atau Screenshot. Aktifkan opsi backup otomatis supaya foto baru langsung terupload ke server begitu perangkat terhubung ke jaringan, mirip perilaku Google Foto.
Tips: Aktifkan opsi "upload hanya lewat WiFi" di pengaturan backup kalau kuota data seluler terbatas, supaya proses upload foto berukuran besar tidak menghabiskan kuota saat di luar rumah.
Tips Tambahan & Perawatan
Cara Update Immich
Immich merilis versi baru cukup sering. Untuk update ke versi terbaru, jalankan tiga perintah berikut dari dalam folder immich-app:
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune -fPerintah docker compose pull mengambil image terbaru sesuai tag yang diset di IMMICH_VERSION pada file .env, docker compose up -d merestart container dengan image baru, dan docker image prune -f membersihkan image lama yang sudah tidak terpakai. Kalau ingin mengunci ke versi tertentu supaya tidak auto-update saat pull, ubah nilai IMMICH_VERSION di .env jadi tag spesifik, misalnya IMMICH_VERSION=v3.1.0.
Selalu baca release notes di halaman GitHub Releases sebelum update ke versi major baru, karena kadang ada breaking change atau langkah migrasi tambahan yang perlu dijalankan manual.
Skema Backup Data
Data Immich tersebar di dua lokasi yang sama-sama krusial dan harus di-backup:
- Folder
UPLOAD_LOCATION: berisi file foto dan video asli beserta thumbnail. - Database PostgreSQL di folder
DB_DATA_LOCATION: menyimpan metadata, album, user, dan relasi antar data.
Cara paling aman melakukan backup database adalah lewat pg_dump dari dalam container, bukan menyalin mentah folder data PostgreSQL yang sedang berjalan:
sudo docker exec -t immich_postgres pg_dumpall -c -U postgres > immich_backup_$(date +%Y%m%d).sqlTerapkan strategi backup 3-2-1: simpan minimal tiga salinan data, di dua jenis media penyimpanan berbeda, dan satu salinan disimpan di lokasi terpisah (offsite), misalnya cloud storage terenkripsi atau hard disk yang disimpan di tempat lain. Skema ini melindungi data dari risiko kegagalan hardware, human error, maupun bencana fisik di lokasi server utama.
Troubleshooting Masalah Umum
Container database gagal start setelah ganti DB_PASSWORD
Password PostgreSQL hanya dibaca saat volume database dibuat pertama kali. Kalau volume sudah ada dengan password lama, sinkronkan lagi lewat perintah SQL ALTER USER di dalam container, atau kalau data belum penting, hapus volume database dan biarkan Immich membuat ulang dengan password baru.
Halaman web tidak bisa diakses dari perangkat lain di jaringan
Cek firewall di server (misalnya ufw) sudah mengizinkan port 2283, dan pastikan IP server yang dipakai benar-benar statis serta satu subnet dengan perangkat yang mengakses.
Proses upload dari mobile app lambat atau sering gagal
Biasanya disebabkan koneksi WiFi yang tidak stabil ke server, atau resource server (RAM/CPU) kehabisan saat container immich-machine-learning sedang memproses banyak file sekaligus. Cek pemakaian resource lewat sudo docker stats untuk memastikan.
Fitur pencarian wajah atau pencarian teks tidak berfungsi
Pastikan container immich_machine_learning berstatus healthy lewat sudo docker compose ps. Kalau RAM server terbatas (di bawah 6 GB), fitur ini bisa gagal berjalan karena proses model AI kehabisan memori.
Tanya Jawab
Apakah Immich aman dipakai untuk menyimpan foto pribadi?
Immich bersifat open source sehingga source code-nya bisa diaudit publik, dan data tersimpan sepenuhnya di server sendiri. Tingkat keamanannya sangat bergantung pada bagaimana server dikonfigurasi, misalnya penggunaan HTTPS lewat reverse proxy dan pembaruan software server secara berkala.
Apakah bisa migrasi dari Google Foto ke Immich?
Bisa. Google Takeout menyediakan export seluruh library Google Foto dalam format ZIP, yang kemudian bisa diupload ke Immich lewat fitur bulk upload di web UI atau CLI resmi Immich.
Berapa biaya menjalankan Immich sendiri?
Software-nya gratis. Biaya riil datang dari hardware (mini PC, NAS, atau server bekas) dan konsumsi listrik untuk menjalankan server 24 jam, yang totalnya biasanya jauh lebih murah dibanding langganan cloud storage jangka panjang.
Apakah Immich bisa diakses dari luar rumah?
Bisa, dengan menambahkan reverse proxy dan sertifikat HTTPS, lalu mengarahkan domain publik ke server. Opsi lain yang lebih aman tanpa membuka port ke internet adalah memakai VPN pribadi seperti Tailscale atau WireGuard.
Kesimpulan
Instalasi Immich lewat Docker Compose sebenarnya cukup ringkas kalau langkah-langkahnya diikuti berurutan: siapkan server sesuai spesifikasi minimum, unduh docker-compose.yml dan .env, sesuaikan beberapa variabel penting seperti lokasi penyimpanan, password database, dan timezone, lalu jalankan satu perintah sudo docker compose up -d. Sisanya tinggal membuat akun admin lewat web UI dan menghubungkan aplikasi mobile untuk backup otomatis.
Trade-off menjalankan server foto sendiri adalah tanggung jawab maintenance, terutama urusan update rutin dan backup data yang konsisten. Imbalannya, kontrol penuh atas privasi foto keluarga dan bebas dari batasan kuota cloud berbayar jadi milik sendiri sepenuhnya. Bagi yang sudah terbiasa mengelola Docker di rumah, Immich jadi salah satu alternatif Google Foto self-hosted paling matang saat ini.




