Immich Self-Host: Google Photos Pribadi di VPS, Tanpa Langganan Bulanan
Kenapa Immich, bukan sekadar folder foto
Menyimpan foto di folder VPS memang bisa, tapi tidak enak dipakai: tidak ada thumbnail, tidak bisa cari berdasarkan wajah atau lokasi, dan tidak ada aplikasi HP yang sinkron otomatis. Immich menutup semua celah itu. Tampilannya mirip Google Photos: timeline, album, pencarian, pengenalan wajah, peta lokasi, dan aplikasi Android/iOS untuk backup otomatis dari HP.
Bedanya, semua berjalan di server Anda sendiri. Tidak ada yang memindai foto untuk iklan, tidak ada batas storage gratis, dan biayanya hanya sewa VPS plus disk yang Anda pakai. Kekurangannya juga perlu disebut di depan: Anda yang jadi adminnya. Kalau server mati atau disk rusak dan tidak ada backup, foto hilang. Jadi artikel ini tidak berhenti di install — backup adalah setengah dari isinya.
Yang perlu disiapkan
Spesifikasi realistis untuk pemakaian keluarga kecil (1–3 pengguna, puluhan ribu foto):
- VPS dengan minimal 2 CPU dan 4 GB RAM. Kalau ada video 4K yang perlu di-transcoding, 4 CPU dan 8 GB RAM terasa jauh lebih lega.
- Docker dan Docker Compose.
- Disk yang cukup (perhitungannya ada di bawah).
- Opsional tapi sangat disarankan: domain atau subdomain, misalnya
foto.domainanda.com, supaya aplikasi HP bisa terhubung lewat HTTPS.
Untuk sistem operasi, perintah di artikel ini memakai Ubuntu 24.04. Kalau Anda memakai distro lain, sesuaikan manajer paketnya, tapi langkah Immich-nya sama.
Install Docker
Kalau Docker belum terpasang, install dari repositori Ubuntu. Ini cara paling minim drama di 24.04:
sudo apt update sudo apt install -y docker.io docker-compose-v2 sudo systemctl enable --now docker sudo usermod -aG docker $USER
Perintah terakhir menambahkan user Anda ke grup docker supaya tidak perlu sudo setiap kali menjalankan Docker. Setelah itu logout dan login lagi agar grup barunya aktif, lalu cek:
docker --version docker compose version
Install Immich dengan Docker Compose
Immich resmi menyediakan file docker-compose.yml dan .env yang siap pakai. Kita tidak meracik sendiri karena isinya empat layanan yang saling terkait: server Immich, machine learning (pengenalan wajah dan pencarian), database Postgres, dan antrean Valkey/Redis. Salah satu ketinggalan, fitur pentingnya ikut mati.
sudo mkdir -p /opt/immich sudo chown "$USER:$USER" /opt/immich cd /opt/immich wget 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.env
Buka file .env dan isi tiga hal: password database yang kuat, lokasi penyimpanan foto, dan zona waktu.
openssl rand -base64 32
Salin hasilnya ke DB_PASSWORD di .env, lalu atur:
UPLOAD_LOCATION=/opt/immich/library DB_DATA_LOCATION=/opt/immich/postgres TZ=Asia/Jakarta
Jangan ubah nama variabel lain kalau belum paham fungsinya. Setelah itu jalankan:
docker compose up -d docker compose ps
Tunggu 1–2 menit sampai semua container berstatus sehat, terutama machine learning yang pertama kali mengunduh model. Kalau ada container yang restart terus, lihat lognya sebelum menebak-nebak:
docker compose logs -f immich-server
Buka http://IP-VPS:2283 di browser. Pada kunjungan pertama, Immich meminta Anda membuat akun admin. Akun inilah yang menjadi pemilik server — pakai email dan password yang kuat, dan simpan di password manager.
Upload foto: tiga jalur, pilih yang paling nyaman
1. Lewat browser. Buka Immich, buat album, lalu drag-and-drop foto dari laptop. Cocok untuk memindahkan arsip lama dari folder atau hard disk eksternal.
2. Lewat aplikasi HP. Install aplikasi Immich dari Play Store atau App Store, masukkan alamat server (http://IP-VPS:2283 atau domain Anda), login, lalu aktifkan backup otomatis. Sejak itu foto baru di HP tersinkron sendiri saat ada Wi-Fi. Ini jalur yang paling terasa seperti Google Photos.
3. Lewat CLI untuk arsip besar. Kalau ada puluhan ribu file di laptop, upload lewat browser bisa putus di tengah jalan. Immich CLI lebih tahan banting:
npm install -g @immich/cli immich login http://IP-VPS:2283 --api-key KUNCI_API_ANDA immich upload --recursive ~/Pictures
Kunci API dibuat dari menu akun di web Immich. Jangan pernah menempel kunci ini di screenshot atau membagikannya ke orang lain.
Satu catatan penting soal metadata: Immich membaca EXIF foto (tanggal, lokasi, kamera) dan menampilkannya di timeline. Kalau foto lama Anda sudah kehilangan metadata karena pernah dikirim lewat aplikasi chat yang mengompres, tanggalnya bisa meleset. Itu bukan bug Immich, melainkan datanya memang sudah hilang di sumber.
Amankan akses dari luar dengan HTTPS
Membuka port 2283 langsung ke internet bisa jalan, tapi tidak disarankan. Jalur yang benar: pasang reverse proxy (Nginx atau Caddy) di depan Immich, arahkan subdomain ke VPS, dan aktifkan HTTPS dengan Let's Encrypt. Aplikasi HP pun wajib HTTPS kalau Anda mengaksesnya dari luar jaringan rumah tanpa VPN, karena login dan foto lewat HTTP polos bisa disadap.
Kalau ini VPS pertama Anda dan belum pernah menyetel reverse proxy, kerjakan itu dulu sebelum membagikan alamat server ke keluarga. Foto adalah data pribadi — jangan dibiarkan lewat koneksi tanpa enkripsi.
Backup: bagian yang tidak boleh dilewatkan
Server Immich punya tiga hal yang harus dicadangkan, dan ketiganya harus konsisten:
- Folder foto (
UPLOAD_LOCATION) — ini file aslinya. - Database Postgres — ini semua metadata: album, orang yang dikenali, favorit, dan pengaturan.
- File
.env— tanpa password database yang sama, restore database jadi jauh lebih repot.
Untuk database, dump dari container Postgres:
docker exec -t immich_postgres pg_dumpall -U postgres > /opt/immich/backup-$(date +%F).sql
Lalu salin folder foto, dump SQL, dan .env ke tempat lain — minimal ke VPS lain, disk eksternal, atau storage cloud. Skrip sederhana dengan rsync yang dijalankan tiap malam lewat cron sudah jauh lebih baik daripada tidak ada backup sama sekali. Uji restore sesekali di folder terpisah; backup yang belum pernah diuji restore-nya baru sebatas asumsi.
Kebutuhan storage yang realistis
Jangan menghitung dari jumlah foto saja. Immich menyimpan foto asli utuh, lalu menambah thumbnail dan hasil transcoding video. Perkiraan kasar untuk arsip keluarga:
- 10.000 foto @ rata-rata 5 MB = sekitar 50 GB untuk file asli.
- Thumbnail dan preview menambah kira-kira 5–10% dari ukuran arsip foto.
- Video jauh lebih boros: satu menit video 4K bisa puluhan hingga ratusan MB, dan transcoding membuat salinan tambahan.
- Model machine learning dan database hanya beberapa GB, jadi bukan komponen besar.
Praktiknya: siapkan disk dua kali lipat dari ukuran arsip foto Anda sekarang, karena arsip selalu tumbuh. Kalau VPS Anda hanya punya 50 GB dan arsip foto sudah 40 GB, jangan memaksakan — tambah disk dulu atau pisahkan storage fotonya ke volume terpisah. Kehabisan disk di tengah upload adalah cara paling menyebalkan untuk merusak database.
Checklist penutup
- Docker dan Docker Compose terpasang,
docker compose versionjalan. - Immich up lewat file Compose resmi, semua container sehat.
- Akun admin dibuat, login lewat HTTPS (bukan HTTP polos dari internet).
- Aplikasi HP terhubung dan backup otomatis aktif.
- Dump Postgres dan folder foto tersalin ke lokasi lain, terjadwal tiap malam.
- Restore pernah diuji sekali, bukan cuma diasumsikan bisa.
Kalau semua checklist ini centang, Anda punya Google Photos versi sendiri: tampilannya modern, fiturnya lengkap, dan tagihannya berhenti di sewa server. Sisanya tinggal kebiasaan — backup yang jalan otomatis, dan disiplin tidak menyimpan satu-satunya salinan foto di satu tempat.
Komentar
Posting Komentar