لماذا تستضيف Immich ذاتيًا على خادم VPS
صورك من أكثر البيانات حساسية التي تعهد بها إلى السحابة: الوجوه والأماكن والعادات وتحديد المواقع الجغرافية. يعيد Immich إنتاج تجربة Google Photos، بما في ذلك تطبيقات الجوال، لكن على بنية تحتية تملكها. منذ الإصدار 3.0.0، خُفِّف مكدّسه (stack): جرى حذف امتداد الطرف الثالث pgvecto.rs لصالح فهارس HNSW الأصلية في PostgreSQL (pgvector)، مما يقلّل التبعيات ويُيسّر النسخ الاحتياطي لقاعدة البيانات. يتيح لك خادم VPS مخصّص عزل خدمة التعلّم الآلي النهِمة للموارد، وتحجيم التخزين وفق مكتبة صورك، ومنع استخدام صورك لتدريب نماذج طرف ثالث. وتبقى أنت المتحكّم في التشفير والنسخ الاحتياطي والوصول.
ما تقدّمه استضافة Immich الذاتية
- نسخ احتياطي تلقائي من iOS وAndroid فور التقاط أي صورة، مثل سحابة خاصة.
- التعرّف على الوجوه والبحث الدلالي يُنفَّذان على خادمك، دون إرسال أي بيانات إلى طرف ثالث.
- سعة تساوي قرص خادمك VPS: دون حصة مفروضة ولا فوترة لكل غيغابايت.
- مشاركة الألبومات عبر رابط آمن تتحكم به ويمكنك إبطاله في أي وقت.
- دعم متعدد المستخدمين: لكل فرد من الأسرة أو الفريق مكتبته المعزولة.
- بيانات EXIF الوصفية والخرائط والخطوط الزمنية محفوظة محليًا، دون استغلال إعلاني.
المتطلبات العتادية والبرمجية
Immich هو الأكثر تطلّبًا في هذه السلسلة بسبب خدمة التعلّم الآلي الخاصة به. احسب 4 غيغابايت من RAM كحدّ أدنى، لكن يُنصح بـ6 إلى 8 غيغابايت إذا كان التعرّف على الوجوه يعالج مكتبة صور كبيرة. يتيح لك 2 إلى 4 vCPU استيعاب الفهرسة الأولية دون تجميد الواجهة. التخزين هو العامل الحاسم: خصّص مساحة واسعة، إذ تتجاوز المكتبة العائلية 100 غيغابايت بسرعة؛ وخادم VPS بقرص قابل للتوسّع مثالي. على الجانب البرمجي: Docker وdocker compose الإصدار v2، ونطاق (photos.yourcompany.com)، ومساحة تبديل (swap) كافية لامتصاص ذُرَى نموذج التعلّم الآلي خلال الاستيراد الأول.
نشر Immich خطوة بخطوة
تجهيز الخادم VPS والتخزين
حدّث النظام، وثبّت Docker، ثم أنشئ نقطة تحميل (mount point) مخصّصة للوسائط، مثل /mnt/photos، منفصلة عن قرص النظام. فعّل ما لا يقل عن 2 غيغابايت من swap لخدمة التعلّم الآلي.
جلب ملف compose الرسمي وملف .env
نزّل ملف docker-compose.yml وملف example.env من مستودع Immich باستخدام wget. أعِد تسميته إلى .env، ثم عيّن UPLOAD_LOCATION=/mnt/photos وكلمة مرور قاعدة البيانات وDB_DATA_LOCATION على حجم دائم (persistent volume).
فهم الخدمات الثلاث (v3 فأعلى)
منذ الإصدار 3.0.0، يشغّل المكدّس immich-server وimmich-machine-learning وdatabase (PostgreSQL مع pgvector). لم يعد Redis خدمة منفصلة — فهو مدمج داخل خادم Immich. جرى حذف الامتداد pgvecto.rs: لا تستخدم صورة قاعدة البيانات القديمة ghcr.io/immich-app/postgres، وقد استُبدلت بصورة PostgreSQL 17 الرسمية مع pgvector.
تشغيل المكدّس وإنشاء المسؤول
نفّذ docker compose up -d وانتظر تنزيل صور التعلّم الآلي الكبيرة الحجم. افتح المنفذ 2283 داخليًا، ثم أنشئ حساب المسؤول عبر معالج الويب قبل دعوة مستخدمين آخرين.
التأمين بوكيل عكسي وSSL
ضع Caddy أمام الخادم: photos.yourcompany.com { reverse_proxy immich-server:2283 }. زِد الحدّ الأقصى لحجم الرفع في الوكيل (client_max_body_size في Nginx) لأن مقاطع الفيديو قد تكون كبيرة، وإلا فستفشل عمليات الرفع من الجوال.
إعداد تطبيق الجوال
ثبّت Immich من App Store أو Play Store، وأدخِل https://photos.yourcompany.com كعنوان للخادم، وسجّل الدخول، ثم فعّل النسخ الاحتياطي التلقائي لألبوم الكاميرا لتكرار صورك الجديدة باستمرار.
خلال الاستيراد الأول الضخم، شغّل توليد الصور المصغّرة ومتجهات التعلّم الآلي (embeddings) في فترة قليلة الضغط، وراقب ذاكرة RAM باستخدام docker stats. إذا تشبّعت خدمة التعلّم الآلي، فيمكنك توجيهها مؤقتًا إلى النموذج الأخف في الإعدادات، ثم العودة إلى نموذج أكثر دقة بعد انتهاء الفهرسة الأولية. يمنع ذلك انهيار الخادم VPS تحت حِمل عملية المسح الأولى.
ذاكرة RAM محدودة؟ شغّل Immich بدون حاوية الذكاء الاصطناعي
إذا كان خادم VPS لديك يملك 2 إلى 4 GB فقط من ذاكرة RAM، فأزل خدمة immich-machine-learning من ملف compose. يبدأ Immich بشكل سليم بدونها: يستمر النسخ الاحتياطي عبر الهاتف والخط الزمني والألبومات والمشاركة وعرض الخريطة والبحث اليدوي في العمل — ولا تفقد سوى التعرّف التلقائي على الوجوه والبحث الذكي باللغة الطبيعية. أعِد إضافة حاوية التعلّم الآلي لاحقًا عند الترقية إلى خادم VPS أكبر، وعندها سيفهرس Immich مكتبتك الحالية للبحث بالذكاء الاصطناعي.
حلّ أخطاء التعلّم الآلي
قد تصبح حاوية immich-machine-learning غير قابلة للوصول بصمت لسببين مختلفين: خطأ في إعداد شبكة Docker، أو توقّف صامت بسبب نقص الذاكرة. تتجلّى الأعراض الشائعة في سجلات تحتوي على عبارات مثل Machine learning request to 'http://immich-machine-learning:3003' failed: fetch failed أو مهام متوقفة من نوع Unable to run job handler (AssetDetectFaces). تشخيص السبب لا يستغرق أكثر من خمس دقائق.
تشخيص خدمة التعلّم الآلي وإصلاحها
التحقق من شبكة Docker
نفّذ docker network inspect immich_default وتحقق مما إذا كان كلٌّ من immich-server وimmich-machine-learning يظهران في قائمة Containers. إن غاب أحدهما، راجع حقل networks في ملف docker-compose.yml: يجب أن تشير كلتا الخدمتين إلى الشبكة ذاتها.
الكشف عن إيقاف صامت بسبب نقص الذاكرة
نفّذ dmesg | grep -i oom لترى إن كان النواة قد أوقفت أحد العمليات. تُشير كل رسالة OOM kill إلى اسم الحاوية وحجم الذاكرة المطلوبة. نتيجة فارغة لا تنفي وقوع OOM إذا أُعيد تشغيل النظام منذ ذلك الحين.
مراجعة سجلات حاوية التعلّم الآلي
نفّذ docker logs immich-machine-learning --tail 50 لاستعراض آخر الأسطر. سيظهر أي توقّف منتظم أو خطأ في تحميل النموذج هنا بوضوح أكبر مما تُظهره رسالة OOM الصامتة من النواة.
إعادة تشغيل خدمة التعلّم الآلي
إذا كانت الشبكة صحيحة والذاكرة كافية، أعِد تشغيل هذه الخدمة وحدها بالأمر docker compose restart immich-machine-learning، ثم راقب ما إذا كانت المهام تستأنف في الدقائق التالية عبر docker logs -f immich-machine-learning.
VPS بذاكرة ≤ 2 GB: تعطيل التعلّم الآلي
تجمع خدمة التعلّم الآلي بين CLIP والتعرّف على الوجوه والـOCR، ما يصل إلى نحو 2 GB من ذاكرة RAM في الذروة. على خادم VPS بـ2 GB فقط، أضف MACHINE_LEARNING_ENABLED=false إلى ملف .env الخاص بك، ثم أعِد تشغيل المكدّس بـdocker compose up -d. يستمر النسخ الاحتياطي من الجوال والألبومات والبحث اليدوي في العمل بشكل طبيعي. ستتوفر ميزة التعرّف على الوجوه والبحث بالذكاء الاصطناعي فور انتقالك إلى خادم VPS بـ4 GB من ذاكرة RAM أو أكثر.
الترقية من v2.4.x إلى v3.0.0: المسار الإلزامي
الإصدار 3.0.0 من Immich تغيير معماري جذري: جرى حذف pgvecto.rs وإعادة بناء الفهارس الشعاعية أصليًا بواسطة pgvector (HNSW). هذا الإعادة البناء حاجبة — تُعيد قاعدة البيانات حساب جميع متجهات مكتبة صورك قبل إعادة تشغيل الخادم، وقد يستغرق ذلك من دقائق إلى ساعات بحسب حجم المكتبة. قبل القفز مباشرةً إلى v3، يجب أن تمر أولًا بالإصدار 1.132.3: فهو نقطة المحور التي تُعدّ قاعدة البيانات لهجرة الفهارس. الانطلاق من إصدار أقدم دون المرور بهذا الإصدار الوسيط يُفضي إلى خطأ في ترحيل قاعدة البيانات ويحول دون بدء تشغيل الخادم.
خطوات الترقية v2.4.x ← v3
نسخ احتياطي لقاعدة البيانات قبل أي شيء
قبل أي ترقية، صدّر قاعدة البيانات بالأمر docker exec -t immich_postgres pg_dumpall -c -U postgres > backup_immich_before_v3.sql. احتفظ أيضًا بمجلد UPLOAD_LOCATION. فشل ترحيل HNSW في منتصف الطريق دون نسخة احتياطية يترك قاعدة البيانات في حالة غير متسقة.
الترقية أولًا إلى الإصدار 1.132.3
عدّل docker-compose.yml لاستخدام الإصدار v1.132.3 (وسم دقيق) على immich-server وimmich-machine-learning. نفّذ docker compose pull && docker compose up -d. دع الخادم يبدأ بالكامل وتحقق من استئناف مهام الخلفية دون أخطاء في docker logs immich-server.
التبديل إلى صورة PostgreSQL الرسمية (v3 فقط)
يستخدم v3 صورة PostgreSQL 17 الرسمية مع pgvector، لا الصورة المخصّصة ghcr.io/immich-app/postgres. في ملف docker-compose.yml المرفق مع v3، تشير خدمة database إلى الصورة الرسمية postgres:17-bookworm مع امتداد pgvector. استخدم ملف compose الرسمي للإصدار v3 ولا تُعِد استخدام ملف v2.
الترقية إلى v3.0.0 وانتظار إعادة فهرسة HNSW
استبدل الوسوم بـv3.0.0 واسحب الصور: docker compose pull && docker compose up -d. تبدأ ترحيل HNSW تلقائيًا عند أول تشغيل. خلال هذه المرحلة يظل الخادم متاحًا لكن البحث الذكي والتعرّف على الوجوه موقوفان. تابع التقدم في docker logs -f immich-server: سطر Finished migration يؤكد الانتهاء. على مكتبة مؤلفة من 50 000 صورة، توقّع ما بين 10 و30 دقيقة بحسب عدد vCPU المخصّصة.
التحقق من مهام الخلفية بعد الترحيل
افتح الواجهة الإلكترونية وانتقل إلى الإدارة ← المهام وتأكد من عدم وجود مهام في حالة خطأ. إن توقفت مهام Smart Search أو Face Detection، أعِد تشغيلها من الواجهة. تُحسب متجهات HNSW الجديدة مرة واحدة فقط: الاستيرادات اللاحقة تُفهرَس بشكل طبيعي.
Immich v2 مقابل v3: ما الذي يتغير عمليًا
| الجانب | v2.4.x | v3.0.0 |
|---|---|---|
| امتداد الشعاعي | `pgvecto.rs` (صورة مخصّصة) | `pgvector` HNSW أصلي (PostgreSQL الرسمي) |
| خدمات Docker | 4 (server ،ML ،Redis ،DB) | 3 (server ،ML ،DB — Redis مدمج) |
| ترقية مباشرة من v2 | لا — المرور بـv1.132.3 إلزامي | نعم من v1.132.3 |
| النسخ الاحتياطي لقاعدة البيانات | مرتبط بالصورة المخصّصة | متوافق مع `pg_dump` القياسي |
| إعادة الفهرسة عند البدء | لا | نعم (حاجبة، المدة تعتمد على الحجم) |