مقایسه PhotoPrism و Immich: کدام سرور عکس بهتر است؟
تفاوت اصلی PhotoPrism و Immich در نحوه مدیریت فایلهاست. این راهنما با بررسی مصرف رم، قابلیتهای اپلیکیشن موبایل و دستورات بکآپ Docker، به شما کمک میکند انتخاب درستی داشته باشید.
مقایسه PhotoPrism و Immich: پاسخ کوتاه
انتخاب بین PhotoPrism و Immich، انتخاب بین دو ابزار با وظایف متفاوت است، نه دو نسخه از یک محصول واحد. Immich جایگزینی برای Google Photos است: یک اپلیکیشن موبایل بهطور خودکار از تصاویر دوربین شما نسخه پشتیبان تهیه میکند و تایملاینی که ارائه میدهد برای هر کسی که از گالری گوشی استفاده کرده، آشناست. در مقابل، PhotoPrism کتابخانهای از عکسها را که از قبل دارید سازماندهی میکند: این برنامه پوشههای فایل روی دیسک را ایندکس کرده، متادیتای آنها را میخواند، آنها را روی نقشه قرار میدهد و فایلها را دقیقاً در همان جایی که هستند باقی میگذارد.
اگر مشکل شما این است که «حافظه گوشی پر شده و میخواهم از Google Photos خارج شوم»، Immich را انتخاب کنید. اگر مشکل شما این است که «400 GB عکس روی یک درایو دارم و نمیتوانم چیزی در میان آنها پیدا کنم»، PhotoPrism را انتخاب کنید. هر دو پروژه متنباز هستند، هر دو به عنوان Docker container روی یک VPS معمولی اجرا میشوند و هر دو کتابخانه شما را بدون ارسال هیچ دادهای به شخص ثالث، ایندکس و جستجو میکنند.
تفاوت در فلسفه و چرایی تعیینکنندگی آن
Immich مالک فایلهاست. شما آن را به یک مسیر آپلود اشاره میدهید، اپلیکیشن موبایل یا آپلودر وب، فایلهای اصلی را ارسال میکنند و Immich آنها را در مسیر اختصاصی خود و با نامگذاری خودش ذخیره میکند. پایگاه داده، حقیقتِ مربوط به آلبومها، چهرهها و جستجو را در اختیار دارد. همین طراحی است که تجربه کار با موبایل را بهبود میبخشد، زیرا سرور همیشه از وضعیت کامل تمام داراییها آگاه است.
PhotoPrism فایلها را میخواند. شما پوشهای را که از قبل کنترل آن را در اختیار دارید به صورت originals mount میکنید و 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 گیگابایت رم را به عنوان حداقل و 8 گیگابایت را به عنوان مقدار پیشنهادی ذکر کرده است، با این نکته که یک ماشین با 4 گیگابایت رم تنها در صورتی میتواند آن را اجرا کند که یادگیری ماشین (machine learning) غیرفعال باشد. PhotoPrism مقدار 3 گیگابایت حافظه فیزیکی و دو هسته CPU را مستند کرده و میگوید مقدار رم باید با تعداد هستهها متناسب باشد.
این شکاف واقعی است و از کانتینر یادگیری ماشین ناشی میشود. Immich مدلهای خود را در یک سرویس immich-machine-learning جداگانه اجرا میکند که مدلهای CLIP (آموزش تطبیقی زبان و تصویر) و تشخیص چهره را در حافظه بارگذاری میکند. روی یک ماشین 2 گیگابایتی، هسته سیستمعامل آن کانتینر را میکشد و شما خروج آن با کد 137 را میبینید که در Docker نشاندهنده توقف به دلیل کمبود حافظه (OOM kill) است. مدلهای TensorFlow در PhotoPrism کوچکتر هستند و بهجای مرگ، کارایی آن کاهش مییابد: روی ماشینهایی با 1 گیگابایت رم یا کمتر، بهجای کرش کردن، تبدیل RAW و TensorFlow را غیرفعال میکند.
هر دو پروژه به swap نیاز دارند. مستندات PhotoPrism صراحتاً به نیاز به حداقل 4 گیگابایت 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 -hfree -h اکنون باید یک خط Swap: را چاپ کند که 4.0Gi را نشان میدهد. اگر 0B را چاپ کرد، یعنی swapon با شکست مواجه شده است؛ معمولاً به این دلیل که سیستم فایل از fallocate پشتیبانی نمیکند و sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 جایگزین آن شده است. سقف حافظه کانتینرها نیز در اینجا اهمیت دارد و تنظیم محدودیت حافظه در Docker Compose روشی است که مانع از آن میشود که یک سرویس پرمصرف کل سرور را از کار بیندازد.
یک پیشنیاز دیگر کاربران را غافلگیر میکند. دیتابیس Postgres در Immich باید روی یک سیستم فایل استاندارد Unix با مالکیت و مجوزهای واقعی و روی حافظه محلی قرار داشته باشد، نه روی یک network share. PhotoPrism نیز همین توصیه را درباره فایلهای دیتابیس خود دارد. اجرای هیچکدام از این دو برنامه در حالی که دیتابیس آنها روی یک object store متصلشده (mounted) قرار دارد، ایمن نیست.
نحوه نصب هر یک
هر دو نصب شامل یک فایل compose از سمت فروشنده و یک دستور هستند. ابتدا Docker Engine و افزونه Compose را طبق راهنمای ما برای Docker Compose روی VPS راهاندازی کنید.
Immich فایل compose و یک نمونه فایل environment را با هر release منتشر میکند.
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 استفاده شود، زیرا کاراکترهای خاص باعث خرابی رشته اتصال (connection string) میشوند. سپس آن را اجرا کنید.
docker compose up -d
docker compose psرابط وب روی پورت 2283 پاسخ میدهد. اولین حسابی که از طریق آن صفحه ثبتنام شود، مدیر (administrator) خواهد بود؛ بنابراین بلافاصله به آن دسترسی پیدا کرده و ثبتنام کنید تا یک نمونه (instance) باز روی اینترنت باقی نماند.
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 کاراکتر است و مقدار پیشفرض هرگز نباید روی یک سرور عمومی استفاده شود. همزمان، volume مربوط به originals را روی پوشهای که عکسهای شما در آن قرار دارد تنظیم کنید.
docker compose up -d
docker compose logs -f photoprismPhotoPrism روی پورت 2342 با کاربر admin پاسخ میدهد. هیچکدام از این برنامهها نباید مستقیماً در معرض اینترنت قرار بگیرند. یک reverse proxy با TLS (امنیت لایه انتقال) در مقابل آنها قرار دهید؛ همان ساختاری که برای یک Nextcloud خودمیزبان با Docker، TLS و پشتیبانگیری استفاده میشود.
کدامیک اپلیکیشن موبایل بهتری دارد
این بخشی است که این دو پروژه بیشترین فاصله را با هم دارند و دلیل اصلی انتخاب Immich توسط اکثر کاربران همین است.
Immich اپلیکیشنهای رسمی برای Android و iOS ارائه میدهد. این اپلیکیشنها از قابلیت پشتیبانگیری خودکار در پسزمینه (background backup) برای گالری گوشی برخوردارند؛ به این معنی که عکسهای جدید بدون نیاز به باز کردن برنامه، از گوشی منتقل میشوند. این اپلیکیشن به یک endpoint با پروتکل HTTPS نیاز دارد، بنابراین اگر قصد دارید خارج از خانه از آن استفاده کنید، استفاده از reverse proxy الزامی است.
PhotoPrism هیچ اپلیکیشن بومی (native) رسمی ندارد. این پروژه یک Progressive Web App ارائه میدهد که باید آن را از طریق مرورگر به صفحه اصلی گوشی اضافه کنید. برای همگامسازی از گوشی، مستندات پروژه استفاده از WebDAV (مخفف Web Distributed Authoring and Versioning) را پیشنهاد میدهند. برای این کار، پروژه استفاده از یک اپلیکیشن شخص ثالث به نام PhotoSync را توصیه میکند که باید به دایرکتوری /import/ یا /originals/ از طریق WebDAV متصل شود. این روش کار میکند، اما یک اپلیکیشن پولی شخص ثالث است که وظیفهای را انجام میدهد که Immich آن را درون کلاینت اختصاصی خود گنجانده است.
اگر نیاز اصلی شما پشتیبانگیری خودکار از گوشی برای چندین عضو خانواده است، پاسخ مشخص است: Immich.
یادگیری ماشین واقعاً چه چیزی به شما ارائه میدهد
برنامه Immich با استفاده از CLIP جستجوی معنایی را روی کتابخانه شما انجام میدهد؛ بنابراین یک پرسوجو مانند "دوچرخه قرمز در برف" عکسهایی را پیدا میکند که هیچکس هرگز برچسبگذاری نکرده است. این برنامه همچنین تشخیص و دستهبندی چهره و شناسایی تصاویر تکراری را انجام میدهد. نمایهسازی (indexing) یک واردات بزرگ روی CPU ساعتها در پسزمینه اجرا میشود که امری عادی است و نیازی به GPU (واحد پردازش گرافیکی) ندارد.
برنامه PhotoPrism تصاویر را با استفاده از TensorFlow در دستهبندیهای مختلف طبقهبندی میکند، چهرهها را تشخیص داده و آنها را در گروههای افراد دستهبندی میکند و متادیتای موقعیت مکانی را برای ساخت نقشه مکانها میخواند. نقشه همان قابلیتی است که کاربران به خاطر آن میمانند: کتابخانهای که بر اساس محل وقوع رویداد نمایهسازی شده، روشی کاملاً متفاوت برای مرور بیست سال عکس است. تشخیص چهره در نسخه رایگان Community گنجانده شده است. اشتراکهای پولی Essentials و Plus امکانات اضافی مانند لایههای نقشه غنیتر، نقشهای کاربری بیشتر و رابط مدیریت کاربر را اضافه میکنند که از ژوئیه 2026 با قیمت چند یورو در ماه شروع میشود.
برنامه Immich کاملاً رایگان است و هیچ سطح پولی ندارد. هسته اصلی PhotoPrism رایگان است و امکانات اضافی پولی به صورت اختیاری ارائه میشود.
پشتیبانگیری؛ تعیینکننده ماندگاری دادهها
یک سرور عکس بدون پشتیبان، تنها به اندازه یک خرابی دیسک با از دست رفتن تمام خاطرات یک خانواده فاصله دارد. هر دو برنامه به دو نوع پشتیبان نیاز دارند: پایگاه داده و فایلها.
برای Immich، پایگاه داده را از کانتینر Postgres تخلیه (dump) کرده و محل آپلودها را کپی کنید.
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 میگیرد. یک فایل dump از پایگاه داده به تنهایی چیزی را بازیابی نمیکند، زیرا فقط حاوی متادیتا است.
برای PhotoPrism، ایندکس دستور مخصوص به خود را دارد.
docker compose exec photoprism photoprism backup -i -fاین دستور یک فایل dump از نوع SQL در مسیر storage/backup/ مینویسد. سپس پوشه originals و پوشه storage را کپی کنید. از آنجا که PhotoPrism فایلهای جانبی YAML را نیز برای توصیف هر عکس مینویسد، ایندکس از دست رفته را میتوان تنها از روی فایلها بازسازی کرد؛ این یک مزیت واقعی برای آرشیوی است که قصد دارید دههها آن را حفظ کنید.
هر کدام را که انتخاب میکنید، آن پشتیبانها را طبق یک زمانبندی مشخص از سرور خارج کنید؛ برای این کار از پشتیبانگیری رمزنگاریشده و حذف دادههای تکراری (deduplicated) با restic به فضای ذخیرهسازی راه دور استفاده کنید. پشتیبانی که روی همان دیسکِ کتابخانه اصلی قرار دارد، پشتیبان محسوب نمیشود.
کدامیک را باید اجرا کنید
اگر عکسهای شما روی گوشی هستند، اگر بیش از یک نفر نیاز به پشتیبانگیری از camera roll دارد، و اگر میتوانید 6 GB رم یا بیشتر به سرور اختصاص دهید، Immich را اجرا کنید. این برنامه نزدیکترین جایگزین برای Google Photos است که میتوانید خودتان میزبانی کنید و تجربه کاربری موبایل، نقطه قوت اصلی آن است. راهنمای گامبهگام نصب Immich ما، جزئیات مربوط به اتمام حافظه (memory kills) و تلههای ارتقا را بهطور کامل پوشش میدهد.
اگر از قبل آرشیو عکس روی دیسک دارید، اگر به نقشهها، متادیتا و حفظ ساختار پوشهبندی خود اهمیت میدهید، یا اگر VPS شما 4 GB رم دارد و ترجیح میدهید یک کتابخانه فعال داشته باشید تا سیستمی که درگیر swap است، PhotoPrism را اجرا کنید. این ابزار برای مدیریت و دستهبندی عکسها بهتر است و با سختافزارهای ضعیفتر سازگاری بیشتری دارد.
اجرای همزمان هر دو نیز منطقی است. Immich دریافت روزانه عکس از گوشی را مدیریت میکند و شما میتوانید سالی یکبار عکسهای منتخب را به آرشیو خود منتقل کنید تا PhotoPrism آنها را ایندکس کند. این دو با هم تداخلی ندارند، زیرا PhotoPrism پوشهها را میخواند در حالی که Immich مالکیت فایلهای خودش را دارد.
FAQ
آیا PhotoPrism و Immich میتوانند از یک پوشه عکس مشترک استفاده کنند؟
بهصورت ایمن و دوطرفه، خیر. PhotoPrism پوشه originals را میخواند و فایلهای جانبی YAML را در کنار تصاویر شما مینویسد، در حالی که Immich انتظار دارد مالکیت محتوای محل آپلود خود را در اختیار داشته باشد. شما میتوانید PhotoPrism را به یک کپی فقطخواندنی (read-only) از پوشه library در Immich متصل کنید تا آن را مرور کنید، اما اجازه ندهید هر دو برنامه همزمان فایلهای یکسانی را مدیریت کنند؛ زیرا الگوی ذخیرهسازی Immich ممکن است در حین ایندکسگذاری توسط PhotoPrism، داراییها را جابهجا یا تغییر نام دهد.
آیا Immich برای نگهداری تنها نسخه از عکسهای من به اندازه کافی پایدار است؟
هیچ برنامه self-hosted نباید تنها نسخه از دادههای شما باشد. Immich اغلب تغییرات ساختارشکن (breaking changes) ارائه میدهد و یک docker compose pull بیدقت میتواند باعث شود دیتابیس دیگر بالا نیاید؛ بنابراین نسخه برنامه را ثابت (pin) نگه دارید و پیش از ارتقا، یادداشتهای انتشار (release notes) را مطالعه کنید. فایلهای اصلی را خارج از سرور پشتیبانگیری کنید تا ریسک به حداقل برسد.
چرا کانتینر یادگیری ماشین (machine learning) در Immich مدام ریاستارت میشود؟
این کانتینر به دلیل مصرف بیش از حد حافظه توسط سیستم کشته میشود. دستور docker compose ps را اجرا کنید و به دنبال سرویس یادگیری ماشینی بگردید که با کد 137 خارج شده است؛ این کد نشاندهنده OOM Killer (قاتل کمبود حافظه) در هسته سیستمعامل است. حافظه swap اضافه کنید، برای کانتینر محدودیت حافظه تعیین کنید تا بهجای کشته شدن، محدود (throttle) شود، یا در سیستمهای دارای 4 گیگابایت رم، یادگیری ماشین را کلاً غیرفعال کنید. بدون آن، قابلیت جستجو از کار میافتد اما بقیه بخشهای Immich بهخوبی کار میکنند.
آیا PhotoPrism به MariaDB نیاز دارد یا SQLite کافی است؟
SQLite برای یک کتابخانه شخصی مناسب است، اما PhotoPrism هنگام استفاده از آن، تعداد workerها را به 4 محدود میکند. مستندات توصیه میکنند به MariaDB مهاجرت کنید زیرا همزمانی (concurrency) بالا را بهتر مدیریت میکند. فایل compose که همراه پروژه ارائه میشود، از قبل شامل MariaDB است، بنابراین مسیر توصیهشده همان گزینه پیشفرض است.
چه مقدار فضای دیسک اضافه بر حجم کتابخانه باید در نظر بگیرم؟
برای هر دو برنامه، 10 تا 20 درصد فضای اضافه بر حجم فایلهای اصلی در نظر بگیرید. این فضا برای بندانگشتیها (thumbnails) و پیشنمایشهای ویدیویی تبدیلشده (transcoded) استفاده میشود. برای یک مجموعه 200 گیگابایتی، با در نظر گرفتن فضای دیتابیس، کپی پشتیبان محلی و رشد احتمالی، یک volume با ظرفیت حدود 300 گیگابایت مناسب است.