SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor

Immich Self-Hosting: RAM 6 GB dan Upgrade Aman

Ketahui kebutuhan RAM sebenarnya, port 2283 di balik HTTPS, error “exit 137”, dan alasan Immich v3 gagal berjalan di database pgvecto.rs. Sertakan langkah pemulihan.

Yang Anda bangun

Immich adalah layanan pencadangan foto dan video yang di-host sendiri, pengganti Google Photos yang sebenarnya. Aplikasi ini memiliki aplikasi ponsel yang mengunggah camera roll Anda di latar belakang, linimasa, album, pengenalan wajah, dan pencarian berbasis machine learning yang menemukan "beach" atau seseorang tanpa Anda perlu memberi tag apa pun. Anda menjalankannya pada VPS milik Anda, file asli tetap berada di disk Anda, dan tidak ada pihak yang memindainya untuk menjual sesuatu kepada Anda. Jika Anda masih membandingkannya dengan kandidat lain yang jelas, perbandingan PhotoPrism dan Immich kami menyajikan batas minimum RAM, aplikasi ponsel, dan perintah pencadangan keduanya secara berdampingan.

Instalasinya terdiri dari empat container dari file Docker Compose milik proyek tersebut. Bagian ini memerlukan waktu sepuluh menit. Bagian lain dalam panduan ini adalah sumber masalahnya: container machine learning membutuhkan banyak memori pada mesin kecil, file asli cepat memenuhi disk, aplikasi seluler memerlukan URL server yang tepat dan Anda perlu memasang HTTPS di depannya sebelum layanan ini keluar dari jaringan Anda, serta Immich cukup sering merilis perubahan yang dapat merusak kompatibilitas sehingga docker compose pull yang dilakukan tanpa hati-hati dapat membuat server Anda tidak dapat dijalankan. Tangani keempat hal tersebut dengan serius dan Immich akan sangat stabil. Abaikan dan Anda dapat kehilangan satu akhir pekan.

Prasyarat dan hal penting yang perlu diketahui

  • RAM: dokumentasi resmi menyebutkan minimum 6 GB dan merekomendasikan 8 GB; anggap 4 GB ditambah swap sebagai batas minimum absolut. Container immich-server dan Postgres tidak terlalu membutuhkan sumber daya. Container immich-machine-learning paling banyak menggunakan RAM karena memuat model CLIP dan pengenalan wajah ke RAM untuk membuat indeks pencarian. Pada server dengan RAM 2 GB, kernel akan menghentikan container tersebut. Tambahkan swap meskipun RAM Anda 4 GB.
  • Disk: tentukan ukurannya berdasarkan seluruh pustaka Anda, lalu tambahkan ruang cadangan. File asli disalin sepenuhnya. Immich juga membuat thumbnail dan gambar pratinjau, dengan tambahan sekitar 10–20%. Koleksi foto berukuran 200 GB memerlukan volume 300 GB. Dibandingkan itu, Postgres hanya membutuhkan sedikit ruang.
  • CPU: KVM VPS modern apa pun sudah memadai, tetapi ML pada CPU berjalan lambat. Pengindeksan smart search untuk impor berukuran besar dapat berjalan selama berjam-jam di latar belakang. Ini normal. GPU tidak diperlukan.
  • Nama domain yang diarahkan ke VPS. Aplikasi seluler sangat menyarankan endpoint HTTPS. Anda juga memerlukan reverse proxy di depannya. Bentuk setup ini sama dengan instance Nextcloud self-hosted dengan Docker, TLS, dan backup. Immich adalah pasangan untuk foto dari server file tersebut.
  • Docker dan plugin Compose yang sudah terpasang. Gunakan Docker Engine serta plugin Compose v2 dari repositori apt milik Docker, persis seperti yang dibahas dalam panduan dasar Docker Compose kami.

Langkah 1: Tambahkan swap sebelum melakukan hal lain

Kegagalan Immich yang paling umum pada VPS kecil adalah container ML dihentikan oleh OOM killer. Sediakan ruang bagi kernel terlebih dahulu.

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 -h

free -h kini seharusnya menampilkan baris Swap: sebesar 4.0Gi. Ini tidak akan membuat ML berjalan cepat. Swap hanya berfungsi sebagai penyangga, bukan jaminan. Namun, swap membuat container jauh lebih kecil kemungkinannya berhenti saat proses indexing pada mesin dengan RAM 4 GB.

Langkah 2: Ambil file compose dan env resmi, gunakan file tersebut, bukan salinan

Immich menetapkan versi servicenya dan, yang terpenting, image databasenya di dalam file yang dirilis bersama software. Jangan menyalin file compose dari blog, termasuk blog ini, sebagai sumber acuan utama. Unduh aset rilis:

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.env

File tersebut berasal dari rilis bertag, sehingga referensi image-nya sesuai. File compose mendefinisikan empat service. Sebelum mengubah apa pun, pahami fungsi masing-masing service:

  • immich-server (ghcr.io/immich-app/immich-server, container immich_server), API dan UI web yang listening pada port 2283. Service ini melakukan mount direktori upload Anda ke /data.
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning, container immich_machine_learning), untuk pencarian CLIP dan pengenalan wajah. Model yang diunduh disimpan dalam cache pada volume model-cache. Service ini paling banyak menggunakan memori.
  • database (container immich_postgres), Postgres dengan ekstensi vektor VectorChord, yang menyediakan fungsi pencarian kemiripan. Tag image ditetapkan berdasarkan digest langsung di file compose, misalnya ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:.... Setup lama menggunakan pgvecto.rs; dukungan untuknya dihapus pada Immich v3.0, sehingga semua instalasi baru menggunakan VectorChord. Jangan mengubah tag ini secara manual.
  • redis (container immich_redis), instance Valkey/Redis untuk antrean job.

Langkah 3: Konfigurasikan .env, tempat foto dan database Anda disimpan

Buka .env dan tetapkan empat hal. Semua bagian setelah baris bertanda tetap seperti semula.

# 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=immich

Ada dua aturan yang akan mencegah masalah. UPLOAD_LOCATION sebaiknya mengarah ke disk berkapasitas besar Anda. Jika nanti Anda memasang volume data, tetapkan nilainya ke path mount volume tersebut sejak awal. Memindahkannya setelah itu berarti memindahkan thumbnail dan memperbarui path aset. Selain itu, DB_DATA_LOCATION harus berada pada disk lokal. Postgres pada share NFS atau SMB dapat menyebabkan kerusakan data, dan dokumentasinya menyatakan hal ini secara eksplisit. Gunakan hanya huruf dan angka pada DB_PASSWORD untuk menghindari jenis bug escaping pada connection string.

Langkah 4: Menjalankan untuk pertama kali dan membuat pengguna admin

cd /opt/immich
sudo docker compose up -d
sudo docker compose ps

Hasil yang benar adalah empat container, semuanya running dan pada akhirnya healthy:

NAME                      STATUS
immich_machine_learning   Up (healthy)
immich_postgres           Up (healthy)
immich_redis              Up (healthy)
immich_server             Up (healthy)

up pertama mengunduh beberapa gigabyte image, jadi tunggu prosesnya. Pantau progres dengan sudo docker compose logs -f immich-server; server mencatat bahwa server sedang listen pada port 2283 setelah siap. Sekarang buka http://YOUR_SERVER_IP:2283 di browser. Kunjungan pertama menampilkan wizard Memulai, dan akun pertama yang dibuat menjadi admin. Tetapkan password yang kuat; akun ini mengelola pengaturan server, manajemen pengguna, serta konfigurasi ML yang akan Anda perlukan nanti.

Langkah 5: Aplikasi seluler dan pencadangan latar belakang

Instal "Immich" dari App Store atau Play Store. Pada layar login, aplikasi meminta Server Endpoint URL. Masukkan URL lengkap beserta skemanya, misalnya https://photos.example.com (aplikasi akan menambahkan /api sendiri). Login menggunakan akun yang baru saja Anda buat, lalu buka layar Backup pada aplikasi, pilih album yang ingin dicadangkan (biasanya Camera dan Screenshots), kemudian aktifkan Background backup. Pencadangan latar belakang di iOS dibatasi oleh sistem operasi. Upload saat aplikasi berada di latar depan selalu berjalan, sedangkan upload di latar belakang berlangsung saat diizinkan oleh sistem operasi.

Di sinilah banyak orang mengalami kendala. Karena itu, baca Langkah 6 sebelum mencoba memperbaiki masalah pada aplikasi.

Langkah 6: HTTPS melalui reverse proxy dan aturan URL lengkap

Aplikasi seluler benar-benar memerlukan HTTPS setelah keluar dari jaringan rumah Anda. Tempatkan reverse proxy di depan port 2283 dan lakukan terminasi TLS di sana. Jika Anda sudah menjalankan beberapa container, Traefik dengan TLS otomatis untuk beberapa aplikasi Docker adalah pilihan yang paling rapi; satu blok label merutekan photos.example.com ke container immich-server dan mengambilkan sertifikat untuk Anda. Jika Anda lebih memilih nginx, panduan Let's Encrypt dengan Certbot dan nginx akan memperoleh sertifikat dan blok proxy_pass http://127.0.0.1:2283;. Setelah proxy tersebut tersedia, penambahan service berikutnya pada dasarnya hanya memerlukan subdomain baru. Dengan cara ini, front end media seperti Halcyon, tampilan toko video era 90-an untuk Jellyfin dapat berada di samping Immich pada mesin yang sama. Hal yang sama berlaku untuk HarnessRouter yang di-host sendiri untuk menempatkan Codex dan Claude Code di balik satu API, yang sengaja mengikat ke loopback dan baru dapat dijangkau setelah proxy melakukan terminasi TLS di depannya. Karena itu, ubah login default-nya sebelum mengarahkan subdomain ke sana. Namun, tidak setiap container memerlukan hostname publik: alat yang hanya digunakan admin seperti pemindai keamanan open-kritt yang di-host sendiri sebaiknya tidak ditempatkan di proxy sama sekali dan diakses melalui tunnel SSH ketika Anda jarang membuka UI-nya. Ada juga layanan yang melewati proxy karena sama sekali tidak menggunakan HTTP, dan server relay RustDesk yang di-host sendiri adalah contoh paling jelas. Layanan ini mendengarkan pada beberapa port TCP dan UDP mentah serta memerlukan aturan firewall, bukan subdomain. Satu pengaturan proxy penting untuk Immich: naikkan batas ukuran unggahan karena video dari ponsel berukuran besar. Dalam nginx, pengaturan tersebut adalah client_max_body_size 50000M; di dalam blok server; nilai default 1 MB menolak unggahan video dengan 413 Request Entity Too Large. Jika proxy Anda juga menangani challenge HTTP-01 dari Let's Encrypt, pastikan /.well-known/immich tetap dirutekan ke Immich, bukan ke penangan challenge.

Aturan yang diberlakukan aplikasi ini adalah endpoint harus dapat dijangkau tepat pada URL yang Anda masukkan. Aplikasi menerima http://YOUR_SERVER_IP:2283 biasa (petunjuk login bawaannya adalah http://your-server-ip:port), tetapi apa pun yang melintasi internet sebaiknya menggunakan HTTPS. Skema yang salah, atau IP langsung tanpa port, menyebabkan pesan "aplikasi tidak dapat menjangkau server". Kegagalan ini dibahas sebagai masalah bernama di bawah.

Langkah 7: Pustaka eksternal vs. upload, mengimpor pohon foto yang sudah ada

Ada dua cara foto masuk ke Immich, dan keduanya berbeda.

  • Upload adalah aset yang dikelola Immich. Aplikasi atau pengunggah web menyalin file ke UPLOAD_LOCATION. Immich dapat mengganti nama, memindahkan, dan menghapusnya.
  • Pustaka eksternal adalah impor hanya-baca untuk file yang sudah berada di folder pada server Anda, pohon Pictures lama, atau ekspor NAS. Immich mengindeks file tersebut di lokasi aslinya dan menampilkannya di linimasa, tetapi tidak pernah mengubah atau menghapus file asli.

Untuk mengimpor pohon yang sudah ada, mount pohon tersebut secara hanya-baca ke dalam container server. Edit docker-compose.yml di bawah immich-server: dan tambahkan volume:

  immich-server:
    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
      - /srv/photos:/mnt/media/photos:ro

:ro menjamin bahwa Immich tidak akan pernah dapat menyentuh file asli. Buat ulang container dengan sudo docker compose up -d, lalu pada UI web buka avatar Anda → Administration → External Libraries → Create Library, pilih pengguna pemilik, klik Add di bawah Folders, lalu masukkan path container, /mnt/media/photos, bukan path host /srv/photos. Klik Scan. Menggunakan path host, bukan path container, adalah kesalahan nomor satu pada pustaka eksternal; pemindaian tidak menemukan apa pun dan melaporkan nol aset.

Langkah 8: Disiplin upgrade yang dituntut Immich

Bagian ini membedakan Immich yang berjalan baik dari Immich yang rusak. Immich merilis pembaruan dengan cepat dan tidak mem-backport perbaikan atau mendukung downgrade. Tag v3 yang dapat berubah merupakan cara yang didukung secara resmi untuk mengikuti rilis. Immich berupaya membatasi perubahan yang menyebabkan ketidakkompatibilitas pada versi major. Namun, Immich akan melakukan upgrade setiap kali Anda menjalankan pull, terlepas dari apakah Anda sudah membaca catatan rilis. Upgrade yang tidak direncanakan tidak dapat dibatalkan. Kebiasaan yang sama—menetapkan pin lalu membaca catatan rilis—layak diterapkan pada setiap container yang berumur panjang di server. Karena itu, agent KiroCrew yang di-host sendiri ditetapkan ke satu tag yang telah terbukti stabil dan tidak dibiarkan berpindah sendiri pada restart berikutnya. Terapkan disiplin berikut:

  1. Tetapkan versi. Biarkan IMMICH_VERSION menunjuk ke tag konkret seperti v3.0.2, bukan v3 yang selalu mengambil v3.x terbaru.
  2. Baca catatan rilis setiap kali sebelum melakukan upgrade. Perubahan yang menyebabkan ketidakkompatibilitas, terutama perubahan database atau ekstensi vektor, dicantumkan di sana. Rilis v3.0 merupakan contoh yang jelas: rilis tersebut menghapus pgvecto.rs sepenuhnya. Karena itu, pengguna yang masih memakai ekstensi lama harus menyelesaikan migrasi VectorChord (yang diperkenalkan sejak v1.133) sebelum dapat melakukan upgrade.
  3. Cadangkan database terlebih dahulu (Langkah 9). Selalu lakukan ini, terutama ketika catatan rilis menyebutkan database.
  4. Ambil file compose yang baru juga. IMMICH_VERSION hanya menetapkan pin untuk image server dan ML. Image Postgres ditetapkan berdasarkan digest di dalam docker-compose.yml. Karena itu, versi yang memerlukan ekstensi database yang lebih baru akan disertai file compose baru. Unduh ulang kedua aset rilis, terapkan kembali nilai .env, lalu lakukan upgrade.
  5. Perbarui client seluler terlebih dahulu. Server hanya berkomunikasi dengan versi major yang sesuai. Aplikasi biasanya kompatibel dengan versi major saat ini dan versi major sebelumnya. Jika server lebih baru daripada aplikasi, rilis saat ini (v3.3.1, diperiksa pada 2026-10-10) menampilkan pemberitahuan Pembaruan aplikasi tersedia dengan tombol Perbarui pada ponsel. Immich merekomendasikan agar semua client seluler di-upgrade sebelum server.

Perintah sebenarnya, setelah file baru tersedia:

cd /opt/immich
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune

Langkah 9: Backup, dump database DAN file asli, lalu uji

Backup Immich terdiri atas dua hal, dan salah satunya tidak berguna tanpa yang lain. Database menyimpan struktur album, wajah, indeks pencarian, dan pemetaan antara aset dan file. Direktori originals menyimpan foto yang sebenarnya. Jika hanya salah satunya yang dipulihkan, hasilnya adalah foto tanpa organisasi atau struktur kosong yang menunjuk ke file yang tidak ada. Struktur dua bagian ini bukan keunikan Immich: meja bantuan Chatwoot yang di-host sendiri juga memerlukan pasangan dump Postgres dan direktori uploads yang sama. Jika tidak, inbox yang dipulihkan akan kembali tanpa semua lampiran. Menyalin direktori data Postgres sebagai pohon file mungkin terlihat seperti jalan pintas untuk melewati proses dump, tetapi itu bukan backup yang dapat digunakan. Ini adalah jebakan yang panduan lengkap backup dan pemulihan Immich bahas bersama kesalahan pemulihan yang membuat timeline Anda kosong.

Dump database menggunakan pg_dump dari dalam container Postgres, khususnya database immich, bukan seluruh cluster:

sudo docker exec -t immich_postgres pg_dump --clean --if-exists \
  --dbname=immich --username=postgres | gzip > /opt/immich/immich-db-$(date +%F).sql.gz

Selanjutnya, backup UPLOAD_LOCATION, yaitu seluruh pohon /opt/immich/library, terutama subfolder library/, upload/, dan profile/, menggunakan restic, rsync, atau borg ke mesin lain atau object storage. Apa pun yang menjadwalkan tugas tersebut, baik entri cron maupun timer systemd, harus memiliki tempat untuk mengirimkan notifikasi saat tugas gagal. Unit systemd OnFailure= yang diarahkan ke server push ntfy milik Anda sendiri dapat mengirim pesan ke ponsel pada malam ketika dump gagal, sehingga Anda tidak baru mengetahuinya saat melakukan pemulihan. Lakukan dump database terlebih dahulu, lalu backup file, agar dump tidak pernah merujuk ke foto yang belum disalin oleh backup file. Backup external library secara terpisah dari sumber aslinya. Immich tidak mengelolanya.

Sekarang bagian yang sering dilewati semua orang: uji pemulihan. Pemulihan harus dijalankan pada stack baru yang server-nya belum pernah dijalankan, menggunakan image Postgres dengan ekstensi vector yang kompatibel dengan dump. Inilah alasan Anda tidak boleh menentukan tag image DB secara sembarangan. Pada mesin uji dengan compose dan .env yang sama, hapus state lama, jalankan hanya database, lalu muat dump:

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 -d

Penulisan ulang search_path oleh sed wajib dilakukan pada database VectorChord. Jika langkah ini dilewati, pemulihan akan berhenti di tengah proses. Setelah stack kembali berjalan dengan originals Anda, buka web UI. Jika foto dan album Anda tersedia, backup tersebut berfungsi. Jika Anda belum pernah menjalankan pengujian ini, Anda tidak memiliki backup. Anda hanya memiliki harapan.

Mode kegagalan dan string yang akan Anda lihat

Container ML dihentikan karena kehabisan memori (OOM). sudo docker compose logs immich-machine-learning berhenti secara tiba-tiba, docker compose ps menampilkan bahwa container tersebut Restarting, dan kode keluarnya adalah 137. sudo dmesg | grep -i oom mengonfirmasinya: Out of memory: Killed process ... (python3). Pekerjaan pencarian dan pengenalan wajah kemudian terhenti. Penyebabnya adalah RAM yang tidak mencukupi untuk model. Perbaikan yang disarankan, berdasarkan urutan: tambahkan swap (Langkah 1); tambah RAM VPS; atau, jika benar-benar tidak memungkinkan, buka Administration → Settings → Machine Learning Settings dan nonaktifkan toggle machine learning tingkat atas. Tindakan ini menonaktifkan semua fitur ML sekaligus. Menonaktifkan hanya Smart Search dan Facial Recognition tidak cukup, karena OCR dan jenis model lainnya tetap aktif secara default. Cadangan dan album tetap tersedia, tetapi pencarian berdasarkan isi akan dinonaktifkan. Menghapus service immich-machine-learning dari file compose memberikan hasil yang sama.

Server Immich menolak untuk start setelah upgrade. Container Postgres mungkin tetap berjalan dengan baik; immich_server yang memeriksa versi ekstensi vektor saat startup dan menolak untuk start. Log-nya terus menampilkan baris seperti 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. atau, pada stack yang lebih lama, The pgvecto.rs extension is not available in this Postgres instance. Penyebabnya adalah image database yang versi ekstensinya lebih lama daripada versi yang digunakan setelah data di-upgrade. Hal ini hampir selalu terjadi karena tag image diedit secara manual atau dump yang lebih baru dipulihkan ke image yang lebih lama. Perbaikannya adalah menggunakan image Postgres yang sesuai, mengambil file compose dari release yang sesuai dengan database Anda, tidak melakukan downgrade, dan hanya memulihkan data ke image yang kompatibel.

Aplikasi mobile tidak dapat menjangkau server. Layar login menampilkan error koneksi seperti Could not connect to server setelah Anda memasukkan URL. Penyebab yang umum: Anda memasukkan http://, padahal proxy hanya melayani https://; Anda terhubung langsung ke backend tetapi tidak mencantumkan port, sehingga aplikasi mencoba example.com (port 443), bukan example.com:2283; reverse proxy tidak meneruskan /api; atau proxy yang menangani challenge HTTP-01 Let's Encrypt merutekan /.well-known/immich ke tempat selain Immich. Perbaikannya adalah memasukkan URL lengkap https://photos.example.com dan memastikan URL tersebut dapat dimuat terlebih dahulu melalui browser pada ponsel. Jika browser dapat mengaksesnya tetapi aplikasi tidak, proxy mungkin menghapus path atau salah merutekan /.well-known/immich. Penyebab lainnya adalah sertifikat self-signed, yang ditolak aplikasi dengan handshake error kecuali dukungan sertifikat self-signed diaktifkan dalam pengaturannya.

Ruang disk habis saat proses import berlangsung. Upload mulai gagal, thumbnail menjadi kosong, dan log menampilkan ENOSPC: no space left on device atau, dari Postgres, could not extend file ... No space left on device. df -h menampilkan bahwa volume UPLOAD_LOCATION telah terisi 100%. Karena itu, tentukan kapasitas disk sebelum mengimpor library besar. Untuk memulihkannya, pasang volume yang lebih besar, hentikan stack, pindahkan UPLOAD_LOCATION ke volume tersebut, perbarui .env, lalu start kembali. Anda juga dapat memperbesar disk yang ada jika provider mengizinkannya. Postgres dapat mengalami kebuntuan jika ruang disk habis. Karena itu, kosongkan ruang dan restart container database sebelum menyimpulkan bahwa database rusak.

FAQ

Berapa RAM dan kapasitas disk yang dibutuhkan Immich?

Persyaratan resmi Immich adalah RAM minimum 6 GB dan RAM yang direkomendasikan 8 GB. Untuk pustaka kecil, 4 GB dengan swap adalah batas praktis terendah. Konfigurasikan swap, karena container machine-learning adalah bagian yang mengalami lonjakan penggunaan memori. Untuk disk, siapkan kapasitas sebesar seluruh pustaka ditambah sekitar 10–20% untuk thumbnail dan pratinjau yang dibuat secara otomatis. Gunakan penyimpanan lokal. Jangan pernah menempatkan direktori data Postgres pada network share. Jika Anda masih menentukan layanan lain yang akan dijalankan, panduan tentang layanan yang dapat di-self-host pada 2026 membandingkan kebutuhan Immich dengan layanan lain.

Apakah Immich dapat dijalankan tanpa GPU?

Ya. Container machine-learning dapat berjalan dengan baik pada CPU. GPU hanya mempercepat pengindeksan smart search dan, dengan varian image yang sesuai, transcoding video. Pada CPU, pengindeksan awal pustaka besar dapat berlangsung selama berjam-jam di latar belakang. Namun, proses ini tidak menghambat backup atau penelusuran. Jika server Anda terlalu kecil untuk menjalankan ML, Anda dapat menonaktifkan machine learning sepenuhnya melalui toggle tingkat teratas pada pengaturan admin dan tetap menggunakan fitur lainnya.

Bagaimana cara meng-upgrade Immich dengan aman?

Tetapkan IMMICH_VERSION ke tag konkret seperti v3.0.2, baca catatan rilis sebelum setiap upgrade, dan lakukan backup database terlebih dahulu. Karena image Postgres ditetapkan di dalam docker-compose.yml, bukan melalui IMMICH_VERSION, unduh ulang file compose dan example.env dari rilis target, terapkan kembali nilai konfigurasi Anda, lalu jalankan docker compose pull && docker compose up -d. Jangan pernah membiarkan versi berubah tanpa pengawasan. Immich tidak mendukung downgrade, sehingga upgrade yang tidak Anda pahami tidak dapat dibatalkan.

Apa saja yang sebenarnya perlu saya backup?

Ada 2 hal yang harus dibackup bersama-sama: pg_dump database immich dan seluruh direktori originals UPLOAD_LOCATION. Database menyimpan album, wajah, serta pemetaan aset ke file. Direktori tersebut menyimpan foto sebenarnya. Proses pemulihan memerlukan keduanya, serta image database dengan ekstensi vector yang kompatibel. Lakukan database dump terlebih dahulu, lalu salin file. Uji pemulihan setidaknya sekali pada server pengujian. Backup yang belum diuji bukanlah backup.

Bagaimana cara mengimpor folder foto yang sudah ada?

Mount folder tersebut dalam mode read-only ke dalam container immich-server sebagai volume tambahan, misalnya - /srv/photos:/mnt/media/photos:ro, lalu buat ulang container. Setelah itu, buka Administration → External Libraries, buat sebuah library, dan tambahkan path container /mnt/media/photos. Immich mengindeks file langsung di lokasinya dan tidak pernah mengubah atau menghapusnya. Kesalahan yang paling umum adalah memasukkan path host, bukan path container. Akibatnya, pemindaian tidak menemukan apa pun.