SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-28

Immich চালাতে কত RAM লাগে এবং নিরাপদে upgrade করবেন কীভাবে

Immich-এর বাস্তব RAM চাহিদা, HTTPS-এর পেছনে port 2283, exit 137 memory kill এবং pgvecto.rs database-এ Immich v3 কেন চালু হবে না, restore ধাপসহ।

আপনি যা তৈরি করছেন

Immich একটি self-hosted photo ও video backup service এবং Google Photos-এর বাস্তব বিকল্প। এতে একটি phone app আছে, যা background-এ আপনার camera roll upload করে। এছাড়া timeline, album, face recognition এবং machine-learning search আছে। কোনো tag না দিয়েও এটি "beach" বা কোনো ব্যক্তিকে খুঁজে পেতে পারে। আপনি এটি নিজের মালিকানাধীন VPS-এ চালাবেন। Original file আপনার disk-এই থাকবে। কেউ সেগুলো scan করে আপনাকে কোনো পণ্য বিক্রি করবে না। আপনি যদি এখনও অন্য সুস্পষ্ট বিকল্পটির সঙ্গে এটি তুলনা করে দেখেন, আমাদের PhotoPrism এবং Immich তুলনা-এ তাদের RAM-এর ন্যূনতম চাহিদা, phone app এবং backup command পাশাপাশি দেখানো হয়েছে।

ইনস্টলেশনে project-এর নিজস্ব Docker Compose file থেকে চারটি container তৈরি হয়। এই অংশে দশ মিনিট লাগে। এই guide-এর বাকি অংশেই মূল জটিলতা: ছোট server-এ machine-learning container প্রচুর memory ব্যবহার করে, original file দ্রুত disk ভরে ফেলে, mobile app plain-HTTP server গ্রহণ করে না, এবং Immich এত ঘন ঘন breaking change release করে যে অসতর্ক docker compose pull আপনার database start করতে না-ও পারে। এই চারটি বিষয় গুরুত্ব দিয়ে সামলালে Immich অত্যন্ত নির্ভরযোগ্য। এগুলো উপেক্ষা করলে একটি weekend নষ্ট হবে।

Prerequisites এবং গুরুত্বপূর্ণ সীমাবদ্ধতা

  • RAM: অফিসিয়াল ডকুমেন্টেশনে minimum 6 GB এবং recommended 8 GB বলা হয়েছে; 4 GB RAM এবং swap-কে absolute floor হিসেবে ধরুন। immich-server এবং Postgres container-এর resource usage কম। immich-machine-learning container-টি বেশি RAM ব্যবহার করে। এটি RAM-এ CLIP এবং face-recognition model load করে search index তৈরি করে। 2 GB-এর server-এ kernel এটিকে বন্ধ করে দেয়। আপনার 4 GB RAM থাকলেও swap যোগ করুন।
  • Disk: পুরো library এবং অতিরিক্ত ব্যবহারের জন্য পর্যাপ্ত capacity রাখুন। আপনার original file-গুলো সম্পূর্ণভাবে copy হয়। Immich thumbnail এবং preview image-ও তৈরি করে। এগুলোর জন্য সাধারণত অতিরিক্ত 10–20% storage লাগে। 200 GB-এর photo collection-এর জন্য 300 GB volume রাখুন। এর তুলনায় Postgres-এর storage usage কম।
  • CPU: যেকোনো আধুনিক KVM VPS যথেষ্ট, তবে CPU-তে ML ধীরগতির। বড় import-এর smart-search indexing background-এ কয়েক ঘণ্টা চলতে পারে। এটি স্বাভাবিক। এর জন্য GPU প্রয়োজন হয় না।
  • VPS-এর দিকে নির্দেশ করা একটি domain name। Mobile app HTTPS endpoint ব্যবহার করতে বেশি পছন্দ করে। এছাড়া সামনে একটি reverse proxy রাখা উচিত। এটি Docker, TLS এবং backup-সহ self-hosted Nextcloud instance-এর মতো একই ধরনের setup। Immich হলো সেই file server-এর photo counterpart।
  • Docker এবং Compose plugin ইনস্টল করা থাকতে হবে। Docker-এর নিজস্ব apt repository থেকে Docker Engine এবং Compose v2 plugin ইনস্টল করুন। প্রক্রিয়াটি আমাদের Docker Compose basics guide-এ ঠিকভাবে দেখানো হয়েছে।

ধাপ 1: অন্য কিছু করার আগে swap যোগ করুন

ছোট VPS-এ Immich ব্যর্থ হওয়ার সবচেয়ে সাধারণ কারণ হলো ML container-এর OOM-killed হওয়া। প্রথমে kernel-এর জন্য অতিরিক্ত memory space তৈরি করুন।

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: line দেখা উচিত। এতে ML দ্রুত হবে না, তবে 4 GB মেশিনে indexing চলাকালে container বন্ধ হয়ে যাওয়া ঠেকাবে।

ধাপ 2: অফিসিয়াল compose ও env সংগ্রহ করুন; কপি নয়, অফিসিয়াল ফাইল ব্যবহার করুন

Immich তার সরবরাহ করা ফাইলের মধ্যেই service version এবং বিশেষভাবে database image নির্দিষ্ট করে। কোনো blog থেকে, এমনকি এই blog থেকেও, compose file কপি করে সেটিকে নির্ভরযোগ্য উৎস হিসেবে ব্যবহার করবেন না। release asset 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 reference-গুলো সঠিকভাবে মিলে যায়। compose file-এ চারটি service নির্ধারিত আছে। কোনো পরিবর্তন করার আগে প্রতিটির ভূমিকা জানা সহায়ক:

  • immich-server (ghcr.io/immich-app/immich-server, container immich_server), API ও web UI; এটি port 2283-এ listen করে। এটি আপনার upload-গুলো /data-এ mount করে।
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning, container immich_machine_learning), CLIP search ও face recognition-এর জন্য ব্যবহৃত হয়। এটি download করা model-গুলো model-cache volume-এ cache করে। এই service-টির memory চাহিদা সবচেয়ে বেশি।
  • database (container immich_postgres), VectorChord vector extension-সহ Postgres; এটিই similarity search চালায়। compose file-এ image tag সরাসরি digest দিয়ে নির্দিষ্ট করা আছে, যেমন ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:...। পুরোনো setup-এ pgvecto.rs ব্যবহার করা হতো; Immich v3.0-এ এর support সরিয়ে দেওয়া হয়েছে। তাই বর্তমানে install করা সব setup-এ VectorChord থাকবে। এই tag কখনো হাতে পরিবর্তন করবেন না।
  • redis (container immich_redis), job queue-এর জন্য একটি 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 সংযুক্ত করলে শুরু থেকেই এর mount path সেট করুন, কারণ পরে এটি সরাতে হলে thumbnail সরাতে হবে এবং asset path আপডেট করতে হবে। আর DB_DATA_LOCATION অবশ্যই local disk-এ থাকতে হবে: NFS বা SMB share-এ Postgres রাখলে data corruption হতে পারে, এবং documentation-এ তা স্পষ্টভাবে বলা আছে। DB_PASSWORD-এ শুধু অক্ষর ও সংখ্যা ব্যবহার করলে connection string escape-সংক্রান্ত এক ধরনের bug এড়ানো যায়।

ধাপ 4: প্রথমবার চালু করা এবং admin user তৈরি

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

সঠিক ফলাফলে চারটি container থাকবে। সবগুলো running এবং শেষ পর্যন্ত healthy অবস্থায় থাকবে:

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

প্রথম up-এ কয়েক GB image download হয়, তাই কিছু সময় দিন। sudo docker compose logs -f immich-server দিয়ে অগ্রগতি দেখুন। প্রস্তুত হলে server লগে এটি port 2283-এ listening করছে বলে দেখাবে। এখন browser-এ http://YOUR_SERVER_IP:2283 খুলুন। প্রথমবার গেলে Getting Started wizard দেখা যাবে। আপনি যে প্রথম account তৈরি করবেন, সেটিই admin হবে। শক্তিশালী password সেট করুন। এই account-এর মাধ্যমে server settings, user management এবং পরে প্রয়োজনীয় ML configuration পরিচালনা করা হয়।

ধাপ 5: মোবাইল অ্যাপ এবং background backup

App Store বা Play Store থেকে "Immich" ইনস্টল করুন। Login screen-এ Server Endpoint URL চাওয়া হবে। Scheme-সহ সম্পূর্ণ URL লিখুন, যেমন https://photos.example.com (অ্যাপ নিজেই /api যোগ করে)। আপনি যে account তৈরি করেছেন, সেটি দিয়ে login করুন। এরপর অ্যাপের Backup screen খুলে যে album-গুলো সুরক্ষিত রাখতে চান সেগুলো নির্বাচন করুন (সাধারণত Camera এবং Screenshots), তারপর Background backup চালু করুন। iOS background backup-এর গতি OS নিয়ন্ত্রণ করে কমিয়ে দিতে পারে। Foreground upload সবসময় চলে। Background upload OS অনুমতি দিলে চলে।

এই ধাপেই সাধারণত ব্যবহারকারীরা আটকে যান। তাই অ্যাপ নিয়ে সমস্যায় পড়ার আগে ধাপ 6 পড়ুন।

ধাপ 6: reverse proxy-এর মাধ্যমে HTTPS এবং সম্পূর্ণ URL-এর নিয়ম

মোবাইল অ্যাপটির HTTPS প্রয়োজন। 2283 port-এর সামনে একটি reverse proxy বসান এবং সেখানেই TLS termination করুন। আপনি যদি ইতিমধ্যে একাধিক container চালান, তাহলে একাধিক Docker app-এর জন্য 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 একই server-এ Immich-এর পাশে চলতে পারে। একটি self-hosted HarnessRouter, যা Codex ও Claude Code-কে একটি API-এর পেছনে রাখে-এর ক্ষেত্রেও একই কথা প্রযোজ্য। এটি ইচ্ছাকৃতভাবে loopback-এ bind করে এবং সামনে proxy TLS termination করার পরেই কেবল reachable হয়। তাই কোনো subdomain-এর দিকে নির্দেশ করার আগে এর default login পরিবর্তন করুন। তবে প্রতিটি container-এর জন্য public hostname দরকার হয় না। একটি self-hosted open-kritt security scanner-এর মতো শুধু administrator-এর জন্য ব্যবহৃত tool-কে proxy-এর বাইরে রাখাই ভালো। বিরল ক্ষেত্রে এর UI খুললে SSH tunnel ব্যবহার করে access করুন। কিছু service proxy ব্যবহার করে না, কারণ HTTP তাদের protocol নয়। একটি self-hosted RustDesk relay server এর সবচেয়ে স্পষ্ট উদাহরণ। এটি কয়েকটি raw TCP ও UDP port-এ listening করে এবং subdomain-এর বদলে firewall rule প্রয়োজন। Immich-এর জন্য একটি proxy setting গুরুত্বপূর্ণ: upload size limit বাড়ান, কারণ ফোনের video file বড় হয়। nginx-এ server block-এর ভেতরে এটি client_max_body_size 50000M;। default 1 MB limit video upload-কে 413 Request Entity Too Large দিয়ে প্রত্যাখ্যান করে।

অ্যাপটি যে নিয়ম প্রয়োগ করে তা হলো: endpoint-এ পৌঁছানো সম্ভব হতে হবে এবং বাস্তবে সেটি HTTPS হওয়া আবশ্যক। http:// endpoint অথবা port না-দেওয়া direct IP-এর ক্ষেত্রেই সাধারণত “অ্যাপটি server-এ পৌঁছাতে পারছে না” সমস্যা দেখা দেয়। নিচে এটি একটি নির্দিষ্ট failure হিসেবে ব্যাখ্যা করা হয়েছে।

ধাপ 7: External libraries বনাম uploads, বিদ্যমান photo tree import করা

Immich-এ photo যোগ করার দুটি উপায় আছে। এগুলো এক জিনিস নয়।

  • Uploads হলো এমন asset, যার মালিক Immich। অ্যাপ বা web uploader ফাইলটি UPLOAD_LOCATION-এ কপি করে। Immich এগুলোর নাম পরিবর্তন, স্থানান্তর এবং মুছে ফেলা করতে পারে।
  • External libraries হলো এমন ফাইলের read-only import, যেগুলো আপনার server-এর কোনো folder, পুরোনো Pictures tree বা NAS export-এ আগে থেকেই আছে। Immich ফাইলগুলো যেখানে আছে সেখানেই index করে এবং timeline-এ দেখায়, কিন্তু মূল ফাইল কখনো পরিবর্তন বা মুছে ফেলে না।

বিদ্যমান tree import করতে সেটিকে read-only অবস্থায় server container-এ 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 এ যান। owning user নির্বাচন করুন, Folders-এর অধীনে Add-এ click করুন এবং container path /mnt/media/photos লিখুন, host path /srv/photos নয়। Scan-এ click করুন। container path-এর বদলে host path ব্যবহার করা external library-এর সবচেয়ে সাধারণ ভুল। এতে scan কোনো ফাইল খুঁজে পায় না এবং zero asset দেখায়।

ধাপ 8: Immich-এর প্রয়োজনীয় upgrade discipline

এই অংশটিই একটি সচল Immich এবং একটি নষ্ট Immich-এর মধ্যে পার্থক্য তৈরি করে। Immich দ্রুত release করে এবং পুরোনো version-এ fix backport করে না বা downgrade সমর্থন করে না। পরিবর্তনশীল v3 tag অনুসরণ করলে শেষ পর্যন্ত আপনার database নষ্ট হবেই। একই pin-then-read-the-notes অভ্যাস সার্ভারে দীর্ঘ সময় চলা প্রতিটি container-এর ক্ষেত্রেও প্রয়োগ করা উচিত। তাই একটি self-hosted KiroCrew agent-কে একটি পরীক্ষিত tag-এ pin করা হয়, যাতে পরবর্তী restart-এ সেটি অপ্রত্যাশিতভাবে version পরিবর্তন না করে। নিয়মগুলো হলো:

  1. একটি version pin করুন। IMMICH_VERSION-এ v3.0.2-এর মতো নির্দিষ্ট tag রাখুন। সব সময় সর্বশেষ v3.x টেনে আনে এমন পরিবর্তনশীল v3 ব্যবহার করবেন না।
  2. প্রতিবার upgrade-এর আগে release notes পড়ুন। বিশেষ করে database বা vector-extension-সংক্রান্ত breaking change সেখানে উল্লেখ করা থাকে। v3.0 release এর স্পষ্ট উদাহরণ। এতে pgvecto.rs সম্পূর্ণ সরিয়ে ফেলা হয়েছিল। তাই পুরোনো extension ব্যবহারকারীদের আগে VectorChord migration সম্পূর্ণ করতে হয়েছিল। এই migration v1.133-এ চালু হয়েছিল।
  3. প্রথমে database-এর backup নিন (ধাপ 9)। সব সময়ই নিন। Release notes-এ database-এর কথা থাকলে আরও বেশি সতর্কতার সঙ্গে নিন।
  4. নতুন compose file-টিও নিন। IMMICH_VERSION শুধু server এবং ML image pin করে। Postgres image-এর digest docker-compose.yml-এর ভিতরে pin করা থাকে। তাই নতুন database extension প্রয়োজন এমন version-এর সঙ্গে নতুন compose file-ও release করা হয়। উভয় release asset আবার download করুন, আপনার .env value আবার প্রয়োগ করুন, তারপর upgrade করুন।
  5. একই সময়ের কাছাকাছি mobile client-গুলোও update করুন। Server কেবল তার matching major version-এর সঙ্গে কথা বলে, আর app বর্তমান ও আগের major version সমর্থন করে। Server app-এর চেয়ে এগিয়ে গেলে app update না করা পর্যন্ত ফোনে Your app major version is not compatible with the server! দেখা যাবে। তাই আগে app update করাই নিরাপদ।

নতুন file-গুলো প্রস্তুত করার পর প্রকৃত command হলো:

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

ধাপ 9: Backup, database dump এবং originals—এবং এটি পরীক্ষা করুন

Immich-এর backup দুটি জিনিস নিয়ে গঠিত, এবং একটিকে বাদ দিলে অন্যটি কোনো কাজে আসে না। Database-এ album structure, faces, search index এবং asset থেকে file-এর mapping থাকে। Originals directory-তে আসল photo থাকে। একটিকে অন্যটি ছাড়া restore করলে হয় organisation ছাড়া photo পাবেন, নয়তো missing file-এর দিকে নির্দেশ করা একটি খালি shell পাবেন। এই দুই-অংশের কাঠামোটি Immich-এর নিজস্ব কোনো বৈশিষ্ট্য নয়: একটি self-hosted Chatwoot support desk-এর ক্ষেত্রেও Postgres dump এবং uploads directory—এই জোড়াটি দরকার। তা না হলে restored inbox ফিরে এলেও সব attachment missing থাকবে। Postgres data directory-কে file tree হিসেবে copy করা dump ধাপ এড়ানোর shortcut মনে হতে পারে, কিন্তু এটি ব্যবহারযোগ্য backup নয়। সম্পূর্ণ Immich backup এবং restore walkthrough-এ এই ভুলটি এবং সেই restore slip-এর বিষয়টি দেখানো হয়েছে, যার ফলে আপনার timeline খালি থেকে যায়।

Postgres container-এর ভেতর থেকে pg_dump ব্যবহার করে database dump করুন। শুধু immich database dump করুন, পুরো 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/ subfolder, restic, rsync বা borg ব্যবহার করে অন্য machine বা object storage-এ backup করুন। এই কাজটি cron entry বা systemd timer—যে পদ্ধতিতেই schedule করা হোক—ব্যর্থ হলে জানানোর ব্যবস্থা থাকতে হবে। আপনার নিজস্ব ntfy push server-এ নির্দেশ করা একটি systemd OnFailure= unit ব্যবহার করলে dump ব্যর্থ হওয়ার রাতে আপনার phone-এ message পৌঁছে যাবে। Restore করার সময় বিষয়টি জানতে হবে না। আগে database এবং পরে file backup করুন, যাতে dump এমন কোনো photo-র reference না রাখে যা file backup তখনও copy করেনি। External library আলাদা করে তার আসল source থেকে backup করুন। এগুলোর মালিকানা Immich-এর নয়।

এবার সেই অংশ, যা সবাই এড়িয়ে যায়: restore পরীক্ষা করুন। Restore অবশ্যই একটি fresh stack-এ চালাতে হবে, যার server আগে কখনও start হয়নি। যে Postgres image ব্যবহার করবেন, তার vector extension dump-এর সঙ্গে compatible হতে হবে। এ কারণেই DB image tag কখনও অনুমান করে নির্বাচন করবেন না। একই compose এবং .env ব্যবহার করে একটি scratch box-এ পুরোনো state মুছে ফেলুন। শুধু database চালু করুন। এরপর 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 rewrite করা বাধ্যতামূলক। এটি বাদ দিলে restore মাঝপথে abort হবে। Originals যথাস্থানে রেখে stack আবার চালু হলে web UI খুলুন। আপনার photo এবং album দেখা গেলে backup কাজ করছে। আপনি যদি কখনও এটি চালিয়ে না থাকেন, তাহলে আপনার backup নেই; শুধু আশা আছে।

যে ব্যর্থতার ধরনগুলো দেখা যেতে পারে

ML container OOM-killed হয়েছে। sudo docker compose logs immich-machine-learning হঠাৎ বন্ধ হয়ে যায়, docker compose ps দেখায় যে এটি Restarting হয়েছে, এবং exit code হলো 137sudo dmesg | grep -i oom এটি নিশ্চিত করে: Out of memory: Killed process ... (python3)। এরপর search ও face job আটকে থাকে। কারণ হলো model চালানোর জন্য RAM কম। সমাধান, এই ক্রমে: swap যোগ করুন (Step 1); VPS-এ আরও RAM দিন; অথবা সত্যিই তা সম্ভব না হলে Administration → Settings → Machine Learning Settings-এ Smart Search এবং Facial Recognition বন্ধ করে ML নিষ্ক্রিয় করুন। এতে backup ও album থাকবে, কিন্তু content অনুযায়ী 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.-এর মতো একটি line বারবার দেখা যায়, অথবা পুরোনো stack-এ The pgvecto.rs extension is not available in this Postgres instance. দেখা যায়। কারণ হলো এমন একটি database image ব্যবহার করা হচ্ছে যার extension version আপনার data যে version-এ upgrade হয়েছে তার চেয়ে পুরোনো। সাধারণত image tag হাতে edit করা বা নতুন 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 দেখা যায়। তিনটি কারণ থাকতে পারে: proxy কেবল https:// serve করলেও আপনি http:// লিখেছেন; backend-এ সরাসরি সংযোগ করে port বাদ দিয়েছেন, ফলে এটি example.com:2283-এর পরিবর্তে example.com (port 443) চেষ্টা করেছে; অথবা reverse proxy /api forward করছে না। সমাধান হিসেবে সম্পূর্ণ https://photos.example.com URL দিন এবং আগে ফোনের browser-এ সেটি load হয় কি না নিশ্চিত করুন। Browser কাজ করলেও app কাজ না করলে proxy path বাদ দিচ্ছে, অথবা certificate self-signed হওয়ায় app untrusted certificate প্রত্যাখ্যান করছে।

Import চলাকালে disk space শেষ হয়ে যায়। Upload ব্যর্থ হতে শুরু করে, thumbnail ফাঁকা দেখায় এবং log-এ 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 সংযুক্ত করুন, stack বন্ধ করুন, UPLOAD_LOCATION সেখানে স্থানান্তর করুন, .env update করুন এবং আবার চালু করুন। Provider অনুমতি দিলে বিদ্যমান disk-ও বড় করতে পারেন। Disk পূর্ণ হলে Postgres আটকে যেতে পারে। তাই corruption ধরে নেওয়ার আগে space খালি করুন এবং database container restart করুন।

FAQ

Immich-এর কত RAM এবং disk প্রয়োজন?

Immich-এর official requirement অনুযায়ী ন্যূনতম 6 GB RAM এবং recommended 8 GB। ছোট library-এর জন্য swap-সহ 4 GB ব্যবহারিক সর্বনিম্ন সীমা। যেকোনো অবস্থায় swap configure করুন, কারণ machine-learning container-এই resource usage সবচেয়ে বেশি বেড়ে যায়। Disk-এর জন্য সম্পূর্ণ library size-এর সঙ্গে generated thumbnail ও preview-এর জন্য আনুমানিক 10–20% অতিরিক্ত জায়গা রাখুন এবং local storage ব্যবহার করুন। Postgres data directory কখনও network share-এ রাখবেন না। আর কী কী চালাবেন তা এখনও ঠিক না করে থাকলে, 2026 সালে কী self-host করবেন সেই গাইডে Immich-এর footprint অন্যান্য service-এর সঙ্গে তুলনা করা হয়েছে।

GPU ছাড়া কি Immich চালানো যায়?

হ্যাঁ। Machine-learning container CPU-তে ভালোভাবেই চলে। GPU শুধু smart-search indexing দ্রুত করে এবং সঠিক image variant ব্যবহার করলে video transcoding-ও দ্রুত করে। CPU-তে বড় library-এর প্রাথমিক index background-এ সম্পন্ন হতে কয়েক ঘণ্টা লাগতে পারে, তবে এতে backup বা browsing বন্ধ হয় না। আপনার server-এ ML চালানোর মতো পর্যাপ্ত resource না থাকলে admin settings থেকে Smart Search এবং Facial Recognition disable করে বাকি সব feature চালু রাখতে পারেন।

Immich কীভাবে নিরাপদে upgrade করব?

IMMICH_VERSION-এ v3.0.2-এর মতো একটি নির্দিষ্ট tag pin করুন, প্রতিটি upgrade-এর আগে release notes পড়ুন এবং প্রথমে database-এর backup নিন। Postgres image-টি IMMICH_VERSION দিয়ে নয়, docker-compose.yml-এর ভেতরে pin করা থাকে। তাই target release থেকে compose file এবং example.env দুটিই আবার download করে আপনার values পুনরায় প্রয়োগ করুন। এরপর docker compose pull && docker compose up -d চালান। Version unattended অবস্থায় কখনও floating রাখবেন না। Immich breaking change release করে এবং downgrade support করে না।

ঠিক কী কী backup করব?

দুটি জিনিস একসঙ্গে backup করুন: immich database-এর একটি pg_dump এবং সম্পূর্ণ UPLOAD_LOCATION originals directory। Database-এ album, face এবং asset-to-file mapping থাকে। Directory-তে প্রকৃত photo থাকে। Restore করতে এই দুটিই লাগবে, পাশাপাশি compatible vector extension-সহ একটি database image-ও প্রয়োজন। প্রথমে database dump নিন এবং পরে file copy করুন। অন্তত একবার scratch server-এ restore পরীক্ষা করুন। যে backup restore করে পরীক্ষা করা হয়নি, সেটি প্রকৃত backup নয়।

আমার existing photo folder কীভাবে import করব?

Folder-টি read-only অবস্থায় immich-server container-এ অতিরিক্ত volume হিসেবে mount করুন, যেমন - /srv/photos:/mnt/media/photos:ro। Container পুনরায় তৈরি করুন। এরপর Administration → External Libraries থেকে একটি library তৈরি করে container path /mnt/media/photos যোগ করুন। Immich file-গুলো তাদের বর্তমান অবস্থানেই index করে এবং কখনও সেগুলো পরিবর্তন বা মুছে ফেলে না। সবচেয়ে সাধারণ ভুল হলো container path-এর বদলে host path দেওয়া। এতে scan কোনো file খুঁজে পায় না।