PhotoPrism أم Immich: أي خادم صور تختار؟
قارن PhotoPrism وImmich بواقعية: الحد الأدنى الفعلي للذاكرة، تطبيقات الهاتف، الخرائط، وأوامر النسخ الاحتياطي الدقيقة المطلوبة لكل منهما على VPS.
PhotoPrism مقابل Immich: الإجابة المختصرة
المقارنة بين PhotoPrism وImmich هي اختيار بين مهمتين مختلفتين، وليست اختياراً بين إصدارين من المنتج نفسه. يحل Immich محل Google Photos: ينسخ تطبيق الهاتف صور الكاميرا احتياطياً تلقائياً، ويبدو المخطط الزمني الناتج مألوفاً لأي شخص ينتقل من معرض صور الهاتف. ينظّم PhotoPrism مكتبة صور موجودة لديك مسبقاً: يفهرس مجلدات الملفات على القرص، ويقرأ بياناتها الوصفية، ويضعها على خريطة، ويترك الملفات في أماكنها تماماً.
اختر Immich إذا كانت المشكلة هي: "هاتفي ممتلئ وأريد التوقف عن استخدام Google Photos". اختر PhotoPrism إذا كانت المشكلة هي: "لدي 400 GB من الصور على قرص، ولا أستطيع العثور على أي شيء بينها". كلاهما مفتوح المصدر، ويعمل كلاهما كحاويات Docker على VPS عادي، ويفهرسان مكتبتك ويتيحان البحث فيها من دون إرسال أي شيء إلى جهة خارجية.
الانقسام الفلسفي، ولماذا يحسم كل شيء
يمتلك Immich الملفات. تحدد له موقعاً للرفع، ويرسل تطبيق الهاتف أو أداة الرفع على الويب النسخ الأصلية إليه، ثم يخزنها Immich ضمن مساره الخاص وبأسماء الملفات الخاصة به. تحتوي قاعدة البيانات على المعلومات المعتمدة حول الألبومات والوجوه والبحث. هذا التصميم هو ما يجعل تجربة الهاتف جيدة، لأن الخادم يعرف دائماً الحالة الكاملة لكل عنصر.
يقرأ PhotoPrism الملفات. تقوم بتركيب مجلد originals تتحكم فيه مسبقاً، ثم ينشئ PhotoPrism فهرساً له. يبقى هيكل مجلداتك ملكاً لك. إذا أزلت PhotoPrism غداً، فستبقى الصور في المجلدات نفسها وبالأسماء نفسها، وسيكون PhotoPrism قد كتب ملفات YAML جانبية بجانبها تصف ما تعلّمه.
يوضح هذا الاختلاف الواحد معظم الفروق الأخرى. يتمتع Immich بدعم قوي للهواتف المحمولة لأنه يتحكم في إدخال الملفات. ويتمتع PhotoPrism بقدرة قوية على تنظيم مكتبة الصور لأنه لا يفرض تغييراً على بنيتك الحالية. يكون Immich الخيار الأفضل لعائلة توجد صورها على الهواتف. ويكون PhotoPrism الخيار الأفضل لأرشيف موجود على قرص.
استنزاف الموارد: يتطلب Immich موارد أكبر
تختلف الحدود الدنيا الموثقة للذاكرة كثيراً، وعلى VPS صغير يكون هذا العامل حاسماً عادةً.
The data behind this chart
[
{
"label": "Immich",
"min_ram_gb": 6,
"recommended_ram_gb": 8
},
{
"label": "PhotoPrism",
"min_ram_gb": 3,
"recommended_ram_gb": 4
}
]يوثّق Immich مقدار 6 GB من RAM كحد أدنى، و8 GB كمقدار موصى به، مع الإشارة إلى أن جهازاً بذاكرة 4 GB لا يستطيع تشغيله إلا بعد تعطيل تعلّم الآلة. ويوثّق PhotoPrism مقدار 3 GB من الذاكرة الفعلية ونواتين لوحدة المعالجة المركزية، ويذكر أن مقدار RAM يجب أن يتوافق مع عدد الأنوية.
الفارق حقيقي، وسببه حاوية تعلّم الآلة. يشغّل Immich نماذجه في خدمة immich-machine-learning منفصلة تحمّل نماذج CLIP (التدريب التبايني المسبق للغة والصور) واكتشاف الوجوه في الذاكرة. على جهاز بذاكرة 2 GB، تنهي النواة هذه الحاوية، وتراها تخرج بالرمز 137، وهو الشكل الذي يظهر به إنهاء Docker لعملية بسبب نفاد الذاكرة. نماذج TensorFlow في PhotoPrism أصغر، ويتراجع أداؤه بدلاً من التوقف: على الأجهزة التي تحتوي على 1 GB أو أقل، يعطّل تحويل RAW وTensorFlow بدلاً من الانهيار.
يتطلب كلا المشروعين swap. وتذكر وثائق PhotoPrism صراحةً ضرورة توفير 4 GB على الأقل من swap على الخادم. أضفها قبل تثبيت أي منهما.
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. إذا طبع 0B، فهذا يعني أن swapon فشل، ويحدث ذلك عادةً لأن نظام الملفات لا يدعم fallocate، فيكون sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 هو البديل. وتهم حدود ذاكرة الحاويات هنا أيضاً، كما أن ضبط حدود الذاكرة في Docker Compose هو الطريقة لمنع خدمة واحدة تستهلك الموارد من إسقاط الخادم بالكامل.
هناك متطلب آخر يفاجئ بعض المستخدمين. يجب أن تكون قاعدة بيانات Postgres الخاصة بـImmich على نظام ملفات Unix عادي يوفّر الملكية والأذونات الفعلية، وعلى تخزين محلي، وليس على مشاركة شبكية مطلقاً. ويذكر PhotoPrism الشرط نفسه لملفات قاعدة بياناته. لا يُعد تشغيل أي من التطبيقين آمناً عندما تكون قاعدة بياناته على مخزن كائنات مركّب.
كيفية تثبيت كل تطبيق
يتكوّن تثبيت كل تطبيق من ملف Compose يوفّره المورّد وأمر واحد. أعدّ Docker Engine وCompose plugin أولاً، كما هو موضح في دليلنا إلى Docker Compose على VPS.
ينشر Immich ملف Compose وملف بيئة نموذجيًا مع كل إصدار.
sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envحرّر .env قبل بدء أي شيء. يحدد UPLOAD_LOCATION مكان حفظ النسخ الأصلية، ويجب تغيير DB_PASSWORD عن القيمة الافتراضية باستخدام المحارف A-Za-z0-9 فقط، لأن المحارف الخاصة تعطل سلسلة الاتصال. ثم شغّل التطبيق.
docker compose up -d
docker compose psتستجيب واجهة الويب على المنفذ 2283. يصبح أول حساب يُسجَّل عبر تلك الصفحة حساب administrator، لذلك افتحها وسجّل الحساب فوراً بدلاً من ترك نسخة متاحة على الإنترنت دون حماية.
يأتي PhotoPrism مع ملف Compose واحد يتضمن MariaDB مسبقاً.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlافتح compose.yaml وغيّر PHOTOPRISM_ADMIN_PASSWORD قبل التشغيل الأول. توضح الوثائق ذلك صراحةً: يبدأ التطبيق باستخدام كلمة المرور الأولية الموجودة في ذلك الملف، والحد الأدنى لطولها هو 8 محارف، ويجب عدم استخدام القيمة الافتراضية مطلقاً على خادم عام. عيّن وحدة التخزين originals إلى المجلد الذي يحتوي على صورك في الوقت نفسه.
docker compose up -d
docker compose logs -f photoprismيستجيب PhotoPrism على المنفذ 2342 باستخدام المستخدم admin. يجب ألا يكون أي من التطبيقين مكشوفاً مباشرة. ضع Reverse Proxy مع TLS (أمن طبقة النقل) أمامهما، باستخدام البنية نفسها للإعداد المستخدم في Nextcloud مستضاف ذاتياً مع Docker وTLS والنسخ الاحتياطية. إذا أصبح ذلك الـVPS يستضيف خدمات تتجاوز الصور، فطبّق القيد نفسه على كل خدمة تضيفها إليه، لأن مرحّل RustDesk مستضاف ذاتياً يحتاج فقط إلى إتاحة منفذيه الخاصين، ولا شيء آخر.
أيّهما يوفّر تطبيق هاتف أفضل؟
هنا يظهر أكبر فرق بين المشروعين، وهو السبب الذي يجعل معظم المستخدمين ينتهون إلى Immich.
يصدر Immich تطبيقات رسمية لنظامَي Android وiOS. وتنفّذ هذه التطبيقات نسخاً احتياطية في الخلفية للصور الموجودة في Camera Roll، ما يعني أن الصور الجديدة تغادر الهاتف دون الحاجة إلى فتح أي شيء. يتطلب التطبيق نقطة نهاية HTTPS، لذلك لا يكون الـReverse Proxy اختيارياً إذا كنت تخطط لاستخدامه خارج المنزل.
لا يوفّر PhotoPrism تطبيقاً أصلياً رسمياً. بل يوفّر progressive web app تضيفه إلى الشاشة الرئيسية من المتصفح، وتوثّق وثائقه استخدام WebDAV (web distributed authoring and versioning) لمزامنة الصور من الهاتف. ويوصي المشروع بتطبيق تابع لجهة خارجية يسمى PhotoSync لهذا الغرض، مع توجيهه إلى الدليل /import/ أو /originals/ عبر WebDAV. يعمل هذا الحل، لكنه يعتمد على تطبيق مدفوع تابع لجهة خارجية لتنفيذ وظيفة ينفذها Immich داخل عميله الخاص.
إذا كان المطلوب هو إجراء نسخ احتياطية تلقائية من هواتف عدة أفراد في العائلة، فالإجابة واضحة: Immich.
ما الذي يقدّمه تعلّم الآلة فعلياً
ينفّذ Immich بحثاً دلالياً في مكتبتك باستخدام CLIP، لذلك يعثر استعلام مثل "دراجة حمراء في الثلج" على صور لم يضع أحد لها وسوماً من قبل. كما ينفّذ اكتشاف الوجوه وتجميعها، واكتشاف الصور المكررة. تستغرق فهرسة استيراد كبير باستخدام CPU ساعات في الخلفية، وهذا أمر طبيعي ولا يتطلب GPU (وحدة معالجة الرسومات).
يصنّف PhotoPrism الصور باستخدام TensorFlow إلى تسميات، ويكتشف الوجوه ويجمعها ضمن أشخاص، ويقرأ البيانات الوصفية للموقع لإنشاء خريطة للأماكن. الخريطة هي الميزة التي تجعل المستخدمين يستمرون في استخدامه: فالمكتبة المفهرسة حسب المكان الذي التُقطت فيه الصور توفّر طريقة مختلفة فعلاً لتصفّح عشرين عاماً من الصور. وتعمل الفكرة نفسها مع مجموعات الوسائط الأخرى، كما أن واجهة Halcyon الأمامية لمتجر فيديوهات من تسعينيات القرن الماضي في Jellyfin هي النسخة الخاصة بالأفلام منها، إذ تتيح التصفّح حسب الرف بدلاً من القائمة. يتوفر التعرّف على الوجوه ضمن إصدار Community المجاني. وتضيف عضويتا Essentials وPlus المدفوعتان مزايا إضافية، مثل طبقات خرائط أكثر تفصيلاً، ومزيداً من أدوار المستخدمين، وواجهة لإدارة المستخدمين، وتبدأ تكلفتهما من بضعة يوروهات شهرياً اعتباراً من July 2026.
Immich مجاني بالكامل ولا يوفّر فئة مدفوعة. أما المكوّن الأساسي في PhotoPrism فهو مجاني، مع إضافات مدفوعة اختيارية.
النسخ الاحتياطية هي ما يحدد إمكانية الاحتفاظ ببياناتك
خادم صور بلا نسخة احتياطية يبعده عطل قرص واحد عن فقدان كل ما تملكه العائلة. يحتاج كلا التطبيقين إلى نسختين احتياطيتين: نسخة من قاعدة البيانات، ونسخة من الملفات.
بالنسبة إلى Immich، أفرغ قاعدة البيانات من حاوية Postgres وانسخ موقع الرفع.
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzثم أنشئ نسخة احتياطية من UPLOAD_LOCATION. المجلدات التي تحتوي على بيانات لا يمكن تعويضها هي upload وlibrary وprofile. يمكن إعادة إنشاء المجلدين thumbs وencoded-video، لكن ذلك يستهلك ساعات من وقت CPU. لا تستعيد نسخة قاعدة البيانات وحدها أي شيء، لأنها تحتوي على البيانات الوصفية فقط.
أما PhotoPrism، فلديه أمر خاص بالفهرس.
docker compose exec photoprism photoprism backup -i -fيكتب هذا الأمر تفريغ SQL ضمن storage/backup/. ثم انسخ المجلد originals والمجلد storage. يكتب PhotoPrism أيضاً ملفات YAML جانبية تصف كل صورة، لذلك يمكن إعادة بناء فهرس مفقود من الملفات وحدها. وهذه ميزة مهمة لأرشيف تخطط للاحتفاظ به لعقود.
أيّاً كان الخيار الذي تختاره، انقل هذه النسخ الاحتياطية خارج الخادم وفق جدول زمني باستخدام نسخ restic احتياطية مشفّرة ومزالة التكرار إلى تخزين بعيد. النسخة الاحتياطية الموجودة على القرص نفسه الذي توجد عليه المكتبة ليست نسخة احتياطية. اجعل المهمة ترسل تنبيهاً عند فشلها، لأن النسخة الاحتياطية التي توقّف تشغيلها بصمت في مارس تبدو تماماً كنسخة نُفِّذت الليلة الماضية إلى أن تحتاج إليها، وعندها سيرسل خادم ntfy مستضاف ذاتياً هذا الفشل إلى هاتفك في المساء نفسه.
أيّهما ينبغي أن تشغّل؟
شغّل Immich إذا كانت صورك موجودة على الهواتف، أو إذا كان أكثر من شخص يحتاج إلى نسخ احتياطي لمحتوى كاميرا الهاتف، أو إذا كان بإمكانك تخصيص 6 GB من ذاكرة RAM للخادم أو أكثر. وهو أقرب خيار إلى Google Photos يمكنك استضافته بنفسك، كما أن تجربة استخدام تطبيق الهاتف هي محور قوته. يشرح دليل تثبيت Immich خطوة بخطوة لدينا حالات توقف الخدمة بسبب نفاد الذاكرة ومشكلات الترقية بالتفصيل.
شغّل PhotoPrism إذا كان لديك أرشيف صور موجود مسبقاً على القرص، أو إذا كنت تهتم بالخرائط والبيانات الوصفية والحفاظ على بنية مجلداتك، أو إذا كان VPS لديك مزوداً بـ4 GB من ذاكرة RAM وتفضّل مكتبة تعمل بدلاً من مكتبة تعتمد على swapping. فهو أداة أفضل لتنظيم الصور، كما أنه أقل استهلاكاً للموارد على الأجهزة محدودة الإمكانات.
من المنطقي أيضاً تشغيل التطبيقين معاً. يتولى Immich استيراد صور الهاتف اليومية، ثم ترتب الصور التي تريد الاحتفاظ بها في أرشيفك مرة واحدة سنوياً، وتدع PhotoPrism يفهرس ذلك الأرشيف. لا يتعارضان، لأن PhotoPrism يقرأ المجلدات، بينما يدير Immich بياناته الخاصة.
FAQ
هل يمكن لـPhotoPrism وImmich مشاركة مجلد الصور نفسه؟
ليس بأمان في الاتجاهين. يقرأ PhotoPrism مجلداً originals ويكتب ملفات YAML جانبية بجوار صورك، بينما يتوقع Immich أن تكون محتويات موقع الرفع مملوكة له. يمكنك توجيه PhotoPrism إلى نسخة للقراءة فقط من مجلد library الخاص بـImmich لتصفحه، لكن لا تسمح للتطبيقين بإدارة الملفات نفسها، لأن قالب التخزين في Immich قد ينقل الأصول أو يعيد تسميتها أثناء الفهرسة، ما يؤثر في PhotoPrism.
هل Immich مستقر بما يكفي للاحتفاظ بالنسخة الوحيدة من صوري؟
لا ينبغي لأي تطبيق مستضاف ذاتياً أن يحتفظ بالنسخة الوحيدة من أي شيء. يطرح Immich تغييرات غير متوافقة كثيراً، وقد يؤدي docker compose pull غير المدروس إلى منع قاعدة البيانات من البدء، لذلك ثبّت الإصدار واقرأ ملاحظات الإصدار قبل الترقية. احتفظ بنسخة احتياطية من الملفات الأصلية خارج الخادم، وبذلك يظل الخطر محدوداً.
لماذا تستمر حاوية التعلم الآلي في Immich في إعادة التشغيل؟
لأن النظام ينهيها بسبب استهلاكها قدراً كبيراً من الذاكرة. شغّل docker compose ps وابحث عن خروج خدمة التعلم الآلي بالرمز 137، وهو رمز قاتل نفاد الذاكرة في النواة. أضف swap، أو حدّد ذاكرة للحاوية لكي يجري تقييدها بدلاً من إنهائها، أو عطّل التعلم الآلي بالكامل على جهاز بذاكرة 4 GB. يتوقف البحث عن العمل من دونه، بينما يعمل باقي Immich بصورة طبيعية.
هل يحتاج PhotoPrism إلى MariaDB، أم تكفي SQLite؟
تعمل SQLite وتناسب مكتبة شخصية، لكن PhotoPrism يقيّد نفسه بأربعة عمال عند استخدامها، وتوصي الوثائق بالتبديل إلى MariaDB لأنها تتعامل مع التزامن العالي بصورة أفضل. يتضمن ملف compose الذي يطرحه المشروع MariaDB بالفعل، لذلك فإن المسار الموصى به هو أيضاً الإعداد الافتراضي.
ما مقدار مساحة القرص التي ينبغي تخصيصها فوق حجم مكتبتي؟
أضف 10 إلى 20 بالمئة إلى حجم النسخ الأصلية، في حالة أي من التطبيقين. يغطي ذلك الصور المصغرة المُنشأة ومعاينات الفيديو المحوّلة. تحتاج مجموعة بحجم 200 GB إلى volume بسعة تقارب 300 GB بعد ترك مساحة لقاعدة البيانات، والنسخة الاحتياطية المحلية، والنمو.