התקנת Immich בשרת עצמי: דרישות זיכרון ועדכונים בטוחים
למדו איך להריץ Immich עם 6GB RAM ולמנוע שגיאת exit 137. המדריך מסביר איך להגדיר HTTPS בפורט 2283 ומה לעשות כשגרסה v3 נתקעת בגלל חוסר תאימות למסד הנתונים pgvecto.rs.
מה אתם בונים
Immich הוא שירות אירוח עצמי לגיבוי תמונות וסרטונים, המהווה תחליף אמיתי ל-Google Photos. הוא כולל אפליקציה לטלפון המעלה את גלריית התמונות שלכם ברקע, ציר זמן, אלבומים, זיהוי פנים וחיפוש מבוסס למידת מכונה שמוצא "חוף ים" או אדם מסוים מבלי שתצטרכו לתייג דבר. אתם מריצים אותו על VPS שבבעלותכם, הקבצים המקוריים נשארים על הדיסק שלכם, ואיש אינו סורק אותם כדי למכור לכם מוצרים. אם אתם עדיין מתלבטים בינו לבין החלופה המובנת מאליה, השוואת ה-PhotoPrism ו-Immich שלנו מציגה את דרישות ה-RAM, האפליקציות לטלפון ופקודות הגיבוי שלהם זו לצד זו.
ההתקנה מורכבת מארבע מכולות (containers) מתוך קובץ ה-Docker Compose של הפרויקט. חלק זה אורך עשר דקות. שאר המדריך הזה מתמקד בנקודות המורכבות: מכולת למידת המכונה צורכת זיכרון רב בשרתים קטנים, קובצי המקור תופסים שטח דיסק במהירות, האפליקציה לנייד מסרבת לעבוד מול שרת ב-HTTP לא מוצפן, ו-Immich משחרר עדכונים עם שינויים שוברים (breaking changes) בתדירות גבוהה מספיק, כך שפקודת 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 -hfree -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 צריך להצביע על הדיסק הגדול שלכם; אם אתם מתכננים לחבר כונן נתונים בהמשך, הגדירו זאת לנתיב ה-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, וכלל ה-full-URL
אפליקציית המובייל זקוקה ל־HTTPS. הציבו reverse proxy לפני פורט 2283, ובצעו שם את סיום ה־TLS. אם כבר מופעלות אצלכם כמה מכולות, Traefik עם TLS אוטומטי לכמה יישומי Docker הוא האפשרות המסודרת ביותר. בלוק labels אחד מנתב את photos.example.com אל מכולת immich-server ומוריד עבורכם את התעודה. אם אתם מעדיפים nginx, המדריך Let's Encrypt עם Certbot ו־nginx מפיק עבורכם תעודה ובלוק proxy_pass http://127.0.0.1:2283;. לאחר שה־proxy קיים, הוספת השירות הבא מסתכמת בדרך כלל בתת־מתחם חדש. כך ממשק מדיה כמו Halcyon, המעטפת של חנות הווידאו משנות ה־90 עבור Jellyfin יכול לפעול לצד Immich באותו שרת. הדבר נכון גם לגבי HarnessRouter באירוח עצמי, שמציב את Codex ואת Claude Code מאחורי API אחד. הוא מקושר בכוונה ל־loopback, ונעשה נגיש רק לאחר שה־proxy מבצע לפניו סיום TLS. לכן שנו את פרטי הכניסה המוגדרים כברירת מחדל לפני שתפנו אליו תת־מתחם. עם זאת, לא כל מכולה זקוקה לשם מארח ציבורי. כלי המיועד למנהלי מערכת בלבד, כמו סורק אבטחה open-kritt באירוח עצמי, עדיף להשאיר מחוץ ל־proxy לחלוטין, ולגשת לממשק שלו דרך מנהרת SSH רק במקרים הנדירים שבהם פותחים אותו. שירותים אחרים אינם משתמשים ב־proxy, משום ש־HTTP אינו הפרוטוקול שלהם כלל. שרת ממסר RustDesk באירוח עצמי הוא דוגמה ברורה לכך: הוא מאזין לכמה פורטי TCP ו־UDP גולמיים, וזקוק לכללי firewall במקום לתת־מתחם. הגדרה אחת של ה־proxy חשובה עבור Immich: הגדילו את מגבלת גודל ההעלאה, משום שסרטונים מטלפונים גדולים. ב־nginx זו ההגדרה client_max_body_size 50000M; בתוך בלוק ה־server. ערך ברירת המחדל של 1 MB דוחה העלאות וידאו באמצעות 413 Request Entity Too Large.
הכלל שהאפליקציה אוכפת: ה-endpoint חייב להיות נגיש, ובפועל, הוא חייב להיות HTTPS. כתובות http://, או כתובת 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. מעקב עיוור אחרי ה־tag הצף v3 יוביל בסופו של דבר לשבירת מסד הנתונים שלכם. כדאי לאמץ את ההרגל של קיבוע גרסה וקריאת הערות השחרור עבור כל מכולה בעלת חיים ארוכים בשרת; זו הסיבה ש-סוכן KiroCrew מאוחסן עצמית מקובע ל־tag ידוע ותקין במקום לאפשר לו להתעדכן באופן אוטומטי בכל הפעלה מחדש. המשמעת הנדרשת:
- קבעו גרסה. ודאו ש־
IMMICH_VERSIONמוגדר ל־tag קונקרטי כמוv3.0.2, ולא ל־v3הצף שתמיד מושך את גרסת ה־v3.x החדשה ביותר. - קראו את הערות השחרור בכל פעם לפני השדרוג. שינויים שעלולים לשבור תאימות, במיוחד כאלו הקשורים למסד הנתונים או לתוספי וקטורים, מצוינים שם. גרסה v3.0 היא דוגמה מובהקת: היא הסירה לחלוטין את pgvecto.rs, ולכן כל מי שעדיין השתמש בתוסף הישן היה חייב להשלים את ההגירה ל־VectorChord (שהוצגה עוד בגרסה v1.133) לפני שיוכל לשדרג.
- גבו את מסד הנתונים תחילה (שלב 9). תמיד, אך במיוחד כאשר ההערות מזכירות את מסד הנתונים.
- הורידו גם את קובץ ה-compose החדש.
IMMICH_VERSIONמקבע רק את תמונות השרת וה-ML. תמונת ה-Postgres מקובעת לפי digest בתוךdocker-compose.yml, לכן גרסה שדורשת תוסף מסד נתונים חדש יותר מגיעה עם קובץ compose חדש. הורידו מחדש את שני קובצי השחרור, החילו שוב את ערכי ה-.envשלכם, ורק אז בצעו את השדרוג. - עדכנו את לקוחות המובייל בסמוך לזמן השדרוג. השרת מתקשר רק עם גרסה ראשית תואמת, והאפליקציה תומכת בגרסה הראשית הנוכחית ובזו שקדמה לה. שרת שקפץ גרסה לפני האפליקציה יציג
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: גיבויים, dump של מסד הנתונים בתוספת הקבצים המקוריים, ובדיקת תקינות
גיבוי של Immich מורכב משני חלקים, ושימוש באחד ללא השני אינו מועיל. מסד הנתונים מכיל את מבנה האלבומים, פנים, אינדקסי חיפוש והמיפוי בין הנכסים לקבצים. ספריית המקור (originals directory) מכילה את התמונות עצמן. שחזור של אחד ללא השני יוביל למצב שבו יש לכם תמונות ללא ארגון, או מעטפת ריקה שמצביעה על קבצים חסרים.
בצעו 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 למכונה אחרת או לאחסון אובייקטים. בצעו תחילה את גיבוי מסד הנתונים ורק לאחר מכן את גיבוי הקבצים, כדי שה-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 עולה בחזרה עם הקבצים המקוריים במקומם, פתחו את ממשק ה-web: אם התמונות והאלבומים שלכם שם, הגיבוי שלכם תקין. אם מעולם לא ביצעתם בדיקה זו, אין לכם גיבוי, יש לכם רק תקווה.
מצבי כשל והודעות שגיאה נפוצות
מכולת ה-ML נסגרת עקב OOM-kill. ה-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); הקצו ל-VPS יותר RAM; או, אם אין ברירה, השביתו את ה-ML ב-Administration → Settings → Machine Learning Settings על ידי כיבוי Smart Search ו-Facial Recognition. הגיבויים והאלבומים יישמרו, אך תאבדו את היכולת לבצע חיפוש לפי תוכן. הסרת שירות ה-immich-machine-learning מקובץ ה-compose תשיג תוצאה זהה.
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.. הסיבה היא תמונת בסיס נתונים שגרסת התוסף שלה ישנה יותר מהגרסה אליה שודרגו הנתונים שלכם; זה קורה כמעט תמיד עקב עריכה ידנית של תג התמונה או שחזור dump חדש על גבי תמונה ישנה. הפתרון הוא להשתמש בתמונת Postgres תואמת, להשתמש בקובץ ה-compose מהגרסה התואמת לבסיס הנתונים שלכם, להימנע מ-downgrade, ולבצע שחזור רק על גבי תמונה תואמת.
האפליקציה לנייד לא מצליחה להגיע לשרת. מסך ההתחברות מציג שגיאת חיבור / Server is not reachable לאחר הזנת ה-URL. שלוש סיבות אפשריות: הקלדתם http:// בעוד ה-proxy משרת רק https://; התחברתם ישירות ל-backend אך השמטתם את הפורט, ולכן המערכת ניסתה example.com (פורט 443) במקום example.com:2283; או שה-reverse proxy אינו מעביר את /api. הפתרון הוא להזין את ה-URL המלא https://photos.example.com ולוודא תחילה שהוא נטען בדפדפן של הטלפון. אם הדפדפן עובד והאפליקציה לא, ייתכן שה-proxy מסיר את ה-path או שהתעודה חתומה עצמית, והאפליקציה דוחה תעודות שאינן מהימנות.
אזל שטח הדיסק באמצע ייבוא. העלאות מתחילות להיכשל, תמונות ממוזערות הופכות לריקות, והלוגים מציגים 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?
כן. מכולת ה-machine-learning פועלת היטב על ה-CPU. ה-GPU רק מאיץ את אינדוקס החיפוש החכם ואת קידוד הווידאו (בהתאם לגרסת האימג'). על גבי CPU, האינדוקס הראשוני של ספרייה גדולה עשוי להימשך שעות ברקע, אך הוא אינו חוסם גיבויים או גלישה. אם השרת שלכם קטן מדי עבור ML, ניתן לבטל את החיפוש החכם (Smart Search) וזיהוי הפנים (Facial Recognition) בהגדרות הניהול ולהמשיך להשתמש בכל שאר התכונות.
כיצד לשדרג את Immich בצורה בטוחה?
קבעו את IMMICH_VERSION לגרסה ספציפית (tag) כמו v3.0.2, קראו את הערות השחרור לפני כל שדרוג, ובצעו גיבוי למסד הנתונים תחילה. מכיוון שהאימג' של Postgres מקובע בתוך docker-compose.yml ולא באמצעות IMMICH_VERSION, הורידו מחדש גם את קובץ ה-compose וגם את example.env מהגרסה המבוקשת, החילו מחדש את הערכים שלכם, ולאחר מכן הריצו את docker compose pull && docker compose up -d. לעולם אל תתנו לגרסה להתעדכן ללא השגחה; Immich משחררת שינויים שעלולים לשבור תאימות (breaking changes) ואינה תומכת בחזרה לגרסה קודמת (downgrade).
מה בדיוק עלי לגבות?
שני דברים יחד: pg_dump של מסד הנתונים immich ואת כל ספריית המקורות UPLOAD_LOCATION. מסד הנתונים מכיל אלבומים, פנים ומיפוי של נכסים לקבצים; הספרייה מכילה את התמונות עצמן. שחזור דורש את שניהם בתוספת אימג' של מסד נתונים עם תוסף וקטורי תואם. בצעו את ה-dump של מסד הנתונים ראשון ואת העתקת הקבצים שנייה. בדקו את השחזור על שרת ניסיוני לפחות פעם אחת; גיבוי שלא נבדק אינו גיבוי.
כיצד לייבא את תיקיית התמונות הקיימת שלי?
בצעו mount לתיקייה במצב קריאה בלבד (read-only) לתוך המכולה immich-server כ-volume נוסף (לדוגמה - /srv/photos:/mnt/media/photos:ro), צרו מחדש את המכולה, ולאחר מכן ב-Administration → External Libraries צרו ספרייה והוסיפו את נתיב ה-container שהוא /mnt/media/photos. Immich מבצעת אינדוקס לקבצים במקומם ואינה משנה או מוחקת אותם לעולם. הטעות הנפוצה ביותר היא הזנת הנתיב של ה-host במקום נתיב ה-container, מה שגורם לסריקה לא למצוא דבר.