SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-24

Immich self-hosting guide aur RAM requirements

Immich v3 mein pgvecto.rs database aur exit 137 memory kill ke masail ka hal. 6 GB RAM ke sath port 2283 HTTPS setup aur upgrade karne ka sahi tarika seekhein.

آپ کیا بنا رہے ہیں

Immich ایک self-hosted فوٹو اور ویڈیو بیک اپ سروس ہے — جو Google Photos کا ایک حقیقی متبادل ہے۔ اس میں ایک موبائل ایپ ہے جو پس منظر (background) میں آپ کا کیمرہ رول اپ لوڈ کرتی ہے۔ اس میں ٹائم لائن، البمز، فیس ریکگنیشن اور مشین لرننگ سرچ شامل ہے جو بغیر ٹیگنگ کے "beach" یا کسی شخص کو تلاش کر سکتی ہے۔ آپ اسے اپنے VPS پر چلاتے ہیں، اصل فائلیں آپ کے ڈسک پر رہتی ہیں، اور کوئی بھی انہیں بیچنے کے لیے اسکین نہیں کرتا۔

اس کی انسٹالیشن پروجیکٹ کی اپنی Docker Compose فائل کے ذریعے چار کنٹینرز پر مشتمل ہے۔ اس مرحلے میں 10 منٹ لگتے ہیں۔ اس گائیڈ کا باقی حصہ مشکل کام ہے: مشین لرننگ کنٹینر چھوٹے سرور پر زیادہ میموری استعمال کرتا ہے، اصل فائلیں تیزی سے ڈسک بھر دیتی ہیں، موبائل ایپ سادہ HTTP سرور کو قبول نہیں کرتی، اور Immich میں اکثر ایسی تبدیلیاں آتی ہیں جو سسٹم کو توڑ سکتی ہیں، جس سے ایک لاپرواہ docker compose pull آپ کے ڈیٹا بیس کو اسٹارٹ ہونے سے روک سکتا ہے۔ اگر آپ ان چار چیزوں کا خیال رکھیں تو Immich انتہائی مستحکم ہے۔ اگر آپ انہیں نظر انداز کریں گے تو آپ کا پورا ویک اینڈ ضائع ہو سکتا ہے۔

Prerequisites, and the honest gotchas

  • RAM: official docs ke mutabiq kam az kam 6 GB aur behtar karkardagi ke liye 8 GB zaroori hai — 4 GB RAM aur swap ko bilkul kam se kam had samjhein. immich-server aur Postgres containers kam resources istemal karte hain. immich-machine-learning container sab se zyada RAM istemal karta hai — ye search indexes banane ke liye CLIP aur face-recognition models ko RAM mein load karta hai, aur 2 GB RAM wale system par kernel ise band kar deta hai. Agar aapke paas 4 GB RAM hai, tab bhi swap zaroor istemal karein.
  • Disk: apni poori library ke liye zaroorat se thodi zyada jagah rakhein. Aapki original files ki mukammal copy banai jayegi, mazeed ye ke Immich thumbnails aur preview images bhi banata hai (jo taqreeban 10–20% extra jagah leti hain). Agar aapke paas 200 GB photos hain, to 300 GB volume ka istemal karein. Postgres iske muqable mein chota hai.
  • CPU: koi bhi modern KVM VPS kafi hai, lekin CPU par ML (Machine Learning) slow hota hai. Baray data import ke liye smart-search indexing background mein kai ghanton tak chal sakti hai. Ye normal hai; iske liye GPU ki zaroorat nahi hai.
  • Ek domain name jo VPS par point kiya gaya ho. Mobile app ke liye HTTPS endpoint behtar hai, aur aapko iske aage ek reverse proxy ki zaroorat hogi. Ye setup bilkul self-hosted Nextcloud instance with Docker, TLS and backups jaisa hai — Immich, us file server ka photos wala hissa hai.
  • Docker aur Compose plugin installed hona chahiye — Docker Engine aur Docker ke apne apt repository se Compose v2 plugin, jaisa ke our Docker Compose basics guide mein bataya gaya hai.

Step 1: سب سے پہلے swap شامل کریں

چھوٹے VPS پر Immich کے ناکام ہونے کی سب سے بڑی وجہ ML container کا OOM-killed ہونا ہے۔ کرنل کو کام کرنے کے لیے اضافی جگہ فراہم کریں۔

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 اب 4.0Gi کی Swap: لائن دکھانا چاہیے۔ اس سے ML کی رفتار تیز نہیں ہوگی، لیکن یہ 4 GB مشین پر indexing کے دوران container کو بند ہونے سے روکتا ہے۔

Step 2: Official compose اور env حاصل کریں — کاپی کے بجائے اصل فائلیں استعمال کریں

Immich اپنی فائلوں کے اندر سروس ورژنز اور ڈیٹا بیس امیج کو مخصوص (pin) کرتا ہے۔ کسی بلاگ (بشمول اس بلاگ) سے کاپی کیا گیا compose فائل استعمال نہ کریں کیونکہ وہ درست معلومات فراہم نہیں کر سکتا۔ ریلیز اثاثے (release assets) ڈاؤن لوڈ کریں:

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

یہ فائلیں ٹیگ شدہ ریلیز سے آتی ہیں، اس لیے امیج ریفرنسز درست ہوں گے۔ compose فائل میں چار سروسز کی تعریف کی گئی ہے۔ کام شروع کرنے سے پہلے ان کا مقصد جان لینا بہتر ہے:

  • immich-server (ghcr.io/immich-app/immich-server, container immich_server) — یہ API اور web UI ہے، جو port 2283 پر لسن (listen) کرتا ہے۔ یہ آپ کے اپ لوڈز کو /data پر ماؤنٹ کرتا ہے۔
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning, container immich_machine_learning) — CLIP سرچ اور فیس ریکگنیشن (face recognition)۔ یہ ڈاؤن لوڈ شدہ ماڈلز کو model-cache volume میں کیش (cache) کرتا ہے۔ یہ سروس زیادہ میموری استعمال کرتی ہے۔
  • database (container immich_postgres) — VectorChord vector extension کے ساتھ Postgres، جو similarity search کو چلا کر رکھتا ہے۔ امیج ٹیگ کو compose فائل میں ہی ڈائجسٹ (digest) کے ذریعے مخصوص کیا گیا ہے، مثال کے طور پر ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:...۔ پرانے سیٹ اپ میں pgvecto.rs استعمال ہوتا تھا؛ Immich v3.0 میں اس کی سپورٹ ختم کر دی گئی ہے، اس لیے آج آپ جو بھی انسٹال کریں گے وہ VectorChord ہوگا۔ اس ٹیگ کو خود سے کبھی ایڈٹ نہ کریں۔
  • redis (container immich_redis) — job queues کے لیے Valkey/Redis کا ایک instance۔

Step 3: Configure .env — جہاں آپ کی تصاویر اور ڈیٹا بیس موجود ہیں

.env کھولیں اور چار چیزیں سیٹ کریں۔ نشان زدہ لائن کے نیچے موجود تمام چیزیں جیسی ہیں ویسی ہی رہنے دیں۔

# 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

دو اصول جو آپ کو پریشانی سے بچائیں گے۔ UPLOAD_LOCATION کو اپنی بڑی ڈسک کی طرف اشارہ کرنا چاہیے — اگر آپ بعد میں ڈیٹا والیم منسلک کرتے ہیں، تو اسے شروع سے ہی اس کے mount path پر سیٹ کر دیں، کیونکہ بعد میں اسے منتقل کرنے کا مطلب ہے thumbnails کو منتقل کرنا اور asset paths کو اپ ڈیٹ کرنا۔ اور DB_DATA_LOCATION مقامی ڈسک پر ہونا چاہیے: NFS یا SMB شیئر پر Postgres کرپٹ ہو جاتا ہے، اور دستاویزات میں بھی واضح طور پر یہی کہا گیا ہے۔ اگر آپ DB_PASSWORD میں صرف حروف اور ہندسوں کا استعمال کرتے ہیں تو آپ connection-string escaping سے متعلق بگ (bugs) سے بچ جائیں گے۔

Step 4: پہلی بار چلانا اور admin صارف بنانا

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

درست نتیجہ چار کنٹینرز ہے، جو تمام running اور بالآخر healthy ہوں گے:

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

پہلا up کئی gigabytes کی images ڈاؤن لوڈ کرتا ہے، اس لیے اسے وقت دیں۔ sudo docker compose logs -f immich-server کے ذریعے پیش رفت (progress) دیکھیں؛ جب یہ تیار ہو جائے گا تو سرور لاگ میں ظاہر کرے گا کہ یہ port 2283 پر listening کر رہا ہے۔ اب براؤزر میں http://YOUR_SERVER_IP:2283 کھولیں۔ پہلی بار کھولنے پر Getting Started ویزارڈ نظر آئے گا — آپ کا بنایا گیا پہلا اکاؤنٹ admin ہوگا۔ ایک مضبوط پاس ورڈ سیٹ کریں؛ یہ اکاؤنٹ سرور سیٹنگز، صارف مینجمنٹ اور وہ ML کنفیگریشن کا مالک ہوگا جس کی آپ کو بعد میں ضرورت پڑے گی۔

Step 5: موبائل ایپ اور بیک گراؤنڈ بیک اپ

App Store یا Play Store سے "Immich" انسٹال کریں۔ لاگ ان اسکرین پر Server Endpoint URL مانگا جائے گا۔ مکمل URL درج کریں بشمول scheme، مثال کے طور پر https://photos.example.com (ایپ خود بخود /api شامل کر لے گی)۔ اپنے نئے بنائے گئے اکاؤنٹ سے لاگ ان کریں، پھر ایپ کی Backup اسکرین کھولیں، وہ ایلبمز منتخب کریں جن کا بیک اپ لینا ہے (عام طور پر Camera اور Screenshots)، اور Background backup کو فعال کریں۔ iOS میں OS بیک گراؤنڈ بیک اپ کی رفتار کو محدود (throttle) کر دیتا ہے — foreground اپ لوڈز ہمیشہ چلتے رہتے ہیں، جبکہ بیک گراؤنڈ اپ لوڈز تب ہوتے ہیں جب OS اجازت دیتا ہے۔

لوگ اکثر اسی مرحلے پر پھنس جاتے ہیں، اس لیے ایپ کے ساتھ جدوجہد کرنے سے پہلے Step 6 لازمی پڑھ لیں۔

Step 6: HTTPS via a reverse proxy — and the full-URL rule

Mobile app کے لیے HTTPS ضروری ہے۔ port 2283 کے سامنے ایک reverse proxy لگائیں اور وہاں TLS terminate کریں۔ اگر آپ پہلے سے کئی containers چلا رہے ہیں، تو Traefik with automatic TLS for multiple Docker apps سب سے بہتر آپشن ہے — ایک label block photos.example.com کو immich-server container تک route کرتا ہے اور آپ کے لیے certificate خود حاصل کر لیتا ہے۔ اگر آپ nginx استعمال کرنا چاہتے ہیں، تو Let's Encrypt with Certbot and nginx guide آپ کو certificate اور proxy_pass http://127.0.0.1:2283; block فراہم کرے گی۔ Immich کے لیے ایک proxy setting اہم ہے: upload size limit کو بڑھائیں، کیونکہ فون ویڈیوز کا سائز بڑا ہوتا ہے۔ nginx میں یہ server block کے اندر client_max_body_size 50000M; ہے — default 1 MB کی وجہ سے video uploads 413 Request Entity Too Large کے ساتھ reject ہو جاتے ہیں۔

App کا rule یہ ہے: endpoint تک رسائی ممکن ہونی چاہیے اور عملی طور پر وہ HTTPS ہونا چاہیے، کیونکہ http:// endpoints، یا بغیر port کے direct IP، وہ وجوہات ہیں جن کی وجہ سے "the app cannot reach the server" کا error آتا ہے — اس کا تفصیلی ذکر نیچے دیا گیا ہے۔

Step 7: External libraries vs uploads — importing an existing photo tree

Immich میں تصاویر شامل کرنے کے دو مختلف طریقے ہیں۔

  • Uploads وہ اثاثے (assets) ہیں جن کا مالک Immich ہے۔ ایپ یا ویب اپ لوڈر فائل کو UPLOAD_LOCATION میں کاپی کر دیتا ہے۔ Immich ان فائلوں کا نام بدل سکتا ہے، انہیں منتقل کر سکتا ہے یا ڈیلیٹ کر سکتا ہے۔
  • External libraries آپ کے سرور کے کسی فولڈر میں موجود فائلوں کا read-only امپورٹ ہے۔ یہ کوئی پرانا Pictures tree یا NAS export ہو سکتا ہے۔ Immich ان فائلوں کو ان کی اصل جگہ پر انڈیکس کرتا ہے اور ٹائم لائن میں دکھاتا ہے، لیکن یہ اصل فائلوں میں کوئی تبدیلی یا ڈیلیشن نہیں کرتا۔

کسی موجودہ tree کو امپورٹ کرنے کے لیے، اسے سرور container میں read-only موانٹ (mount) کریں۔ immich-server: کے تحت docker-compose.yml کو ایڈٹ کریں اور ایک volume شامل کریں:

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

:ro اس بات کو یقینی بناتا ہے کہ Immich اصل فائلوں کو کبھی نہیں چھو سکتا۔ sudo docker compose up -d کے ساتھ container کو دوبارہ بنائیں، پھر ویب UI میں اپنے avatar → Administration → External Libraries → Create Library پر جائیں، متعلقہ صارف (user) کا انتخاب کریں، Folders کے نیچے Add پر کلک کریں، اور container پاتھ درج کریں — /mnt/media/photos، نہ کہ host پاتھ /srv/photos۔ Scan پر کلک کریں۔ host پاتھ کے بجائے container پاتھ استعمال نہ کرنا external-library کے حوالے سے سب سے بڑی غلطی ہے؛ اس صورت میں اسکین کو کچھ نہیں ملتا اور zero assets رپورٹ ہوتے ہیں۔

Step 8: Immich کی اپ گریڈ کرنے کا طریقہ کار

یہ وہ مرحلہ ہے جو ایک درست طریقے سے چلنے والے Immich اور ایک خراب شدہ سسٹم کے درمیان فرق پیدا کرتا ہے۔ Immich تیزی سے اپ ڈیٹس جاری کرتا ہے اور یہ پرانے ورژن کے لیے فکسز (fixes) یا ڈاؤن گریڈ سپورٹ فراہم نہیں کرتا۔ اگر آپ بغیر سوچے سمجھے v3 ٹیگ کو فالو کریں گے تو آپ کا ڈیٹا بیس خراب ہو سکتا ہے۔ اس کے لیے درج ذیل اصول اپنائیں:

  1. ایک ورژن فکس (Pin) کریں۔ IMMICH_VERSION کو ہمیشہ ایک مخصوص ٹیگ جیسے v3.0.2 پر رکھیں، نہ کہ v3 پر جو ہمیشہ تازہ ترین v3.x ورژن ڈاؤن لوڈ کرتا ہے۔
  2. اپ گریڈ کرنے سے پہلے ہر بار ریلیز نوٹس (release notes) ضرور پڑھیں۔ اس میں اہم تبدیلیاں بتائی جاتی ہیں — خاص طور پر ڈیٹا بیس یا vector-extension سے متعلق تبدیلیاں۔ v3.0 ریلیز اس کی ایک بڑی مثال ہے: اس نے pgvecto.rs کو مکمل طور پر ختم کر دیا تھا، اس لیے جن صارفین کے پاس پرانی extension تھی، انہیں اپ گریڈ کرنے سے پہلے VectorChord مائیگریشن (جو v1.133 میں شروع ہوا تھا) مکمل کرنا ضروری تھا۔
  3. پہلے ڈیٹا بیس کا بیک اپ لیں (Step 9)۔ یہ ہمیشہ کریں، اور اگر ریلیز نوٹس میں ڈیٹا بیس کا ذکر ہو تو اسے لازمی طور پر کریں۔
  4. نیا compose file بھی ڈاؤن لوڈ کریں۔ IMMICH_VERSION صرف server اور ML امیجز کو پن کرتا ہے۔ Postgres امیج کو docker-compose.yml کے اندر digest کے ذریعے پن کیا گیا ہے، اس لیے اگر کسی ورژن کو نئے ڈیٹا بیس extension کی ضرورت ہو تو اس کے ساتھ نیا compose file بھی آتا ہے۔ دونوں ریلیز اثاثے (assets) دوبارہ ڈاؤن لوڈ کریں، اپنی .env ویلیوز دوبارہ لگائیں، اور پھر اپ گریڈ کریں۔
  5. اپنے موبائل کلائنٹس کو بھی اسی وقت اپ ڈیٹ کریں۔ سرور صرف اپنے میچنگ major version کے ساتھ کام کرتا ہے، جبکہ ایپ موجودہ اور پچھلے major version کو سپورٹ کرتی ہے۔ اگر سرور ایپ سے آگے نکل جائے تو فون پر Your app major version is not compatible with the server! نظر آئے گا، اس لیے ایپ کو پہلے اپ ڈیٹ کرنا سب سے محفوظ طریقہ ہے۔

جب آپ کے پاس نئی فائلیں موجود ہوں تو اصل کمانڈز یہ ہیں:

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

Step 9: Backups — a database dump PLUS the originals, and test it

Immich ka backup do cheezon par mushtamil hota hai, aur ek ke baghair doosri cheez be-faida hai. database mein album ka structure, faces, search indexes aur asset se file tak ka map hota hai. originals directory mein asal photos hoti hain. Agar aap ek cheez ko doosri ke baghair restore karenge, to ya to photos baghair kisi tarteeb ke milengi ya phir ek khali shell milega jo missing files ki taraf ishara karega.

Postgres container ke andar se pg_dump ke zariye database ka dump lein — khaas taur par immich database ka, poora cluster nahi:

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

Phir UPLOAD_LOCATION ka backup lein — poora /opt/immich/library tree, aur khaas taur par iske library/, upload/ aur profile/ subfolders — restic, rsync ya borg ke zariye kisi doosri machine ya object storage mein. Pehle database ka backup lein aur phir files ka, taake dump mein aisi photo ka reference na ho jo file backup ne abhi tak copy nahi ki. External libraries ka backup unke asal source par alag se lein; Immich unka malik nahi hai.

Ab wo hissa jo sab log chhor dete hain: restore ko test karein. Restore ek fresh stack par chalna chahiye jiska server pehle kabhi start na hua ho, aur aise Postgres image par jiska vector extension dump ke saath compatible ho — isi liye DB image tag ko kabhi bhi improvising ke zariye select na karein. Ek scratch box par jisme same compose aur .env ho, purana saara data wipe karein, sirf database ko up karein, phir dump load karein:

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

VectorChord database par search_path ka sed rewrite lazmi hai — agar aap ise chhor denge to restore beech mein hi ruk jayega. Jab stack aapki originals files ke saath up ho jaye, to web UI kholein: agar aapki photos aur albums wahan maujood hain, to aapka backup kaam kar raha hai. Agar aapne ye kabhi test nahi kiya, to aapke paas backup nahi hai — sirf ek umeed hai.

Failure modes, with the strings you will see

ML container OOM-killed ہو جاتا ہے۔ sudo docker compose logs immich-machine-learning اچانک رک جاتا ہے، docker compose ps اسے Restarting کے طور پر دکھاتا ہے، اور exit code 137 ہے۔ sudo dmesg | grep -i oom اس کی تصدیق کرتا ہے: Out of memory: Killed process ... (python3)۔ اس کے بعد search اور face jobs رک جاتے ہیں۔ اس کی وجہ models کے لیے RAM کا کم ہونا ہے۔ حل، ترتیب کے مطابق: swap شامل کریں (Step 1)؛ VPS میں مزید RAM دیں؛ یا، اگر آپ واقعی ایسا نہیں کر سکتے، تو Administration → Settings → Machine Learning Settings میں جا کر Smart Search اور Facial Recognition کو بند کر کے ML کو disable کر دیں — آپ کے backups اور albums محفوظ رہیں گے، لیکن content-based search ختم ہو جائے گی۔ compose file سے immich-machine-learning service کو ہٹانے سے بھی یہی نتیجہ حاصل ہوگا۔

Upgrade کے بعد Postgres start ہونے سے انکار کر دیتا ہے۔ server log میں 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. جیسی لائن بار بار آتی ہے — یا پرانے stacks پر The pgvecto.rs extension is not available in this Postgres instance.۔ اس کی وجہ database image کا extension version آپ کے upgraded data سے پرانا ہونا ہے، جو کہ اکثر image tag کو دستی طور پر ایڈٹ کرنے یا پرانی image پر نیا dump restore کرنے سے ہوتا ہے۔ حل یہ ہے کہ وہی Postgres image استعمال کریں جو ڈیٹا کے مطابق ہو — اپنے database کے مطابق release کی compose file استعمال کریں، downgrade نہ کریں، اور صرف compatible image پر ہی restore کریں۔

Mobile app server سے رابطہ نہیں کر پاتی۔ URL درج کرنے کے بعد login screen پر connection error / Server is not reachable ظاہر ہوتا ہے۔ اس کی تین وجوہات ہیں: آپ نے http:// لکھا ہے جبکہ proxy صرف https:// فراہم کرتا ہے؛ آپ نے backend سے براہ راست رابطہ کرنے کی کوشش کی لیکن port نہیں لکھا، جس کی وجہ سے اس نے example.com:2283 کے بجائے example.com (port 443) استعمال کرنے کی کوشش کی؛ یا reverse proxy /api کو forward نہیں کر رہا۔ حل کے لیے مکمل https://photos.example.com URL درج کریں اور پہلے فون کے browser میں اسے چلا کر چیک کریں۔ اگر browser کام کر رہا ہے لیکن app نہیں، تو اس کا مطلب ہے کہ proxy path کو strip کر رہا ہے یا certificate self-signed ہے — app غیر قابل اعتماد (untrusted) certs کو مسترد کر دیتی ہے۔

Import کے دوران disk full ہو جانا۔ Uploads فیل ہونا شروع ہو جاتے ہیں، thumbnails خالی نظر آتے ہیں، اور logs میں ENOSPC: no space left on device یا Postgres سے could not extend file ... No space left on device نظر آتا ہے۔ df -h سے پتہ چلتا ہے کہ UPLOAD_LOCATION volume 100% پر ہے۔ یہی وجہ ہے کہ بڑی library import کرنے سے پہلے disk کا سائز چیک کرنا ضروری ہے۔ ریکور کرنے کے لیے ایک بڑا volume attach کریں، stack کو روکیں، UPLOAD_LOCATION کو اس میں منتقل کریں، .env کو update کریں، اور دوبارہ شروع کریں — یا اگر آپ کا provider اجازت دے تو موجودہ disk کو expand کریں۔ اگر disk بھر جائے تو Postgres پھنس سکتا ہے، اس لیے corruption کا اندازہ لگانے سے پہلے space خالی کریں اور database container کو restart کریں۔

FAQ

Immich کے لیے کتنی RAM اور disk درکار ہے؟

Immich کے آفیشل ریکوائرمنٹس میں کم از کم 6 GB RAM اور 8 GB تجویز کی گئی ہے — چھوٹی لائبریری کے لیے 4 GB swap کے ساتھ عملی حد (floor) ہے۔ کسی بھی صورت میں swap کنفیگر کریں، کیونکہ machine-learning container کے دوران لوڈ بڑھ جاتا ہے۔ disk کے لیے، اپنی مکمل لائبریری کے سائز کے ساتھ تقریباً 10–20% اضافی جگہ مقامی اسٹوریج پر رکھیں — Postgres data directory کو کبھی بھی network share پر نہ رکھیں۔ اگر آپ ابھی دیگر سروسز کے بارے میں فیصلہ کر رہے ہیں، تو 2026 میں کیا self-host کریں اس کے گائیڈ میں Immich کے فوٹ پرنٹ کا موازنہ دیگر سروسز سے کیا گیا ہے۔

کیا میں Immich کو بغیر GPU کے چلا سکتا ہوں؟

جی ہاں۔ machine-learning container CPU پر آسانی سے چلتا ہے — GPU صرف smart-search indexing اور صحیح image variant کے ساتھ video transcoding کی رفتار بڑھاتا ہے۔ CPU پر، بڑی لائبریری کی ابتدائی indexing پس منظر (background) میں کئی گھنٹے لے سکتی ہے، لیکن یہ backups یا browsing کو نہیں روکتی۔ اگر آپ کا سسٹم ML کے لیے بالکل ناکافی ہے، تو آپ admin settings میں Smart Search اور Facial Recognition کو ڈس ایبل کر سکتے ہیں اور باقی تمام فیچرز استعمال کر سکتے ہیں۔

میں Immich کو محفوظ طریقے سے اپ گریڈ کیسے کروں؟

IMMICH_VERSION کو v3.0.2 جیسے کسی مخصوص tag پر پن (pin) کریں، ہر اپ گریڈ سے پہلے release notes پڑھیں، اور سب سے پہلے ڈیٹا بیس کا بیک اپ لیں۔ چونکہ Postgres image IMMICH_VERSION کے بجائے docker-compose.yml کے اندر پن کی گئی ہے، اس لیے اپنے مطلوبہ ورژن سے compose file اور example.env دونوں کو دوبارہ ڈاؤن لوڈ کریں، اپنی values دوبارہ لگائیں، اور پھر docker compose pull && docker compose up -d چلائیں۔ ورژن کو کبھی بھی بغیر کسی کنٹرول کے نہ چھوڑیں — Immich میں breaking changes آتے ہیں اور یہ downgrades کو سپورٹ نہیں کرتا۔

مجھے اصل میں کس چیز کا بیک اپ لینا چاہیے؟

دو چیزیں، ایک ساتھ: immich ڈیٹا بیس کا pg_dump اور مکمل UPLOAD_LOCATION originals directory۔ ڈیٹا بیس میں albums، چہرے اور asset-to-file mapping ہوتی ہے؛ directory میں اصل تصاویر ہوتی ہیں، اور ری اسٹور کرنے کے لیے ان دونوں کے ساتھ ایک compatible vector extension والا database image درکار ہوتا ہے۔ پہلے database dump کریں اور پھر file copy کریں، اور کم از کم ایک بار کسی علیحدہ باکس پر ری اسٹور کو ٹیسٹ کریں — بغیر ٹیسٹ کیا ہوا بیک اپ، بیک اپ نہیں ہے۔

میں اپنے موجودہ فوٹو فولڈر کو امپورٹ کیسے کروں؟

اس فولڈر کو immich-server container میں ایک اضافی volume (مثال کے طور پر - /srv/photos:/mnt/media/photos:ro) کے طور پر read-only موانٹ (mount) کریں، container کو دوبارہ بنائیں، پھر Administration → External Libraries میں جا کر ایک لائبریری بنائیں اور container path /mnt/media/photos شامل کریں۔ Immich فائلوں کو وہیں انڈیکس کرتا ہے اور انہیں کبھی تبدیل یا ڈیلیٹ نہیں کرتا۔ سب سے عام غلطی host path کے بجائے container path درج کرنا ہے، جس کی وجہ سے اسکین کو کچھ نہیں مل پاتا۔