SSD Nodes Learn Hosting plans →
गाइड Matt Connorलेखक: Matt Connor · अपडेट किया गया: 2026-08-28

Immich self-hosting: 6 GB RAM और सुरक्षित अपग्रेड गाइड

Immich के लिए 6 GB RAM की आवश्यकता, port 2283 और HTTPS सेटअप, exit 137 मेमोरी एरर का समाधान और pgvecto.rs डेटाबेस के साथ v3 वर्जन की समस्याओं को ठीक करने के स्टेप्स जानें।

आप क्या बना रहे हैं

Immich एक self-hosted फोटो और वीडियो बैकअप सर्विस है, जो Google Photos का एक वास्तविक विकल्प है। इसमें एक फोन ऐप है जो बैकग्राउंड में आपके कैमरा रोल को अपलोड करता है। इसमें टाइमलाइन, एल्बम, फेस रिकग्निशन और मशीन-लर्निंग सर्च की सुविधा है, जो बिना किसी टैगिंग के "beach" या किसी व्यक्ति को खोज लेती है। आप इसे अपने VPS पर चलाते हैं, ओरिजिनल फाइलें आपकी डिस्क पर रहती हैं, और कोई भी उन्हें स्कैन करके आपको विज्ञापन नहीं दिखाता। यदि आप अभी भी इसे दूसरे संभावित विकल्प के साथ तौल रहे हैं, तो हमारा PhotoPrism और Immich तुलनात्मक लेख उनके RAM उपयोग, फोन ऐप्स और बैकअप commands की तुलना करता है।

इसका इंस्टॉलेशन प्रोजेक्ट की अपनी Docker Compose फाइल से चार कंटेनर्स के माध्यम से होता है। उस हिस्से में दस मिनट लगते हैं। इस गाइड का बाकी हिस्सा उन चुनौतियों के बारे में है जहाँ कठिनाई आती है: मशीन-लर्निंग कंटेनर छोटे सर्वर पर बहुत अधिक मेमोरी लेता है, ओरिजिनल फाइलें डिस्क को तेजी से भरती हैं, मोबाइल ऐप plain-HTTP सर्वर से कनेक्ट नहीं होता, और Immich में अक्सर ऐसे बदलाव (breaking changes) आते हैं कि एक लापरवाह docker compose pull आपके डेटाबेस को स्टार्ट होने से रोक सकता है। इन चार बातों को गंभीरता से लें, तो Immich बेहद भरोसेमंद है। यदि आप इन्हें नजरअंदाज करेंगे, तो आपका काफी समय बर्बाद हो सकता है।

आवश्यक शर्तें और कुछ महत्वपूर्ण सावधानियां

  • RAM: आधिकारिक दस्तावेज़ों में न्यूनतम 6 GB और अनुशंसित 8 GB RAM बताई गई है, लेकिन 4 GB के साथ swap का उपयोग करना ही न्यूनतम सीमा है। immich-server और Postgres containers बहुत कम संसाधन लेते हैं। immich-machine-learning container सबसे अधिक RAM का उपयोग करता है, क्योंकि यह search indexes बनाने के लिए CLIP और face-recognition models को RAM में लोड करता है। 2 GB वाले सर्वर पर kernel इसे बंद (kill) कर देता है। यदि आपके पास 4 GB RAM भी है, तब भी swap अवश्य जोड़ें।
  • Disk: अपनी पूरी लाइब्रेरी के आकार के अनुसार डिस्क चुनें, और थोड़ा अतिरिक्त स्थान रखें। आपकी मूल फ़ाइलें पूरी तरह कॉपी की जाती हैं, और इसके अलावा Immich thumbnails और preview images भी बनाता है (जो मूल आकार का लगभग 10–20% अतिरिक्त होता है)। 200 GB के फोटो कलेक्शन के लिए 300 GB का volume रखें। इसकी तुलना में Postgres बहुत कम जगह लेता है।
  • CPU: कोई भी आधुनिक KVM VPS पर्याप्त है, लेकिन CPU पर ML (Machine Learning) धीमा चलता है। बड़े import के दौरान smart-search indexing बैकग्राउंड में घंटों तक चल सकती है। यह सामान्य है; इसके लिए GPU की आवश्यकता नहीं है।
  • एक domain name जो VPS पर पॉइंट करता हो। मोबाइल ऐप HTTPS endpoint को प्राथमिकता देता है, और आपको इसके सामने एक reverse proxy की आवश्यकता होगी। यह सेटअप Docker, TLS और backups के साथ self-hosted Nextcloud instance के समान है; Immich उस फ़ाइल सर्वर का फोटो-आधारित विकल्प है।
  • Docker और Compose plugin इंस्टॉल होना चाहिए। Docker Engine और Compose v2 plugin को Docker की आधिकारिक apt repository से इंस्टॉल करें, जैसा कि हमारी Docker Compose बेसिक्स गाइड में बताया गया है।

चरण 1: सबसे पहले 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 में अब Swap: की एक 4.0Gi लाइन दिखनी चाहिए। इससे ML की गति तो नहीं बढ़ेगी, लेकिन यह 4 GB RAM वाली मशीन पर इंडेक्सिंग के दौरान container को बंद होने से बचा लेगा।

चरण 2: आधिकारिक compose और env फाइलें प्राप्त करें, किसी अन्य कॉपी का उपयोग न करें

Immich अपने सर्विस वर्ज़न और सबसे महत्वपूर्ण रूप से, अपने डेटाबेस इमेज को उन फाइलों के अंदर पिन करता है जिन्हें वह शिप करता है। किसी ब्लॉग (इस ब्लॉग सहित) से compose फाइल को कॉपी करके उसे अपना एकमात्र स्रोत न मानें। रिलीज एसेट्स को यहाँ से डाउनलोड करें:

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, कंटेनर immich_server), API और वेब UI, जो पोर्ट 2283 पर लिसन करता है। यह आपके अपलोड्स को /data पर माउंट करता है।
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning, कंटेनर immich_machine_learning), CLIP सर्च और फेस रिकग्निशन। यह डाउनलोड किए गए मॉडल्स को model-cache वॉल्यूम में कैश करता है। यह सबसे अधिक मेमोरी का उपयोग करने वाली सर्विस है।
  • database (कंटेनर immich_postgres), VectorChord वेक्टर एक्सटेंशन के साथ Postgres, जो सिमिलरिटी सर्च को पावर देता है। इमेज टैग को सीधे compose फाइल में डाइजेस्ट द्वारा पिन किया गया है, उदाहरण के लिए ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:...। पुराने सेटअप pgvecto.rs का उपयोग करते थे; Immich v3.0 में इसके लिए सपोर्ट हटा दिया गया है, इसलिए आज आप जो भी इंस्टॉल करेंगे वह VectorChord ही होगा। इस टैग को कभी भी मैन्युअल रूप से एडिट न करें।
  • redis (कंटेनर immich_redis), जॉब क्यू के लिए एक Valkey/Redis इंस्टेंस।

चरण 3: .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 को आपकी बड़ी डिस्क की ओर इंगित करना चाहिए। यदि आप बाद में डेटा वॉल्यूम जोड़ते हैं, तो इसे शुरू से ही इसके माउंट पाथ पर सेट करें, क्योंकि बाद में इसे बदलने का मतलब है थंबनेल को स्थानांतरित करना और एसेट पाथ को अपडेट करना। और DB_DATA_LOCATION को लोकल डिस्क पर होना चाहिए: NFS या SMB शेयर पर Postgres करप्ट हो जाता है, और दस्तावेज़ों में यह स्पष्ट रूप से लिखा है। यदि आप DB_PASSWORD में केवल अक्षरों और अंकों का उपयोग करते हैं, तो आप कनेक्शन-स्ट्रिंग एस्केपिंग बग्स की एक श्रेणी से बच जाते हैं।

चरण 4: पहली बार चलाना और एडमिन यूजर बनाना

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 कई गीगाबाइट की इमेजेज पुल (pull) करता है, इसलिए इसे समय दें। sudo docker compose logs -f immich-server के साथ प्रगति पर नजर रखें; तैयार होने पर सर्वर लॉग में यह दिखाई देगा कि यह पोर्ट 2283 पर लिसन (listen) कर रहा है। अब ब्राउज़र में http://YOUR_SERVER_IP:2283 खोलें। पहली बार विजिट करने पर एक Getting Started विज़ार्ड दिखाई देगा, आपके द्वारा बनाया गया पहला अकाउंट एडमिन होगा। एक मजबूत पासवर्ड सेट करें; यह अकाउंट सर्वर सेटिंग्स, यूजर मैनेजमेंट और उस ML कॉन्फ़िगरेशन का मालिक होता है जिसकी आपको बाद में आवश्यकता होगी।

Step 5: मोबाइल ऐप और बैकग्राउंड बैकअप

App Store या Play Store से "Immich" इंस्टॉल करें। लॉगिन स्क्रीन पर आपसे Server Endpoint URL मांगा जाएगा। पूरा URL दर्ज करें, जिसमें स्कीम भी शामिल हो, उदाहरण के लिए https://photos.example.com (ऐप खुद /api जोड़ देता है)। अभी बनाए गए अकाउंट से लॉगिन करें, फिर ऐप की Backup स्क्रीन खोलें, सुरक्षित रखने के लिए एल्बम चुनें (आमतौर पर Camera और Screenshots), और Background backup को इनेबल करें। iOS पर बैकग्राउंड बैकअप OS द्वारा सीमित (throttled) होता है; foreground अपलोड हमेशा चलते हैं, जबकि बैकग्राउंड अपलोड तब होते हैं जब OS इसकी अनुमति देता है।

यहीं पर अक्सर लोग अटक जाते हैं, इसलिए ऐप के साथ संघर्ष करने से पहले Step 6 पढ़ें।

चरण 6: रिवर्स प्रॉक्सी के माध्यम से HTTPS, और पूर्ण-URL नियम

मोबाइल app को HTTPS की आवश्यकता है। port 2283 के सामने reverse proxy रखें और वहीं TLS termination करें। यदि आप पहले से कई containers चला रहे हैं, तो कई Docker apps के लिए automatic TLS वाला Traefik सबसे व्यवस्थित विकल्प है। एक label block photos.example.com को immich-server container तक route करता है और आपके लिए certificate प्राप्त करता है। यदि आप nginx पसंद करते हैं, तो Certbot और nginx के साथ Let's Encrypt guide आपको certificate और proxy_pass http://127.0.0.1:2283; block देती है। यह proxy तैयार हो जाने के बाद अगली service जोड़ने के लिए मुख्यतः नया subdomain बनाना होता है। इसी तरह Jellyfin के लिए 90s video store skin Halcyon जैसे media front end को उसी box पर Immich के साथ चलाया जा सकता है। यही बात Codex और Claude Code को एक API के पीछे रखने वाले self-hosted HarnessRouter पर भी लागू होती है। यह जानबूझकर loopback पर bind होता है और proxy द्वारा TLS termination करने के बाद ही पहुंच योग्य बनता है। इसलिए इसके सामने subdomain configure करने से पहले इसका default login बदलें। हालांकि हर container को public hostname की आवश्यकता नहीं होती। self-hosted open-kritt security scanner जैसे केवल admin के लिए उपयोग किए जाने वाले tool को proxy से पूरी तरह अलग रखना बेहतर है। जब कभी इसका UI खोलना हो, तब SSH tunnel के माध्यम से पहुंचें। कुछ अन्य services proxy का उपयोग नहीं करतीं, क्योंकि उनका protocol HTTP नहीं है। 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 के साथ अस्वीकार करता है।

ऐप द्वारा लागू किया जाने वाला नियम: एंडपॉइंट तक पहुंच योग्य होना चाहिए और, व्यवहार में, HTTPS होना चाहिए। http:// एंडपॉइंट, या पोर्ट हटाए गए सीधे IP, वे स्थान हैं जहाँ से "ऐप सर्वर तक नहीं पहुँच सकता" जैसी समस्या उत्पन्न होती है, जिसे नीचे नामित विफलता के रूप में कवर किया गया है।

चरण 7: External libraries बनाम uploads, मौजूदा फोटो ट्री को इम्पोर्ट करना

Immich में फोटो लाने के दो तरीके हैं, और दोनों एक समान नहीं हैं।

  • Uploads वे assets हैं जिनका स्वामित्व Immich के पास होता है। ऐप या वेब uploader फाइल को UPLOAD_LOCATION में कॉपी कर देता है। Immich इन्हें rename, move और delete कर सकता है।
  • External libraries उन फाइलों का read-only इम्पोर्ट हैं जो पहले से ही आपके सर्वर पर किसी फोल्डर में, पुराने Pictures ट्री में, या NAS एक्सपोर्ट में मौजूद हैं। Immich उन्हें वहीं index करता है और timeline में दिखाता है, लेकिन मूल फाइलों को कभी modify या delete नहीं करता है।

मौजूदा ट्री को इम्पोर्ट करने के लिए, इसे सर्वर कंटेनर में read-only मोड में mount करें। immich-server: के अंतर्गत docker-compose.yml को edit करें और एक 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 के साथ कंटेनर को recreate करें, फिर वेब UI में अपने avatar → Administration → External Libraries → Create Library पर जाएं, मालिक user को चुनें, Folders के अंतर्गत Add पर क्लिक करें, और host path /srv/photos के बजाय container path, /mnt/media/photos दर्ज करें। Scan पर क्लिक करें। कंटेनर path के बजाय host path का उपयोग करना external-library से जुड़ी सबसे आम गलती है; ऐसा करने पर scan को कुछ नहीं मिलता और वह शून्य assets की रिपोर्ट करता है।

चरण 8: Immich के लिए आवश्यक अपग्रेड अनुशासन

यह वह हिस्सा है जो एक सुचारू रूप से चलने वाले Immich और एक खराब हो चुके Immich के बीच अंतर पैदा करता है। Immich बहुत तेजी से अपडेट जारी (ships) करता है, और यह पुराने वर्ज़न के लिए फिक्स बैकपोर्ट नहीं करता और न ही डाउनग्रेड का समर्थन करता है। आँख बंद करके फ्लोटिंग v3 टैग का उपयोग करने से अंततः आपका डेटाबेस खराब हो जाएगा। 'पहले पिन करें, फिर नोट्स पढ़ें' वाली आदत को सर्वर पर मौजूद हर लंबे समय तक चलने वाले कंटेनर के लिए अपनाना चाहिए। यही कारण है कि एक self-hosted KiroCrew agent को एक ज्ञात-अच्छे टैग पर पिन किया जाता है, बजाय इसके कि उसे अगले रीस्टार्ट पर अपने आप अपडेट होने दिया जाए। अनुशासन के नियम:

  1. एक वर्ज़न पिन करें। IMMICH_VERSION को हमेशा एक निश्चित टैग जैसे v3.0.2 पर सेट रखें, न कि फ्लोटिंग v3 पर, जो हमेशा सबसे नया v3.x वर्ज़न खींच लेता है।
  2. अपग्रेड करने से पहले हर बार रिलीज़ नोट्स पढ़ें। इसमें ब्रेकिंग बदलावों, विशेष रूप से डेटाबेस या वेक्टर-एक्सटेंशन से जुड़े बदलावों का उल्लेख होता है। v3.0 रिलीज़ इसका स्पष्ट उदाहरण है: इसने pgvecto.rs को पूरी तरह से हटा दिया था, इसलिए जो लोग पुराने एक्सटेंशन पर थे, उन्हें आगे बढ़ने से पहले VectorChord माइग्रेशन (जो v1.133 में पेश किया गया था) पूरा करना पड़ा।
  3. सबसे पहले डेटाबेस का बैकअप लें (चरण 9)। यह हमेशा करें, लेकिन जब नोट्स में डेटाबेस का उल्लेख हो तो इसे दोगुना महत्वपूर्ण समझें।
  4. नया compose file भी लें। IMMICH_VERSION केवल सर्वर और ML इमेज को पिन करता है। Postgres इमेज docker-compose.yml के अंदर डाइजेस्ट द्वारा पिन की जाती है, इसलिए जिस वर्ज़न को नए डेटाबेस एक्सटेंशन की आवश्यकता होती है, वह एक नई compose file के साथ आता है। दोनों रिलीज़ एसेट्स को फिर से डाउनलोड करें, अपने .env मानों को फिर से लागू करें, और फिर अपग्रेड करें।
  5. लगभग उसी समय अपने मोबाइल क्लाइंट्स को अपडेट करें। सर्वर केवल अपने मेल खाते मेजर वर्ज़न के साथ संचार करता है, और ऐप वर्तमान और पिछले मेजर वर्ज़न का समर्थन करता है। यदि सर्वर ऐप से आगे निकल जाता है, तो फोन पर 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

चरण 9: बैकअप, डेटाबेस डंप और ओरिजिनल फाइल्स, और इनका परीक्षण

Immich का बैकअप दो चीजों से मिलकर बनता है, और एक के बिना दूसरा बेकार है। डेटाबेस में एल्बम संरचना, चेहरे, सर्च इंडेक्स और एसेट से फाइल का मैप होता है। ओरिजिनल डायरेक्टरी में वास्तविक फोटो होती हैं। एक को बिना दूसरे के रिस्टोर करने पर या तो आपको बिना किसी ऑर्गनाइजेशन के फोटो मिलेंगी या फिर एक खाली शेल जो गायब फाइलों की ओर इशारा करेगा। यह दो-भाग वाला ढांचा केवल Immich की विशेषता नहीं है: एक self-hosted Chatwoot सपोर्ट डेस्क को भी Postgres डंप और उसकी अपलोड डायरेक्टरी की इसी तरह की जोड़ी की आवश्यकता होती है, अन्यथा रिस्टोर किया गया इनबॉक्स बिना किसी अटैचमेंट के वापस आएगा। Postgres डेटा डायरेक्टरी को फाइल ट्री के रूप में कॉपी करना डंप स्टेप का शॉर्टकट लग सकता है, लेकिन यह एक उपयोगी बैकअप नहीं है। यह एक ऐसी गलती है जिसे पूर्ण Immich बैकअप और रिस्टोर वॉकथ्रू में समझाया गया है, जो आपको रिस्टोर के बाद खाली टाइमलाइन जैसी समस्या से बचाता है।

Postgres कंटेनर के अंदर से pg_dump का उपयोग करके डेटाबेस का डंप लें, विशेष रूप से immich डेटाबेस का, न कि पूरे क्लस्टर का:

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 ट्री, और विशेष रूप से इसके library/, upload/ और profile/ सबफोल्डर्स का बैकअप restic, rsync या borg के साथ किसी अन्य मशीन या ऑब्जेक्ट स्टोरेज पर लें। जो भी शेड्यूल इस जॉब को चलाता है, चाहे वह cron एंट्री हो या systemd टाइमर, उसे विफल होने पर अलर्ट भेजने की आवश्यकता होती है। अपने स्वयं के ntfy पुश सर्वर की ओर इशारा करने वाली एक systemd OnFailure= यूनिट आपको उस रात फोन पर संदेश भेज देगी जिस रात डंप विफल होता है, बजाय इसके कि आप रिस्टोर के दौरान इसे खोजें। पहले डेटाबेस का बैकअप लें और फिर फाइलों का, ताकि डंप कभी भी ऐसी फोटो का संदर्भ न दे जिसे फाइल बैकअप ने अभी तक कॉपी नहीं किया है। एक्सटर्नल लाइब्रेरी का बैकअप उनके वास्तविक स्रोत पर अलग से लें; Immich उनका मालिक नहीं है।

अब वह हिस्सा जिसे हर कोई छोड़ देता है: रिस्टोर का परीक्षण करें। रिस्टोर को एक ऐसे फ्रेश स्टैक पर चलना चाहिए जिसका सर्वर कभी शुरू न हुआ हो, और एक ऐसे Postgres इमेज पर जिसका वेक्टर एक्सटेंशन डंप के साथ संगत हो, यही कारण है कि आप कभी भी DB इमेज टैग के साथ प्रयोग न करें। उसी compose और .env वाले एक स्क्रैच बॉक्स पर, किसी भी पुरानी स्थिति को मिटा दें, केवल डेटाबेस को चालू करें, और फिर डंप लोड करें:

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 डेटाबेस पर search_path का sed रीराइट वैकल्पिक नहीं है, इसे छोड़ने पर रिस्टोर बीच में ही रुक जाएगा। जब स्टैक आपके ओरिजिनल फाइल्स के साथ वापस आ जाए, तो वेब UI खोलें: यदि आपकी फोटो और एल्बम वहां मौजूद हैं, तो आपका बैकअप काम कर रहा है। यदि आपने इसे कभी नहीं चलाया है, तो आपके पास बैकअप नहीं है, केवल एक उम्मीद है।

विफलता के प्रकार और उनसे संबंधित संदेश

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)। इसके बाद सर्च और फेस जॉब्स रुक जाते हैं। इसका कारण मॉडल्स के लिए RAM की कमी है। समाधान, प्राथमिकता के क्रम में: swap जोड़ें (Step 1); VPS की RAM बढ़ाएं; या, यदि यह संभव न हो, तो Administration → Settings → Machine Learning Settings में जाकर Smart Search और Facial Recognition को बंद कर दें। इससे बैकअप और एल्बम सुरक्षित रहेंगे, लेकिन आप content-based सर्च खो देंगे। compose file से immich-machine-learning सर्विस को हटाने का भी यही परिणाम होता है।

अपग्रेड के बाद Postgres का स्टार्ट न होना। सर्वर लॉग में 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. जैसी लाइन बार-बार आती है, या पुराने स्टैक पर The pgvecto.rs extension is not available in this Postgres instance. दिखाई देता है। इसका कारण एक ऐसा डेटाबेस इमेज है जिसका extension version आपके डेटा के अपग्रेडेड वर्ज़न से पुराना है। ऐसा आमतौर पर इमेज टैग को मैन्युअल रूप से बदलने या पुराने इमेज पर नया डंप रिस्टोर करने से होता है। इसका समाधान यह है कि आप मेल खाने वाले Postgres इमेज का उपयोग करें, उस रिलीज़ की compose file लें जो आपके डेटाबेस से मेल खाती हो, डाउनग्रेड न करें, और केवल संगत इमेज पर ही रिस्टोर करें।

मोबाइल ऐप का सर्वर से कनेक्ट न हो पाना। URL डालने के बाद लॉगिन स्क्रीन पर connection error / Server is not reachable दिखाई देता है। इसके तीन कारण हो सकते हैं: आपने http:// टाइप किया जबकि प्रॉक्सी केवल https:// सर्व करता है; आपने सीधे backend से कनेक्ट किया लेकिन पोर्ट नहीं डाला, जिससे यह example.com:2283 के बजाय example.com (port 443) पर प्रयास करने लगा; या reverse proxy /api को फॉरवर्ड नहीं कर रहा है। इसे ठीक करने के लिए पूरा https://photos.example.com URL डालें और पहले फोन के ब्राउज़र में चेक करें कि वह लोड हो रहा है या नहीं। यदि ब्राउज़र में काम कर रहा है और ऐप में नहीं, तो प्रॉक्सी पाथ को हटा रहा है या सर्टिफिकेट self-signed है, जिसे ऐप स्वीकार नहीं करता।

इंपोर्ट के दौरान डिस्क का भर जाना। अपलोड फेल होने लगते हैं, थंबनेल खाली हो जाते हैं, और लॉग्स में ENOSPC: no space left on device या Postgres से could not extend file ... No space left on device दिखाई देता है। df -h दिखाता है कि UPLOAD_LOCATION वॉल्यूम 100% भर चुका है। इसीलिए बड़ी लाइब्रेरी इंपोर्ट करने से पहले डिस्क का आकार सही रखना जरूरी है। इसे ठीक करने के लिए एक बड़ी वॉल्यूम अटैच करें, स्टैक को रोकें, UPLOAD_LOCATION को वहां मूव करें, .env को अपडेट करें और फिर से स्टार्ट करें, या यदि आपका प्रोवाइडर अनुमति देता है तो मौजूदा डिस्क का आकार बढ़ाएं। डिस्क भर जाने पर Postgres अटक सकता है, इसलिए करप्शन का अनुमान लगाने से पहले जगह खाली करें और डेटाबेस कंटेनर को रीस्टार्ट करें।

FAQ

Immich को कितनी RAM और disk की आवश्यकता होती है?

Immich की आधिकारिक आवश्यकता कम से कम 6 GB RAM है और 8 GB की अनुशंसा की जाती है। छोटी लाइब्रेरी के लिए 4 GB RAM और swap का उपयोग करना व्यावहारिक न्यूनतम स्तर है। किसी भी स्थिति में swap कॉन्फ़िगर करें, क्योंकि machine-learning कंटेनर ही वह हिस्सा है जो अचानक अधिक संसाधन लेता है। डिस्क के लिए, अपनी पूरी लाइब्रेरी के आकार के साथ-साथ thumbnails और previews के लिए लगभग 10–20% अतिरिक्त जगह रखें। इसे हमेशा local storage पर रखें; Postgres डेटा डायरेक्टरी को कभी भी network share पर न रखें। यदि आप अभी भी यह तय कर रहे हैं कि और क्या चलाना है, तो 2026 में क्या self-host करें, इसके लिए गाइड में अन्य सेवाओं के साथ Immich के footprint की तुलना दी गई है।

क्या मैं Immich को बिना GPU के चला सकता हूँ?

हाँ। machine-learning कंटेनर CPU पर आसानी से चल जाता है। GPU केवल smart-search इंडेक्सिंग और सही image variant के साथ वीडियो ट्रांसकोडिंग की गति बढ़ाता है। CPU पर, एक बड़ी लाइब्रेरी की शुरुआती इंडेक्सिंग में बैकग्राउंड में घंटों लग सकते हैं, लेकिन यह बैकअप या ब्राउज़िंग को नहीं रोकता है। यदि आपका सिस्टम ML के लिए बहुत छोटा है, तो आप एडमिन सेटिंग्स में Smart Search और Facial Recognition को डिसेबल कर सकते हैं और बाकी सब कुछ इस्तेमाल कर सकते हैं।

मैं Immich को सुरक्षित रूप से अपग्रेड कैसे करूँ?

IMMICH_VERSION को v3.0.2 जैसे किसी निश्चित tag पर पिन करें, हर अपग्रेड से पहले release notes पढ़ें, और सबसे पहले डेटाबेस का बैकअप लें। चूंकि Postgres इमेज को IMMICH_VERSION के बजाय docker-compose.yml के अंदर पिन किया गया है, इसलिए अपने टारगेट रिलीज़ से compose फ़ाइल और example.env दोनों को फिर से डाउनलोड करें और अपने values को फिर से लागू करें, फिर docker compose pull && docker compose up -d चलाएँ। वर्जन को कभी भी बिना निगरानी के न छोड़ें, Immich में breaking changes आते हैं और यह downgrades को सपोर्ट नहीं करता है।

मुझे वास्तव में किसका बैकअप लेना चाहिए?

दो चीजों का, एक साथ: immich डेटाबेस का एक pg_dump और पूरी UPLOAD_LOCATION ओरिजिनल्स डायरेक्टरी। डेटाबेस में एल्बम, चेहरे और asset-to-file मैपिंग होती है; डायरेक्टरी में वास्तविक तस्वीरें होती हैं, और रिस्टोर के लिए दोनों की आवश्यकता होती है, साथ ही एक compatible vector extension वाली डेटाबेस इमेज की भी। पहले डेटाबेस डंप करें और फिर फ़ाइल कॉपी करें, और कम से कम एक बार किसी अलग सिस्टम पर रिस्टोर का परीक्षण करें; बिना परीक्षण किया गया बैकअप, बैकअप नहीं होता है।

मैं अपने मौजूदा फोटो फोल्डर को कैसे इम्पोर्ट करूँ?

फोल्डर को read-only मोड में immich-server कंटेनर में एक अतिरिक्त वॉल्यूम (उदाहरण के लिए - /srv/photos:/mnt/media/photos:ro) के रूप में माउंट करें, कंटेनर को फिर से बनाएँ, फिर Administration → External Libraries में एक लाइब्रेरी बनाएँ और container पाथ /mnt/media/photos जोड़ें। Immich फ़ाइलों को वहीं इंडेक्स करता है और उन्हें कभी भी संशोधित या डिलीट नहीं करता है। सबसे आम गलती कंटेनर पाथ के बजाय होस्ट पाथ डालना है, जिससे स्कैन में कुछ भी नहीं मिलता है।