PhotoPrism یا Immich؛ کدام سرور عکس بهتر است؟
مقایسه عملی PhotoPrism و Immich: حداقل RAM واقعی، اپلیکیشن تلفن، نقشهها، مالکیت فایلها و دستورهای دقیق backup برای اجرای هرکدام روی VPS.
PhotoPrism در برابر Immich: پاسخ کوتاه
PhotoPrism در برابر Immich، انتخاب بین دو کاربرد متفاوت است، نه انتخاب بین دو نسخه از یک محصول. Immich جایگزین Google Photos میشود: یک اپلیکیشن تلفن همراه بهصورت خودکار از عکسهای دوربین شما نسخه پشتیبان تهیه میکند و خط زمانی آن برای هر کسی که از گالری تلفن همراه خود فاصله میگیرد، آشناست. PhotoPrism یک کتابخانه عکس موجود را سازماندهی میکند: پوشههای حاوی فایلها را روی دیسک نمایهسازی میکند، فراداده آنها را میخواند، آنها را روی نقشه قرار میدهد و فایلها را دقیقاً در محل قبلیشان نگه میدارد.
اگر مشکل این است که «حافظه تلفن همراه من پر شده است و میخواهم از Google Photos استفاده نکنم»، Immich را انتخاب کنید. اگر مشکل این است که «400 GB عکس روی یک درایو دارم و نمیتوانم چیزی در میان آنها پیدا کنم»، PhotoPrism را انتخاب کنید. هر دو متنباز هستند، هر دو بهصورت کانتینرهای Docker روی یک 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 GB RAM را حداقل و 8 GB را مقدار پیشنهادی اعلام میکند. همچنین یادآوری میکند که یک ماشین 4 GB فقط در صورت خاموش بودن یادگیری ماشین میتواند آن را اجرا کند. PhotoPrism مقدار 3 GB حافظه فیزیکی و 2 هسته CPU را مستند کرده است و میگوید مقدار RAM باید با تعداد هستهها متناسب باشد.
این اختلاف واقعی است و علت آن کانتینر یادگیری ماشین است. Immich مدلهای خود را در یک سرویس جداگانه immich-machine-learning اجرا میکند. این سرویس مدلهای CLIP (پیشآموزش تقابلی زبان و تصویر) و مدلهای تشخیص چهره را در حافظه بارگذاری میکند. در یک سیستم 2 GB، kernel این کانتینر را متوقف میکند و در Docker خروج آن را با کد 137 میبینید. این کد نشاندهنده توقف بهدلیل کمبود حافظه است. مدلهای TensorFlow در PhotoPrism کوچکتر هستند و برنامه بهجای متوقف شدن، قابلیتهای خود را کاهش میدهد. در ماشینهایی با 1 GB یا کمتر، PhotoPrism تبدیل RAW و TensorFlow را غیرفعال میکند تا از کار نیفتد.
هر دو پروژه استفاده از swap را توصیه میکنند. مستندات PhotoPrism صراحتاً وجود حداقل 4 GB swap روی سرور را لازم میداند. پیش از نصب هرکدام از این دو برنامه، 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 شکست خورده است. علت معمول این است که filesystem از fallocate پشتیبانی نمیکند و sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 بهعنوان جایگزین استفاده میشود. سقف حافظه کانتینرها نیز در اینجا اهمیت دارد. تنظیم محدودیتهای حافظه در Docker Compose روش جلوگیری از مصرف تمام منابع سیستم توسط یک سرویس پرمصرف است.
یک نیاز دیگر نیز معمولاً نادیده گرفته میشود. پایگاه داده Postgres در Immich باید روی یک filesystem معمولی Unix، با مالکیت و مجوزهای واقعی و روی حافظه محلی قرار داشته باشد. استفاده از network share مجاز نیست. PhotoPrism نیز همین الزام را برای فایلهای پایگاه داده خود دارد. اجرای هیچیک از این برنامهها با پایگاه داده روی یک object store متصلشده ایمن نیست.
نحوه نصب هرکدام
هر دو نصب شامل یک فایل Compose ارائهشده توسط سازنده و یک فرمان هستند. ابتدا Docker Engine و افزونه Compose را طبق راهنمای ما برای 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 پاسخ میدهد. نخستین حسابی که از طریق این صفحه ثبت شود، مدیر میشود؛ بنابراین فوراً به این صفحه دسترسی پیدا کنید و ثبتنام کنید و نمونه را بهصورت باز روی اینترنت رها نکنید.
PhotoPrism یک فایل Compose ارائه میکند که MariaDB را نیز دربر دارد.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlcompose.yaml را باز کنید و پیش از نخستین اجرا، PHOTOPRISM_ADMIN_PASSWORD را تغییر دهید. مستندات در این مورد صریح هستند: برنامه با همان گذرواژه اولیهای که در این فایل قرار دارد شروع میشود، حداقل طول گذرواژه 8 نویسه است و مقدار پیشفرض را نباید هرگز روی یک سرور عمومی استفاده کرد. همزمان، volume مربوط به originals را روی پوشهای تنظیم کنید که عکسهای شما در آن قرار دارند.
docker compose up -d
docker compose logs -f photoprismPhotoPrism با کاربر admin روی پورت 2342 پاسخ میدهد. هیچیک از این دو برنامه نباید مستقیماً در معرض اینترنت قرار بگیرد. یک reverse proxy مجهز به TLS (امنیت لایه انتقال) را در جلوی آن قرار دهید؛ ساختار این راهاندازی مانند Nextcloud خودمیزبان با Docker، TLS و پشتیبانگیری است.
کدامیک برنامه موبایل بهتری دارد
این دو پروژه در این بخش بیشترین تفاوت را دارند و همین دلیل باعث میشود بیشتر افراد در نهایت به Immich روی بیاورند.
Immich برنامههای رسمی برای Android و iOS ارائه میکند. این برنامهها از پشتیبانگیری پسزمینهای از camera roll پشتیبانی میکنند؛ بنابراین عکسهای جدید بدون باز کردن هیچ برنامهای از تلفن خارج میشوند. برنامه به یک endpoint از نوع HTTPS نیاز دارد؛ بنابراین اگر قصد دارید خارج از خانه از آن استفاده کنید، reverse proxy اختیاری نیست.
PhotoPrism هیچ برنامه native رسمی ندارد. این پروژه یک progressive web app ارائه میکند که میتوانید آن را از مرورگر به صفحه اصلی اضافه کنید و WebDAV (web distributed authoring and versioning) را بهعنوان روش همگامسازی از تلفن مستند کرده است. پروژه برای این کار برنامهای شخص ثالث به نام PhotoSync را پیشنهاد میکند که باید آن را به مسیر /import/ یا /originals/ از طریق WebDAV متصل کنید. این روش کار میکند، اما یک برنامه شخص ثالث پولی این وظیفه را انجام میدهد؛ درحالیکه Immich آن را در client خود انجام میدهد.
اگر پشتیبانگیری خودکار از تلفن چند عضو خانواده نیاز اصلی شماست، انتخاب روشن است: Immich.
یادگیری ماشین در عمل چه چیزی در اختیار شما میگذارد
Immich با استفاده از CLIP در کتابخانه شما جستوجوی معنایی انجام میدهد؛ بنابراین جستوجویی مانند «دوچرخه قرمز در برف» عکسهایی را پیدا میکند که هیچکس قبلاً برای آنها برچسبی تعیین نکرده است. این برنامه تشخیص و خوشهبندی چهره و همچنین تشخیص موارد تکراری را نیز انجام میدهد. نمایهسازی یک import بزرگ روی CPU ساعتها در پسزمینه اجرا میشود. این وضعیت عادی است و به GPU (واحد پردازش گرافیکی) نیاز ندارد.
PhotoPrism تصاویر را با TensorFlow در قالب label طبقهبندی میکند، چهرهها را تشخیص میدهد و آنها را در گروههای مربوط به افراد قرار میدهد. همچنین metadata مکانی را میخواند تا نقشهای از مکانها بسازد. نقشه قابلیتی است که کاربران بهدلیل آن از PhotoPrism استفاده میکنند. کتابخانهای که بر اساس محل ثبت عکسها نمایهسازی شده باشد، روش متفاوتی برای مرور بیست سال عکس ارائه میدهد. تشخیص چهره در نسخه رایگان Community گنجانده شده است. عضویتهای پولی Essentials و Plus امکانات اضافی مانند لایههای غنیتر نقشه، نقشهای کاربری بیشتر و رابط مدیریت کاربران را اضافه میکنند. هزینه این عضویتها تا ژوئیه 2026 از چند یورو در ماه آغاز میشود.
استفاده از Immich کاملاً رایگان است و tier پولی ندارد. هسته PhotoPrism رایگان است و امکانات پولی اختیاری دارد.
پشتیبانگیری تعیین میکند آن را حفظ میکنید یا نه
یک سرور عکس بدون پشتیبانگیری، با یک خرابی دیسک ممکن است تمام عکسهای یک خانواده را از بین ببرد. هر دو برنامه به 2 پشتیبان نیاز دارند: پایگاه داده و فایلها.
برای 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 در فضای ذخیرهسازی راه دور از سرور خارج کنید. پشتیبانی که روی همان دیسک کتابخانه قرار دارد، پشتیبان واقعی نیست.
کدامیک را باید اجرا کنید
اگر عکسهایتان روی تلفنها قرار دارند، اگر بیش از یک نفر باید از camera roll خود نسخه پشتیبان تهیه کند، و اگر میتوانید 6 GB یا بیشتر RAM در اختیار سرور بگذارید، Immich را اجرا کنید. این نرمافزار نزدیکترین گزینه به Google Photos است که میتوانید روی سرور خودتان میزبانی کنید و تجربه کاربری موبایل، نقطه قوت اصلی آن است. راهنمای گامبهگام نصب Immich ما جزئیات مربوط به توقفهای ناشی از کمبود حافظه و مشکلات ارتقا را توضیح میدهد.
اگر از قبل آرشیو عکس روی disk دارید، به نقشهها و فرادادهها اهمیت میدهید و میخواهید ساختار پوشههای خودتان را حفظ کنید، یا اگر VPS شما 4 GB RAM دارد و بهجای کتابخانهای که مدام از swap استفاده میکند، یک کتابخانه عملیاتی میخواهید، PhotoPrism را اجرا کنید. PhotoPrism ابزار بهتری برای ساماندهی است و فشار کمتری به سختافزارهای ضعیف وارد میکند.
اجرای هر دو گزینه نیز منطقی است. Immich عکسهای روزانه تلفن را دریافت میکند و شما سالی یکبار عکسهای منتخب را در آرشیو خود مرتب میکنید و اجازه میدهید PhotoPrism آنها را index کند. این دو با یکدیگر تداخل ندارند، زیرا PhotoPrism پوشهها را میخواند و Immich مالک دادههای خودش است.
FAQ
آیا PhotoPrism و Immich میتوانند از یک پوشه عکس مشترک استفاده کنند؟
استفاده از یک پوشه مشترک در هر دو جهت ایمن نیست. PhotoPrism یک پوشه originals را میخواند و فایلهای جانبی YAML را در کنار تصاویر شما مینویسد، در حالی که Immich انتظار دارد مالک محتوای محل بارگذاری خود باشد. میتوانید PhotoPrism را به یک کپی فقطخواندنی از پوشه library مربوط به Immich متصل کنید تا آن را مرور کند؛ اما اجازه ندهید هر دو برنامه فایلهای یکسانی را مدیریت کنند، زیرا الگوی ذخیرهسازی Immich ممکن است هنگام نمایهسازی، داراییها را زیر نظر PhotoPrism جابهجا یا نام آنها را تغییر دهد.
آیا Immich برای نگهداری تنها کپی عکسها بهاندازه کافی پایدار است؟
هیچ برنامه self-hosted نباید تنها کپی هیچ چیزی را در اختیار داشته باشد. Immich اغلب تغییرات ناسازگار منتشر میکند و یک docker compose pull بیدقت میتواند باعث شود پایگاه داده نتواند راهاندازی شود؛ بنابراین نسخه خود را ثابت نگه دارید و پیش از ارتقا، یادداشتهای انتشار را بخوانید. فایلهای اصلی را خارج از سرور پشتیبانگیری کنید تا ریسک پایین بماند.
چرا container یادگیری ماشین Immich مرتباً راهاندازی مجدد میشود؟
این container بهدلیل مصرف بیش از حد حافظه متوقف میشود. دستور docker compose ps را اجرا کنید و بهدنبال خروج سرویس یادگیری ماشین با کد 137 بگردید؛ این کد نشان میدهد kernel، فرایند out of memory killer را اجرا کرده است. swap اضافه کنید، یا برای container محدودیت حافظه تعیین کنید تا بهجای متوقف شدن، مصرف آن محدود شود، یا در یک ماشین 4 GB، یادگیری ماشین را کاملاً غیرفعال کنید. بدون آن، جستوجو کار نمیکند؛ اما بقیه Immich بهدرستی اجرا میشود.
آیا PhotoPrism به MariaDB نیاز دارد، یا SQLite کافی است؟
SQLite کار میکند و برای یک کتابخانه شخصی مناسب است، اما PhotoPrism هنگام استفاده از آن تعداد workerها را به 4 محدود میکند. مستندات توصیه میکنند به MariaDB تغییر دهید، زیرا MariaDB همزمانی بالا را بهتر مدیریت میکند. فایل compose که پروژه منتشر میکند، از قبل MariaDB را نیز شامل میشود؛ بنابراین مسیر توصیهشده، مسیر پیشفرض هم هست.
برای فضای دیسک، علاوه بر اندازه کتابخانهام، چه مقدار باید در نظر بگیرم؟
برای هر دو برنامه، 10 تا 20 درصد به اندازه فایلهای اصلی خود اضافه کنید. این مقدار، thumbnailهای تولیدشده و پیشنمایشهای ویدئویی transcodeشده را پوشش میدهد. یک مجموعه 200 GB، پس از در نظر گرفتن فضای لازم برای پایگاه داده، کپی پشتیبان محلی و رشد آینده، تقریباً به یک volume با ظرفیت 300 GB نیاز دارد.