SSD Nodes Learn Hosting plans →
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-08-28

Immich کے لیے 6 GB RAM اور محفوظ upgrades

Immich کے لیے اصل RAM ضرورت، HTTPS کے پیچھے port 2283، exit 137 memory kill، اور pgvecto.rs database پر Immich v3 کے نہ چلنے کی وجہ جانیں۔ Restore steps شامل ہیں۔

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

Immich ایک self-hosted تصاویر اور ویڈیوز کی backup service ہے، اور Google Photos کا حقیقی متبادل ہے۔ اس کی phone app پس منظر میں آپ کے camera roll سے تصاویر upload کرتی ہے۔ اس میں timeline، albums، face recognition اور machine-learning search شامل ہیں، جو آپ کے کچھ tag کیے بغیر "beach" یا کسی شخص کو تلاش کر سکتی ہے۔ آپ اسے اپنے زیرِملکیت VPS پر چلاتے ہیں، اصل files آپ کی disk پر رہتی ہیں، اور کوئی انہیں آپ کو چیزیں فروخت کرنے کے لیے scan نہیں کرتا۔ اگر آپ اب بھی اسے دوسرے نمایاں امیدوار سے موازنہ کر رہے ہیں تو ہماری PhotoPrism اور Immich کا تقابلی جائزہ ان کی RAM کی کم از کم ضروریات، phone apps اور backup commands کو ساتھ رکھتا ہے۔

Installation کے لیے project کی اپنی Docker Compose file سے چار containers استعمال ہوتے ہیں۔ یہ مرحلہ دس منٹ لیتا ہے۔ اس guide میں اصل پیچیدگی اس کے بعد شروع ہوتی ہے: machine-learning container کم وسائل والی machine پر بہت زیادہ memory استعمال کرتا ہے، originals تیزی سے disk بھر دیتے ہیں، mobile app plain-HTTP server قبول نہیں کرتی، اور Immich اتنی کثرت سے breaking changes جاری کرتا ہے کہ ایک لاپرواہ docker compose pull آپ کے database کو start ہونے سے روک سکتا ہے۔ ان چاروں باتوں کو سنجیدگی سے سنبھالیں تو Immich انتہائی قابلِاعتماد رہتا ہے۔ انہیں نظرانداز کریں تو پورا weekend ضائع ہو سکتا ہے۔

شرائطِ پیشگی اور اہم عملی نکات

  • RAM: official docs میں کم از کم 6 GB اور تجویز کردہ مقدار 8 GB ہے؛ 4 GB RAM اور swap کو مطلق کم از کم حد سمجھیں۔ immich-server اور Postgres containers زیادہ وسائل استعمال نہیں کرتے۔ immich-machine-learning container زیادہ RAM استعمال کرتا ہے، کیونکہ یہ search indexes بنانے کے لیے CLIP اور face-recognition models کو RAM میں load کرتا ہے۔ 2 GB والے server پر kernel اسے ختم کر دیتا ہے۔ اگر آپ کے پاس 4 GB RAM بھی ہو تو swap شامل کریں۔
  • Disk: اپنی پوری library کے لیے گنجائش مقرر کریں، پھر کچھ اضافی جگہ رکھیں۔ آپ کی اصل files مکمل طور پر copy ہوتی ہیں۔ اس کے علاوہ Immich thumbnails اور preview images بھی بناتا ہے، جو عموماً مزید 10–20% جگہ لیتی ہیں۔ 200 GB کی photo collection کے لیے 300 GB volume درکار ہوگا۔ اس کے مقابلے میں Postgres کم جگہ لیتا ہے۔
  • CPU: کوئی بھی جدید KVM VPS کافی ہے، لیکن CPU پر ML سست ہوتا ہے۔ بڑی import کے لیے smart-search indexing پس منظر میں کئی گھنٹے چل سکتی ہے۔ یہ معمول کی بات ہے؛ اس کے لیے GPU ضروری نہیں۔
  • ایک domain name جو VPS کی طرف point کیا گیا ہو۔ Mobile app HTTPS endpoint کو ترجیح دیتی ہے، اور آپ کو سامنے reverse proxy درکار ہوگا۔ یہ setup اسی طرز کا ہے جیسے Docker، TLS اور backups کے ساتھ self-hosted Nextcloud instance؛ Immich اس files server کا photos counterpart ہے۔
  • Docker اور Compose plugin پہلے سے installed ہوں۔ Docker Engine کے ساتھ Docker کے اپنے apt repository سے Compose v2 plugin استعمال کریں، جیسا کہ ہماری Docker Compose basics guide میں مکمل طور پر بیان کیا گیا ہے۔

پہلا مرحلہ: کسی بھی دوسرے کام سے پہلے swap شامل کریں

چھوٹے VPS پر Immich کی سب سے عام خرابی ML container کا OOM-killed ہو جانا ہے۔ پہلے kernel کو عارضی طور پر استعمال کرنے کے لیے اضافی گنجائش دیں۔

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 بند ہونے سے رک جائے گا۔

مرحلہ 2: آفیشل compose اور env فائلیں حاصل کریں، نقل استعمال نہ کریں

Immich اپنی فراہم کردہ فائلوں میں سروس کے versions اور، خاص طور پر، database image کو pin کرتا ہے۔ کسی blog، بشمول اس guide، سے compose file کو اپنی بنیادی source of truth کے طور پر paste نہ کریں۔ release assets download کریں:

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

یہ فائلیں tagged release سے حاصل ہوتی ہیں، اس لیے image references ایک دوسرے سے مطابقت رکھتے ہیں۔ compose file میں چار services کی تعریف ہے۔ کسی بھی تبدیلی سے پہلے یہ سمجھنا مفید ہے کہ ہر service کیا کرتی ہے:

  • immich-server (ghcr.io/immich-app/immich-server، container immich_server)، API اور web UI ہے اور port 2283 پر listening کرتی ہے۔ یہ آپ کے uploads کو /data پر mount کرتی ہے۔
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning، container immich_machine_learning)، CLIP search اور face recognition فراہم کرتی ہے۔ یہ download کیے گئے models کو model-cache volume میں cache کرتی ہے۔ اسے سب سے زیادہ memory درکار ہوتی ہے۔
  • database (container immich_postgres)، VectorChord vector extension کے ساتھ Postgres ہے، جو similarity search چلاتا ہے۔ image tag کو compose file میں براہِ راست digest کے ذریعے pin کیا گیا ہے، مثلاً ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:...۔ پرانے setups میں pgvecto.rs استعمال ہوتا تھا؛ Immich v3.0 میں اس کی support ختم کر دی گئی، اس لیے آج install کی جانے والی ہر چیز VectorChord استعمال کرتی ہے۔ اس tag میں کبھی دستی ترمیم نہ کریں۔
  • redis (container immich_redis)، job queues کے لیے Valkey/Redis instance ہے۔

مرحلہ 3: .env کو ترتیب دیں، جہاں آپ کی تصاویر اور database موجود ہیں

.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 کو آپ کی بڑی disk کی طرف اشارہ کرنا چاہیے۔ اگر آپ بعد میں data volume attach کرتے ہیں تو اسے ابتدا ہی سے اس کے mount path پر مقرر کریں، کیونکہ بعد میں اسے منتقل کرنے کے لیے thumbnails منتقل کرنا اور asset paths کو update کرنا پڑتا ہے۔ اور DB_DATA_LOCATION local disk پر ہونا ضروری ہے: NFS یا SMB share پر Postgres خراب ہو جاتا ہے، اور دستاویزات میں یہ بات واضح طور پر لکھی ہے۔ DB_PASSWORD میں صرف حروف اور اعداد استعمال کرنے سے connection-string escaping کی ایک قسم کی خرابیوں سے بچا جا سکتا ہے۔

مرحلہ 4: پہلی بار چلانا اور منتظم صارف بنانا

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

درست نتیجہ چار containers ہیں، جو سب running ہوں اور آخرکار healthy ہو جائیں:

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

پہلا up کئی gigabytes کی images download کرتا ہے، اس لیے اسے وقت دیں۔ sudo docker compose logs -f immich-server کے ذریعے پیش رفت دیکھیں؛ تیار ہونے کے بعد server logs میں یہ درج ہوتا ہے کہ وہ port 2283 پر listening کر رہا ہے۔ اب browser میں http://YOUR_SERVER_IP:2283 کھولیں۔ پہلی بار کھولنے پر Getting Started wizard ظاہر ہوتا ہے۔ آپ جو پہلا account بناتے ہیں، وہی admin ہوتا ہے۔ مضبوط password مقرر کریں؛ اس account کے پاس server settings، user management اور وہ ML configuration ہوتی ہے جس کی آپ کو بعد میں ضرورت ہوگی۔

مرحلہ 5: موبائل ایپ اور پس منظر میں بیک اپ

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

لوگ عموماً اسی مرحلے پر رک جاتے ہیں، اس لیے ایپ کے ساتھ مسئلہ حل کرنے سے پہلے Step 6 پڑھیں۔

مرحلہ 6: reverse proxy کے ذریعے HTTPS، اور مکمل URL کا اصول

موبائل ایپ HTTPS کا تقاضا کرتی ہے۔ 2283 port کے سامنے reverse proxy رکھیں اور وہیں TLS termination کریں۔ اگر آپ پہلے ہی متعدد containers چلا رہے ہیں تو متعدد Docker ایپس کے لیے automatic TLS والا Traefik سب سے صاف ستھرا انتخاب ہے۔ ایک label block photos.example.com کو immich-server container تک route کرتا ہے اور آپ کے لیے certificate حاصل کرتا ہے۔ اگر آپ nginx کو ترجیح دیتے ہیں تو Certbot اور nginx کے ساتھ Let's Encrypt گائیڈ آپ کے لیے certificate اور proxy_pass http://127.0.0.1:2283; block تیار کر دیتی ہے۔

جب یہ proxy موجود ہو جائے تو اگلی service شامل کرنے کے لیے عموماً صرف نیا subdomain بنانا ہوتا ہے۔ اسی طرح Jellyfin کے لیے 90s video store skin، Halcyon اسی server پر Immich کے ساتھ چل سکتی ہے۔ یہی بات ایک self-hosted HarnessRouter جو Codex اور Claude Code کو ایک API کے پیچھے رکھتا ہے پر بھی لاگو ہوتی ہے۔ یہ جان بوجھ کر loopback پر bind ہوتا ہے اور صرف اسی وقت قابل رسائی بنتا ہے جب اس کے سامنے proxy TLS termination کرے۔ اس لیے subdomain کو اس کی طرف point کرنے سے پہلے default login تبدیل کریں۔

تاہم ہر container کو public hostname دینا ضروری نہیں۔ ایک self-hosted open-kritt security scanner جیسا صرف administrators کے لیے مخصوص tool proxy سے مکمل طور پر باہر رکھنا بہتر ہے۔ اس کے UI کو صرف ان نادر مواقع پر SSH tunnel کے ذریعے کھولیں جب ضرورت ہو۔ کچھ سروسز proxy استعمال نہیں کرتیں کیونکہ HTTP ان کا protocol ہی نہیں ہے۔ ایک self-hosted RustDesk relay server اس کی واضح مثال ہے۔ یہ چند raw TCP اور UDP ports پر listen کرتا ہے اور اسے subdomain کے بجائے firewall rules درکار ہوتے ہیں۔

Immich کے لیے proxy کی ایک setting اہم ہے: upload size limit بڑھائیں، کیونکہ phone videos بڑی ہوتی ہیں۔ nginx میں server block کے اندر client_max_body_size 50000M; شامل کریں۔ default 1 MB حد video uploads کو 413 Request Entity Too Large کے ساتھ مسترد کر دیتی ہے۔

ایپ کا نافذ کردہ اصول یہ ہے: endpoint قابل رسائی ہونا چاہیے اور عملی طور پر HTTPS استعمال کرنا چاہیے۔ http:// endpoints، یا ایسا direct IP جس میں port شامل نہ ہو، عموماً "ایپ server تک نہیں پہنچ سکتی" کی وجہ بنتے ہیں۔ ذیل میں اسے ایک نامزد failure کے طور پر بیان کیا گیا ہے۔

مرحلہ 7: External libraries بمقابلہ uploads، موجودہ photo tree درآمد کرنا

Immich میں photos شامل کرنے کے دو طریقے ہیں، اور یہ ایک جیسے نہیں ہیں۔

  • Uploads وہ assets ہیں جن کی ملکیت Immich کے پاس ہوتی ہے۔ ایپ یا web uploader فائل کو UPLOAD_LOCATION میں copy کرتا ہے۔ Immich ان کے نام بدل سکتا ہے، انہیں منتقل کر سکتا ہے اور حذف کر سکتا ہے۔
  • External libraries ان فائلوں کا read-only import ہیں جو پہلے ہی آپ کے server کے کسی folder، پرانے Pictures tree یا NAS export میں موجود ہوتی ہیں۔ Immich انہیں اسی جگہ index کرتا ہے اور timeline میں دکھاتا ہے، لیکن اصل فائلوں میں کبھی ترمیم نہیں کرتا اور نہ انہیں حذف کرتا ہے۔

موجودہ tree درآمد کرنے کے لیے اسے server 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 دوبارہ بنائیں۔ اس کے بعد web UI میں اپنے avatar → Administration → External Libraries → Create Library پر جائیں، مالک user منتخب کریں، Folders کے تحت Add پر click کریں، اور container path /mnt/media/photos درج کریں، host path /srv/photos نہیں۔ Scan پر click کریں۔ container path کے بجائے host path استعمال کرنا external library کی سب سے عام غلطی ہے؛ scan کو کوئی فائل نہیں ملتی اور یہ zero assets رپورٹ کرتا ہے۔

مرحلہ 8: Immich کے مطلوبہ upgrade discipline

یہ وہ مرحلہ ہے جو مستحکم Immich کو خراب Immich سے الگ کرتا ہے۔ Immich تیزی سے releases جاری کرتا ہے اور fixes کو پچھلے versions میں backport نہیں کرتا، نہ ہی downgrades کو support کرتا ہے۔ floating v3 tag کو اندھا دھند follow کرنے سے بالآخر آپ کا database خراب ہو جائے گا۔ یہی pin-then-read-the-notes عادت server پر موجود ہر long-lived container کے لیے اپنانا مفید ہے۔ اسی لیے self-hosted KiroCrew agent کو ایک معلوم اور قابلِ اعتماد tag پر pin کیا جاتا ہے، بجائے اس کے کہ اگلے restart پر وہ خود بخود تبدیل ہو جائے۔ طریقہ کار یہ ہے:

  1. ایک version pin کریں۔ IMMICH_VERSION کو v3.0.2 جیسے concrete tag پر set رکھیں، نہ کہ floating v3 پر، جو ہمیشہ تازہ ترین v3.x کھینچتا ہے۔
  2. ہر upgrade سے پہلے release notes ضرور پڑھیں۔ Breaking changes، خاص طور پر database یا vector-extension میں تبدیلیاں، وہیں بیان کی جاتی ہیں۔ v3.0 release اس کی واضح مثال ہے: اس نے pgvecto.rs کو مکمل طور پر ہٹا دیا۔ اس لیے جو صارف اب بھی پرانی extension استعمال کر رہے تھے، انہیں آگے بڑھنے سے پہلے VectorChord migration مکمل کرنا پڑی، جو v1.133 میں متعارف ہوئی تھی۔
  3. سب سے پہلے database کا backup لیں (مرحلہ 9)۔ یہ ہمیشہ ضروری ہے، لیکن جب release notes میں database کا ذکر ہو تو خاص طور پر ضروری ہے۔
  4. نئی compose file بھی حاصل کریں۔ IMMICH_VERSION صرف server اور ML images کو pin کرتا ہے۔ Postgres image کو docker-compose.yml کے اندر digest کے ذریعے pin کیا جاتا ہے، اس لیے جس version کو نئی database extension درکار ہو، اس کے ساتھ نئی compose file بھی جاری کی جاتی ہے۔ دونوں release assets دوبارہ download کریں، اپنی .env values دوبارہ apply کریں، پھر upgrade کریں۔
  5. اسی دوران اپنے mobile clients بھی update کریں۔ Server صرف اپنے matching major version کے ساتھ کام کرتا ہے، جبکہ app موجودہ اور پچھلے major version کو support کرتی ہے۔ اگر server app سے آگے نکل جائے تو app update ہونے تک فون پر Your app major version is not compatible with the server! دکھائی دے گا۔ اس لیے app کو پہلے update کرنا زیادہ محفوظ ہے۔

نئی files رکھنے کے بعد اصل commands یہ ہیں:

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

مرحلہ 9: بیک اپ، database dump کے ساتھ originals، اور اس کی جانچ

Immich کا بیک اپ دو چیزوں پر مشتمل ہوتا ہے، اور ایک کے بغیر دوسرا بے فائدہ ہے۔ database میں album structure، faces، search indexes اور asset سے file تک کا نقشہ محفوظ ہوتا ہے۔ originals directory میں اصل تصاویر محفوظ ہوتی ہیں۔ ایک کو دوسرے کے بغیر بحال کریں تو یا تو تنظیم کے بغیر تصاویر ملیں گی، یا missing files کی طرف اشارہ کرنے والا خالی ڈھانچا۔

Postgres container کے اندر سے pg_dump کے ذریعے database کا dump بنائیں۔ خاص طور پر immich database کا، پورے 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

اس کے بعد UPLOAD_LOCATION، یعنی پورے /opt/immich/library tree، اور خاص طور پر اس کے library/، upload/ اور profile/ subfolders کا بیک اپ restic، rsync یا borg کے ذریعے کسی دوسرے machine یا object storage پر بنائیں۔ پہلے database کا dump بنائیں اور پھر files کا بیک اپ لیں، تاکہ dump میں ایسی photo کا حوالہ شامل نہ ہو جسے file backup نے ابھی copy نہ کیا ہو۔ External libraries کا بیک اپ ان کے اصل source پر الگ سے لیں؛ Immich ان کا مالک نہیں ہوتا۔

اب وہ مرحلہ جسے سب چھوڑ دیتے ہیں: restore کی جانچ کریں۔ Restore ایک fresh stack پر چلنا چاہیے، جس کا server پہلے کبھی start نہ ہوا ہو، اور ایسے Postgres image پر جس کی vector extension dump کے ساتھ compatible ہو۔ اسی لیے DB image tag کا کبھی اندازے سے انتخاب نہ کریں۔ اسی compose اور .env کے ساتھ ایک scratch box پر کوئی بھی پرانا state مٹا دیں، صرف database کو start کریں، پھر dump load کریں:

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 پر sed کی search_path rewriting اختیاری نہیں ہے۔ اسے چھوڑنے سے restore درمیان میں abort ہو جاتا ہے۔ جب آپ کے originals کے ساتھ stack دوبارہ start ہو جائے تو web UI کھولیں۔ اگر آپ کی photos اور albums موجود ہوں تو آپ کا بیک اپ درست ہے۔ اگر آپ نے یہ عمل کبھی نہیں چلایا تو آپ کے پاس بیک اپ نہیں، صرف امید ہے۔

خرابی کی صورتیں، اور وہ strings جو آپ دیکھیں گے

ML container کو OOM-kill کر دیا جاتا ہے۔ 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 کے مطابق search دستیاب نہیں رہے گی۔ compose file سے immich-machine-learning service حذف کرنے کا بھی یہی اثر ہوتا ہے۔

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

Mobile app server تک نہیں پہنچ سکتی۔ URL درج کرنے کے بعد login screen پر connection error / Server is not reachable دکھائی دیتا ہے۔ اس کی 3 وجوہات ہیں: آپ نے http:// درج کیا، جبکہ proxy صرف https:// فراہم کرتا ہے؛ آپ backend سے براہ راست connect ہوئے لیکن port نہیں لکھا، اس لیے app نے 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 غیر معتبر certificates مسترد کر دیتی ہے۔

import کے دوران disk بھر جاتی ہے۔ 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 capacity مقرر کریں۔ بحالی کے لیے بڑا volume attach کریں، stack روکیں، UPLOAD_LOCATION کو اس volume پر منتقل کریں، .env update کریں، اور stack دوبارہ شروع کریں۔ اگر provider اجازت دے تو موجودہ disk کو expand بھی کر سکتے ہیں۔ اگر disk بھر جائے تو Postgres عارضی طور پر رک سکتا ہے، اس لیے جگہ خالی کریں اور corruption کا شبہ کرنے سے پہلے database container restart کریں۔

FAQ

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

Immich کی سرکاری ضروریات کم از کم 6 GB RAM اور تجویز کردہ طور پر 8 GB RAM ہیں۔ چھوٹی library کے لیے swap کے ساتھ 4 GB عملی کم از کم حد ہے، اور ہر صورت میں swap configure کریں، کیونکہ machine-learning container ہی سب سے زیادہ memory استعمال کرتا ہے۔ disk کے لیے اپنی پوری library کے حجم کے علاوہ generated thumbnails اور previews کے لیے تقریباً 10–20% اضافی جگہ رکھیں۔ یہ data local storage پر رکھیں، اور Postgres data directory کو کبھی network share پر نہ رکھیں۔ اگر آپ ابھی یہ طے کر رہے ہیں کہ اور کیا چلانا ہے تو 2026 میں self-host کرنے والی چیزوں کی guide میں Immich کے footprint کا دیگر services کے ساتھ موازنہ موجود ہے۔

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

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

میں Immich کو محفوظ طریقے سے کیسے upgrade کروں؟

IMMICH_VERSION کو v3.0.2 جیسے کسی واضح tag پر pin کریں، ہر upgrade سے پہلے release notes پڑھیں، اور پہلے database کا backup لیں۔ چونکہ Postgres image کو IMMICH_VERSION کے ذریعے نہیں بلکہ docker-compose.yml کے اندر pin کیا جاتا ہے، اس لیے اپنے مطلوبہ release سے compose file اور example.env دونوں دوبارہ download کریں، اپنی values دوبارہ apply کریں، پھر docker compose pull && docker compose up -d چلائیں۔ version کو unattended طور پر کبھی float نہ ہونے دیں۔ Immich breaking changes جاری کرتا ہے اور downgrade کو support نہیں کرتا۔

مجھے بالکل کیا backup کرنا چاہیے؟

دو چیزیں، اور دونوں ساتھ: immich database کا pg_dump اور پورے UPLOAD_LOCATION originals directory کا backup۔ database میں albums، faces اور asset-to-file mapping محفوظ ہوتی ہے؛ directory میں اصل photos محفوظ ہوتی ہیں۔ restore کے لیے دونوں کے علاوہ compatible vector extension والی database image بھی درکار ہوتی ہے۔ پہلے database dump لیں اور اس کے بعد files copy کریں۔ کم از کم ایک بار scratch server پر restore کی جانچ کریں، کیونکہ جس backup کا restore test نہ کیا گیا ہو وہ backup نہیں ہوتا۔

میں اپنی موجودہ photo folder کیسے import کروں؟

folder کو extra volume کے طور پر immich-server container میں read-only mount کریں، مثلاً - /srv/photos:/mnt/media/photos:ro، پھر container recreate کریں۔ اس کے بعد Administration → External Libraries میں library بنائیں اور container path /mnt/media/photos شامل کریں۔ Immich files کو اسی جگہ index کرتا ہے اور انہیں کبھی modify یا delete نہیں کرتا۔ عام ترین غلطی host path درج کرنا ہے، container path نہیں۔ اس صورت میں scan کو کوئی file نہیں ملتی۔