SSD Nodes Learn Hosting plans →
מדריכים Matt Connorמאת Matt Connor

Immich באירוח עצמי: כמה RAM צריך ואיך משדרגים בבטחה

כמה זיכרון Immich באמת צריך, איך להעביר את פורט 2283 דרך HTTPS, מה גורם ליציאה 137, ומדוע Immich v3 לא עולה עם מסד pgvecto.rs. כולל שחזור.

מה אתם בונים

Immich הוא שירות לגיבוי תמונות וסרטונים באירוח עצמי, המהווה תחליף אמיתי ל-Google Photos. הוא כולל אפליקציה לטלפון המגבה את גלריית התמונות שלכם ברקע, ציר זמן, אלבומים, זיהוי פנים וחיפוש מבוסס למידת מכונה שמוצא "חוף" או אדם מסוים מבלי שתצטרכו לתייג דבר. אתם מריצים אותו על שרת VPS שבבעלותכם, הקבצים המקוריים נשארים על הדיסק שלכם, ואיש אינו סורק אותם כדי למכור לכם מוצרים. אם אתם עדיין שוקלים אותו מול החלופה המובנת מאליה, השוואת ה-PhotoPrism ו-Immich שלנו מציבה את דרישות ה-RAM, האפליקציות לטלפון ופקודות הגיבוי שלהם זו לצד זו.

ההתקנה מורכבת מארבע מכולות (containers) מתוך קובץ ה-Docker Compose של הפרויקט. חלק זה אורך עשר דקות. שאר המדריך הזה הוא המקום שבו טמון הקושי: מכולת למידת המכונה צורכת זיכרון רב בשרתים קטנים, קובצי המקור תופסים נפח דיסק במהירות, האפליקציה לנייד זקוקה לכתובת ה-URL המדויקת של השרת, ואתם תרצו HTTPS לפני שהתעבורה תצא מהרשת שלכם. בנוסף, Immich משחרר עדכונים עם שינויים שעלולים לשבור תאימות לעיתים קרובות מספיק, כך ש-docker compose pull לא זהיר עלול להשאיר את השרת שלכם במצב שאינו עולה. התייחסו לארבעת הדברים האלו ברצינות ו-Immich יהיה יציב לחלוטין. התעלמו מהם, ואתם עלולים לאבד סוף שבוע שלם.

דרישות קדם, ומכשולים שחשוב להכיר

  • RAM: התיעוד הרשמי מציין מינימום של 6 GB ומומלץ 8 GB; התייחסו ל-4 GB בתוספת swap כאל הרף המוחלט. המכולות של immich-server ו-Postgres הן צנועות. המכולה של immich-machine-learning היא הצרכנית הכבדה; היא טוענת מודלים של CLIP וזיהוי פנים לתוך ה-RAM כדי לבנות אינדקסים לחיפוש, ובשרת עם 2 GB ה-kernel יסיים את התהליך (OOM kill). הוסיפו swap גם אם יש לכם 4 GB.
  • דיסק: תכננו נפח עבור כל הספרייה שלכם, ועוד קצת מעבר. הקבצים המקוריים מועתקים במלואם, ובנוסף Immich מייצרת תמונות ממוזערות ותצוגות מקדימות (תוספת של כ-10% עד 20%). אוסף תמונות של 200 GB דורש נפח אחסון של 300 GB. Postgres קטן משמעותית בהשוואה לכך.
  • CPU: כל VPS מודרני מבוסס KVM יתאים, אך עיבוד ML על ה-CPU הוא איטי. אינדוקס חיפוש חכם של ייבוא גדול יכול להימשך שעות ברקע. זה תקין; אין צורך ב-GPU.
  • שם מתחם (Domain name) המצביע אל ה-VPS. האפליקציה לנייד מעדיפה באופן מובהק נקודת קצה עם HTTPS, ואתם תרצו reverse proxy לפני השירות. זהו מבנה דומה לזה של מופע Nextcloud בניהול עצמי עם Docker, TLS וגיבויים; Immich היא המקבילה של עולם התמונות לשרת קבצים זה.
  • Docker ותוסף Compose מותקנים; Docker Engine בתוספת התוסף Compose v2 ממאגר ה-apt הרשמי של Docker, בדיוק כפי שמוסבר ב-מדריך היסודות שלנו ל-Docker Compose.

שלב 1: הוספת swap לפני כל פעולה אחרת

הסיבה הנפוצה ביותר לכשל של Immich בשרת VPS קטן היא סגירת מכולת ה-ML על ידי ה-kernel עקב חוסר בזיכרון (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 זיכרון.

שלב 2: הורדת קובצי ה-compose וה-env הרשמיים, שימוש במקור ולא בהעתק

Immich מקבעת את גרסאות השירותים שלה, ובאופן קריטי את ה-image של מסד הנתונים, בתוך הקבצים שהיא מפיצה. אל תעתיקו קובץ compose מבלוג (כולל זה) כמקור האמת שלכם. הורידו את נכסי ה-release:

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

קבצים אלו מגיעים מה-release המתויג, לכן הפניות ה-image תואמות. קובץ ה-compose מגדיר ארבעה שירותים, וכדאי להכיר את תפקידו של כל אחד מהם לפני ביצוע שינויים:

  • immich-server (ghcr.io/immich-app/immich-server, מכולה immich_server), ה-API וממשק ה-web, המאזין בפורט 2283. הוא מבצע mount לקובצי ה-uploads שלכם בנתיב /data.
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning, מכולה immich_machine_learning), חיפוש CLIP וזיהוי פנים. שומר מודלים שהורדו ב-volume מסוג model-cache. זהו השירות הצורך את מירב הזיכרון.
  • database (מכולה immich_postgres), Postgres עם תוסף ה-vector בשם VectorChord, המפעיל את חיפוש הדמיון. תגית ה-image מקובעת לפי digest ישירות בקובץ ה-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 צריך להצביע על הדיסק הגדול שלכם; אם אתם מתכננים לחבר כונן נתונים (data volume) בהמשך, הגדירו זאת לנתיב ה-mount שלו כבר מההתחלה, כיוון שהעברה לאחר מעשה מחייבת העברת תמונות ממוזערות ועדכון נתיבי הנכסים. כמו כן, DB_DATA_LOCATION חייב להיות על דיסק מקומי: Postgres על שיתוף NFS או SMB עלול להשתבש, והתיעוד מציין זאת במפורש. אם תשתמשו רק באותיות ובספרות ב-DB_PASSWORD, תמנעו מסוג שלם של באגים הקשורים ל-escaping במחרוזות התחברות.

שלב 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 הראשונה מושכת אימג'ים בנפח של כמה ג'יגה-בייט, לכן יש להמתין בסבלנות. ניתן לעקוב אחר ההתקדמות באמצעות sudo docker compose logs -f immich-server; השרת יתעד בלוגים שהוא מאזין בפורט 2283 ברגע שיהיה מוכן. כעת פתחו את http://YOUR_SERVER_IP:2283 בדפדפן. הביקור הראשון יציג אשף Getting Started; החשבון הראשון שתיצרו יהיה חשבון המנהל (admin). הגדירו סיסמה חזקה; חשבון זה הוא בעל ההרשאות להגדרות השרת, ניהול משתמשים ותצורת ה-ML שתצטרכו בהמשך.

שלב 5: האפליקציה לנייד וגיבוי ברקע

התקינו את "Immich" מתוך ה-App Store או ה-Play Store. במסך ההתחברות תתבקשו להזין Server Endpoint URL. הזינו את ה-URL המלא כולל הסכימה, לדוגמה https://photos.example.com (האפליקציה מוסיפה את /api בעצמה). התחברו עם החשבון שיצרתם זה עתה, פתחו את מסך ה-Backup באפליקציה, בחרו את האלבומים לגיבוי (בדרך כלל Camera ו-Screenshots), והפעילו את Background backup. גיבוי ברקע ב-iOS מוגבל על ידי מערכת ההפעלה; העלאות בחזית מתבצעות תמיד, בעוד העלאות ברקע מתבצעות כאשר מערכת ההפעלה מאפשרת זאת.

זהו בדיוק השלב שבו משתמשים נתקלים בקשיים, לכן קראו את שלב 6 לפני שתנסו לפתור בעיות באפליקציה.

שלב 6: HTTPS באמצעות reverse proxy, וכלל ה-URL המלא

האפליקציה לנייד מעדיפה מאוד שימוש ב-HTTPS ברגע שהיא יוצאת מהרשת הביתית שלכם. הציבו reverse proxy לפני פורט 2283 ובצעו שם TLS termination. אם אתם כבר מריצים כמה מכולות, Traefik עם TLS אוטומטי עבור יישומי Docker מרובים היא האפשרות המסודרת ביותר; בלוק labels אחד מנתב את photos.example.com למכולת immich-server ומנפיק עבורכם את התעודה. אם אתם מעדיפים nginx, המדריך Let's Encrypt עם Certbot ו-nginx יספק לכם תעודה ובלוק proxy_pass http://127.0.0.1:2283;. ברגע שה-proxy קיים, הוספת השירות הבא היא לרוב עניין של subdomain חדש; כך ממשק מדיה כמו Halcyon, ה-skin של חנות וידאו משנות ה-90 עבור Jellyfin מסיים לצד Immich על אותו שרת. כך גם לגבי HarnessRouter בניהול עצמי המציב את Codex ו-Claude Code מאחורי API אחד, שנקשר ל-loopback בכוונה תחילה והופך לנגיש רק לאחר שה-proxy מסיים את ה-TLS לפניו, לכן שנו את פרטי ההתחברות כברירת מחדל לפני שתפנו אליו subdomain. עם זאת, לא כל מכולה זקוקה ל-hostname ציבורי: כלי לניהול בלבד כמו סורק אבטחה open-kritt בניהול עצמי עדיף להשאיר מחוץ ל-proxy ולהגיע אליו דרך SSH tunnel במקרים הנדירים שבהם תפתחו את ה-UI שלו. אחרים מדלגים על ה-proxy כיוון ש-HTTP אינה השפה שלהם כלל, ו-שרת relay של RustDesk בניהול עצמי הוא הדוגמה המובהקת לכך; הוא מאזין למספר פורטים של TCP ו-UDP גולמיים ודורש חוקי firewall במקום subdomain. הגדרת proxy אחת חשובה עבור Immich: העלו את מגבלת גודל ההעלאה, כיוון שסרטוני טלפון הם גדולים. ב-nginx מדובר ב-client_max_body_size 50000M; בתוך ה-server block; ברירת המחדל של 1 MB דוחה העלאות וידאו עם 413 Request Entity Too Large. אם ה-proxy שלכם גם עונה לאתגרי Let's Encrypt HTTP-01, ודאו ש-/.well-known/immich עדיין מנותב ל-Immich, ולא ל-handler של האתגר.

הכלל שהאפליקציה אוכפת: ה-endpoint חייב להיות נגיש בדיוק ב-URL שאתם מקלידים. האפליקציה תקבל http://YOUR_SERVER_IP:2283 פשוט (רמז ההתחברות שלה הוא http://your-server-ip:port), אך כל מה שעובר דרך האינטרנט מומלץ שיהיה ב-HTTPS. סכימה שגויה, או כתובת IP ישירה ללא הפורט, הם המקור לשגיאה "the app cannot reach the server", המכוסה ככשל בעל שם בהמשך.

שלב 7: ספריות חיצוניות לעומת העלאות, ייבוא עץ תמונות קיים

קיימות שתי דרכים להכנסת תמונות לתוך Immich, והן אינן זהות.

  • העלאות (Uploads) הן נכסים ש־Immich מחזיקה בבעלותה. האפליקציה או ממשק ההעלאה בדפדפן מעתיקים את הקובץ לתוך UPLOAD_LOCATION. Immich רשאית לשנות את שמם, להעביר או למחוק אותם.
  • ספריות חיצוניות (External libraries) הן ייבוא לקריאה בלבד של קבצים שכבר נמצאים בתיקייה על השרת שלך, עץ Pictures ישן, או ייצוא מ־NAS. Immich מבצעת אינדוקס שלהם במקומם ומציגה אותם בציר הזמן, אך לעולם אינה משנה או מוחקת את הקבצים המקוריים.

כדי לייבא עץ קיים, יש לבצע mount שלו במצב קריאה בלבד לתוך ה־container של השרת. ערוך את docker-compose.yml תחת immich-server: והוסף volume:

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

התוספת :ro מבטיחה ש־Immich לעולם לא תוכל לגעת בקבצים המקוריים. צור מחדש את ה־container בעזרת sudo docker compose up -d, ולאחר מכן בממשק האינטרנט נווט אל האווטאר שלך → Administration → External Libraries → Create Library, בחר את המשתמש הבעלים, לחץ על Add תחת Folders, והזן את הנתיב בתוך ה־container, כלומר /mnt/media/photos, ולא את הנתיב במערכת המארחת (host) שהוא /srv/photos. לחץ על Scan. שימוש בנתיב המארח במקום בנתיב ה־container הוא הטעות הנפוצה ביותר בספריות חיצוניות; הסריקה לא תמצא דבר ותדווח על אפס נכסים.

שלב 8: משמעת השדרוג שדורשת Immich

זהו החלק שמבדיל בין התקנת Immich תקינה לבין כזו שקרסה. Immich משחררת גרסאות בתדירות גבוהה, אינה מבצעת backport לתיקונים ואינה תומכת בביצוע downgrade. התגית הדינמית v3 היא דרך נתמכת רשמית למעקב אחר גרסאות, ו-Immich שואפת להגביל שינויים שוברים לגרסאות major בלבד. עם זאת, המערכת תבצע שדרוג בכל פעם שתריצו pull, בין אם קראתם את הערות השחרור ובין אם לא, ולא ניתן לבטל שדרוג שלא תוכנן מראש. כדאי לאמץ את ההרגל של קיבוע גרסה (pinning) ולאחריו קריאת הערות השחרור עבור כל מכולה (container) בעלת אורך חיים ארוך בשרת; זו הסיבה ש-סוכן KiroCrew בניהול עצמי מקובע לתגית אחת ידועה ותקינה במקום לאפשר לו להשתנות באופן אוטומטי בכל אתחול. המשמעת הנדרשת:

  1. קבעו גרסה. שמרו על IMMICH_VERSION מוגדר לתגית קונקרטית כמו v3.0.2, ולא לתגית הדינמית v3 שמושכת תמיד את גרסת ה-v3.x החדשה ביותר.
  2. קראו את הערות השחרור בכל פעם מחדש לפני השדרוג. שינויים שוברים, במיוחד כאלו הקשורים למסד הנתונים או לתוספי וקטורים, מצוינים שם במפורש. גרסה v3.0 היא דוגמה מובהקת: היא הסירה לחלוטין את pgvecto.rs, ולכן כל מי שעדיין השתמש בתוסף הישן היה חייב להשלים את ההגירה ל-VectorChord (שהוצגה עוד בגרסה v1.133) לפני שיוכל לשדרג.
  3. גבו את מסד הנתונים תחילה (שלב 9). תמיד, אך במיוחד כאשר ההערות מציינות שינויים במסד הנתונים.
  4. הורידו גם את קובץ ה-compose החדש. IMMICH_VERSION מקבע רק את תמונות ה-server וה-ML. תמונת ה-Postgres מקובעת לפי digest בתוך docker-compose.yml, לכן גרסה הדורשת תוסף מסד נתונים חדש יותר מגיעה עם קובץ compose חדש. הורידו מחדש את שני קובצי השחרור, החילו שוב את ערכי ה-.env שלכם, ורק אז בצעו את השדרוג.
  5. עדכנו תחילה את לקוחות המובייל. השרת מתקשר רק עם גרסת ה-major התואמת לו, והאפליקציה בדרך כלל תואמת לגרסת ה-major הנוכחית ולקודמתה. כאשר השרת חדש יותר מהאפליקציה, גרסאות נוכחיות (v3.3.1, נבדק ב-2026-10-10) מציגות התראה על עדכון אפליקציה זמין עם כפתור Update בטלפון, ו-Immich ממליצה לשדרג את כל לקוחות המובייל לפני שדרוג השרת.

הפקודות לביצוע, לאחר שהקבצים החדשים במקומם:

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

שלב 9: גיבויים, dump של מסד הנתונים בתוספת הקבצים המקוריים, ובדיקת תקינות

גיבוי של Immich מורכב משני חלקים, וכל אחד מהם חסר תועלת ללא השני. מסד הנתונים מחזיק את מבנה האלבומים, הפנים, אינדקסי החיפוש והמיפוי בין הנכס לקובץ. ספריית ה-originals מחזיקה את התמונות עצמן. שחזור של אחד ללא השני יניב או תמונות ללא ארגון, או מעטפת ריקה שמצביעה על קבצים חסרים. המבנה הדו-חלקי הזה אינו ייחודי ל-Immich: מוקד תמיכה מסוג Chatwoot באירוח עצמי דורש את אותו שילוב של dump מ-Postgres וספריית ה-uploads שלו, אחרת תיבת הדואר הנכנס המשוחזרת תחזור ללא אף קובץ מצורף. העתקת ספריית הנתונים של Postgres כעץ קבצים נראית כמו קיצור דרך לעומת שלב ה-dump, אך זהו אינו גיבוי שמיש; זו מלכודת שמדריך הגיבוי והשחזור המלא של Immich מפרט, לצד טעות השחזור שמותירה אתכם עם ציר זמן ריק.

בצעו dump למסד הנתונים באמצעות pg_dump מתוך ה-container של Postgres, ספציפית עבור מסד הנתונים immich, ולא עבור כל ה-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, ובמיוחד את תיקיות המשנה library/, upload/ ו-profile/, בעזרת restic, rsync או borg למכונה אחרת או ל-object storage. כל תזמון של משימה זו, בין אם ב-cron או ב-systemd timer, זקוק ליעד שבו יוכל להתריע במקרה של כשל. יחידת OnFailure= של systemd המופנית ל-שרת ה-ntfy שלכם תשלח הודעה לטלפון בלילה שבו ה-dump נכשל, במקום שתגלו זאת רק בזמן שחזור. בצעו קודם את מסד הנתונים ואז את הקבצים, כך שה-dump לעולם לא יפנה לתמונה שגיבוי הקבצים טרם העתיק. ספריות חיצוניות יש לגבות בנפרד מהמקור האמיתי שלהן; Immich אינו הבעלים שלהן.

כעת החלק שכולם מדלגים עליו: בדיקת השחזור. שחזור חייב להתבצע מול stack חדש שהשרת שלו מעולם לא עלה, על גבי image של Postgres שתוסף ה-vector שלו תואם ל-dump – וזו בדיוק הסיבה שלעולם אין לאלתר עם ה-tag של ה-image של מסד הנתונים. על מכונה נקייה עם אותו קובץ compose ו-.env, מחקו כל מצב קודם, העלו רק את מסד הנתונים, ואז טענו את ה-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

השכתוב ב-sed של search_path אינו אופציונלי במסד נתונים מסוג VectorChord; אם תוותרו עליו, השחזור ייקטע באמצע. כאשר ה-stack עולה בחזרה עם ה-originals במקומם, פתחו את ממשק ה-web: אם התמונות והאלבומים שלכם שם, הגיבוי שלכם תקין. אם מעולם לא ביצעתם את הבדיקה הזו, אין לכם גיבוי, יש לכם רק תקווה.

מצבי כשל והודעות שגיאה נפוצות

מכולת ה-ML נסגרת בגלל חוסר בזיכרון (OOM-killed). ה-sudo docker compose logs immich-machine-learning מסתיים בפתאומיות, ה-docker compose ps מציג זאת כ-Restarting, וקוד היציאה הוא 137. ה-sudo dmesg | grep -i oom מאשר זאת: Out of memory: Killed process ... (python3). משימות חיפוש וזיהוי פנים נעצרות. הסיבה היא מחסור ב-RAM עבור המודלים. פתרונות, לפי סדר עדיפות: הוסיפו swap (שלב 1); הגדילו את ה-RAM ב-VPS; או, אם אין ברירה, פתחו את Administration → Settings → Machine Learning Settings וכבו את מתג ה-machine learning הראשי, מה שישבית את כל תכונות ה-ML בבת אחת. כיבוי של Smart Search ו-Facial Recognition בלבד אינו מספיק, כיוון ש-OCR וסוגי מודלים אחרים נשארים פעילים כברירת מחדל. הגיבויים והאלבומים יישמרו, אך תאבדו את היכולת לחיפוש לפי תוכן. הסרת שירות ה-immich-machine-learning מקובץ ה-compose תשיג את אותה תוצאה.

שרת ה-Immich מסרב לעלות לאחר שדרוג. מכולת ה-Postgres עשויה לעבוד כראוי; זהו ה-immich_server שבודק את גרסת ה-vector extension בעת העלייה ומסרב להמשיך, והלוג שלו נכנס ללולאה עם שורה כמו 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 שלה ישנה יותר מהגרסה אליה שודרג המידע שלכם, לרוב כתוצאה מעריכה ידנית של תג התמונה (image tag) או שחזור של dump חדש על תמונה ישנה. הפתרון הוא להשתמש בתמונת Postgres תואמת, להשתמש בקובץ ה-compose מהגרסה (release) התואמת למסד הנתונים שלכם, להימנע מ-downgrade, ולבצע שחזור רק על גבי תמונה תואמת.

האפליקציה לנייד אינה מצליחה להגיע לשרת. מסך ההתחברות מציג שגיאת חיבור כמו Could not connect to server לאחר הזנת ה-URL. הסיבות הנפוצות: הקלדתם http:// בעוד ה-proxy משרת רק https://; התחברתם ישירות ל-backend אך השמטתם את הפורט, ולכן הניסיון היה ל-example.com (פורט 443) במקום ל-example.com:2283; ה-reverse proxy אינו מעביר את /api; או ש-proxy שמטפל באתגרי Let's Encrypt HTTP-01 מנתב את /.well-known/immich למקום אחר שאינו Immich. הפתרון הוא להזין את ה-URL המלא בפורמט https://photos.example.com ולוודא תחילה שהוא נטען בדפדפן של הטלפון. אם הדפדפן עובד והאפליקציה לא, ה-proxy כנראה מסיר את ה-path או מנתב לא נכון את /.well-known/immich, או שהתעודה חתומה עצמית (self-signed), מה שהאפליקציה דוחה עם שגיאת handshake אלא אם תפעילו תמיכה בתעודות חתומות עצמית בהגדרות שלה.

אזל שטח האחסון באמצע תהליך ייבוא. העלאות מתחילות להיכשל, תמונות ממוזערות הופכות לריקות, והלוגים מציגים ENOSPC: no space left on device או, מ-Postgres, את could not extend file ... No space left on device. הפקודה df -h מציגה את נפח ה-UPLOAD_LOCATION כ-100% תפוס. זו הסיבה שיש לתכנן את נפח הדיסק לפני ייבוא ספרייה גדולה. ניתן לשחזר על ידי חיבור נפח אחסון גדול יותר, עצירת ה-stack, העברת ה-UPLOAD_LOCATION אליו, עדכון ה-.env, והפעלה מחדש, או הרחבת הדיסק הקיים אם ספק התשתית מאפשר זאת. Postgres עלול להיתקע אם הוא מתמלא, לכן פנו מקום והפעילו מחדש את מכולת מסד הנתונים לפני שמניחים שקיימת שחיתות במידע.

FAQ

כמה זיכרון RAM ושטח דיסק Immich דורש?

הדרישות הרשמיות של Immich הן מינימום 6 GB של RAM ומומלץ 8 GB. עבור ספריות קטנות, 4 GB עם swap הם הרף המעשי; בכל מקרה מומלץ להגדיר swap, כיוון שהקונטיינר של למידת המכונה (machine-learning) הוא זה שגורם לקפיצות בצריכת המשאבים. עבור שטח דיסק, הקצו את מלוא נפח הספרייה שלכם בתוספת של כ-10% עד 20% עבור תמונות ממוזערות ותצוגות מקדימות. השתמשו באחסון מקומי בלבד; לעולם אל תמקמו את ספריית הנתונים של Postgres על כונן רשת. אם אתם עדיין מתלבטים אילו שירותים נוספים להריץ, ה-מדריך לשירותים לאירוח עצמי ב-2026 מציג את טביעת הרגל של Immich לצד שירותים אחרים.

האם ניתן להריץ את Immich ללא GPU?

כן. הקונטיינר של למידת המכונה פועל היטב על גבי ה-CPU. ה-GPU רק מאיץ את אינדוקס החיפוש החכם ואת קידוד הווידאו (בהינתן גרסת האימג' המתאימה). על גבי ה-CPU, האינדוקס הראשוני של ספרייה גדולה עשוי להימשך שעות ברקע, אך הוא אינו חוסם גיבויים או גלישה. אם השרת שלכם קטן מדי עבור למידת מכונה, ניתן לכבות אותה לחלוטין באמצעות המתג הראשי בהגדרות הניהול ולהמשיך להשתמש בכל שאר התכונות.

כיצד משדרגים את Immich בצורה בטוחה?

קבעו את IMMICH_VERSION לגרסה (tag) ספציפית כמו v3.0.2, קראו את הערות השחרור לפני כל שדרוג, ובצעו גיבוי למסד הנתונים תחילה. מכיוון שהאימג' של Postgres מקובע בתוך docker-compose.yml ולא באמצעות IMMICH_VERSION, הורידו מחדש גם את קובץ ה-compose וגם את example.env מהגרסה המיועדת, החילו מחדש את הערכים שלכם, ולאחר מכן הריצו את docker compose pull && docker compose up -d. לעולם אל תתנו לגרסה להתעדכן ללא השגחה; Immich אינו תומך בביטול שדרוג (downgrade), כך שלא ניתן לבטל שדרוג שלא קראתם עליו מראש.

מה בדיוק עלי לגבות?

שני דברים יחד: pg_dump של מסד הנתונים immich ואת כל ספריית המקורות UPLOAD_LOCATION. מסד הנתונים מכיל אלבומים, פנים ומיפוי של נכסים לקבצים; הספרייה מכילה את התמונות עצמן. שחזור דורש את שניהם בתוספת אימג' של מסד נתונים עם תוסף וקטורי תואם. בצעו את ה-dump של מסד הנתונים ראשון ואת העתקת הקבצים שנייה, ובדקו את השחזור על שרת ניסיוני לפחות פעם אחת; גיבוי שלא נבדק אינו נחשב לגיבוי.

כיצד מייבאים תיקיית תמונות קיימת?

עגנו (mount) את התיקייה במצב קריאה בלבד לתוך הקונטיינר immich-server כ-volume נוסף (למשל - /srv/photos:/mnt/media/photos:ro), צרו מחדש את הקונטיינר, ולאחר מכן ב-Administration → External Libraries צרו ספרייה והוסיפו את הנתיב בתוך הקונטיינר /mnt/media/photos. Immich מבצע אינדוקס לקבצים במקומם ואינו משנה או מוחק אותם לעולם. הטעות הנפוצה ביותר היא הזנת הנתיב של המארח (host) במקום הנתיב של הקונטיינר, מה שגורם לסריקה לא למצוא דבר.