PhotoPrism или Immich: что выбрать для фотоархива?
Сравнение систем PhotoPrism и Immich для хранения фото. Узнайте различия в работе с Docker, требования к RAM, особенности мобильных приложений и методы резервного копирования данных.
PhotoPrism против Immich: краткий ответ
Выбор между PhotoPrism и Immich — это выбор между двумя разными задачами, а не между двумя версиями одного продукта. Immich заменяет Google Photos: мобильное приложение автоматически создает резервные копии снимков с камеры, а временная шкала выглядит привычно для любого, кто переходит с галереи смартфона. PhotoPrism организует уже имеющуюся библиотеку фотографий: он индексирует папки с файлами на диске, считывает их метаданные, отображает их на карте и оставляет файлы на прежних местах.
Выбирайте Immich, если ваша проблема звучит как «память телефона переполнена, и я хочу отказаться от Google Photos». Выбирайте PhotoPrism, если ваша проблема — «у меня на диске 400 GB фотографий, и я не могу в них ничего найти». Оба проекта имеют открытый исходный код, оба запускаются как Docker контейнеры на обычном VPS, и оба индексируют и позволяют искать по вашей библиотеке, не передавая данные третьим лицам.
Разделение философии и почему оно определяет всё
Immich владеет файлами. Вы указываете путь к папке загрузки, мобильное приложение или веб-загрузчик отправляют оригиналы, и Immich сохраняет их в своем каталоге с собственной структурой именования. База данных хранит актуальную информацию об альбомах, лицах и результатах поиска. Такая архитектура обеспечивает качественную работу мобильного приложения, так как сервер всегда знает полное состояние каждого ресурса.
PhotoPrism читает файлы. Вы монтируете папку originals, которой уже управляете, а PhotoPrism строит по ней индекс. Ваше дерево каталогов остается неизменным. Если вы удалите PhotoPrism завтра, фотографии останутся на своих местах в тех же папках с теми же именами. Sidecar-файлы в формате YAML, в которых PhotoPrism сохраняет результаты анализа, останутся в его собственной папке хранения, где они находятся по умолчанию.
Это единственное различие объясняет почти всё остальное. У Immich отличная поддержка мобильных устройств, потому что он контролирует процесс загрузки. У PhotoPrism сильные инструменты для управления библиотекой, потому что он не конфликтует с вашей существующей структурой. Immich — лучшее решение для семьи, чьи фотографии хранятся на телефонах. PhotoPrism — лучшее решение для архива, который хранится на диске.
Аппетиты к «железу»: Immich требует больше
Документированные минимальные требования к оперативной памяти сильно различаются, и на небольшом VPS это обычно становится решающим фактором.
Данные, на которых построен график
[
{
"label": "Immich",
"min_ram_gb": 6
},
{
"label": "PhotoPrism",
"min_ram_gb": 3
}
]Immich указывает 6 ГБ ОЗУ как минимум и 8 ГБ как рекомендуемый объем, отмечая, что на машине с 4 ГБ приложение будет работать только при отключенном машинном обучении. PhotoPrism указывает 3 ГБ физической памяти и два ядра процессора, добавляя, что сверх этого минимума объем ОЗУ должен соответствовать количеству ядер.
Разрыв реален, и причина кроется в контейнере машинного обучения. Immich запускает свои модели в отдельном сервисе immich-machine-learning, который загружает в память модели CLIP (contrastive language image pretraining) и распознавания лиц. На машине с 2 ГБ ядро убивает этот контейнер, и вы видите выход с кодом 137 — это статус процесса, завершенного сигналом 9, что в Docker означает нехватку памяти (OOM kill). Встроенные модели PhotoPrism работают на ONNX; согласно документации, они обычно хорошо показывают себя на любом оборудовании. Также предусмотрен механизм отката для ограниченной памяти: на машинах с 1 ГБ или менее отключаются конвертация RAW и распознавание лиц. Однако это не гарантирует стабильность. Ниже минимального порога в 3 ГБ проект предупреждает о нестабильности и проблемах с производительностью, поэтому воспринимайте этот порог как абсолютный минимум.
Документация PhotoPrism прямо указывает на необходимость наличия не менее 4 ГБ swap на сервере. В требованиях Immich 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 -hfree -h теперь должен выводить строку Swap:, показывающую 4.0Gi. Если выводится 0B, значит, swapon завершился неудачей — обычно из-за того, что файловая система не поддерживает fallocate, и sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 используется как резервный вариант. Ограничения памяти контейнеров здесь также важны, и настройка лимитов памяти в Docker Compose — это способ предотвратить ситуацию, когда один «прожорливый» сервис обрушивает всю систему. Исключение — сам PhotoPrism: его документация не рекомендует устанавливать жесткий лимит памяти для контейнера, так как индексация больших файлов кратковременно требует дополнительных ресурсов, и лимит может привести к неожиданным перезапускам.
Есть еще одно требование, на котором часто спотыкаются. База данных Postgres для Immich должна находиться на обычной файловой системе Unix с корректными правами доступа и владельцем, на локальном хранилище, а не на сетевом диске. PhotoPrism также предупреждает, что нельзя хранить файлы базы данных в общей сетевой папке, и называет локальный SSD лучшим местом для них. Ни одно из этих приложений нельзя безопасно запускать, если база данных расположена на смонтированном объектном хранилище.
Как установить каждый из них
Обе установки состоят из 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 поставляется с рабочими значениями по умолчанию, и Immich рекомендует изменить его на случайный пароль, хотя это и не является обязательным. Postgres не выставляется наружу, поэтому пароль используется только для локальной аутентификации, но установка случайного значения ничего не стоит. Используйте только символы A-Za-z0-9, так как в документации Immich указано, что другие символы могут вызвать проблемы при разборе значения Docker. Затем запустите его.
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.yamlОткройте compose.yaml и измените PHOTOPRISM_ADMIN_PASSWORD перед первым запуском. Документация прямо говорит об этом: приложение запускается с тем начальным паролем, который указан в этом файле, минимальная длина составляет 8 символов, и значение по умолчанию никогда не должно использоваться на публичном сервере. Одновременно с этим установите том originals на папку, содержащую ваши фотографии.
docker compose up -d
docker compose logs -f photoprismPhotoPrism отвечает на порту 2342 с пользователем admin. Ни одно из приложений не должно быть выставлено напрямую. Установите перед ними обратный прокси с TLS (transport layer security) — такую же конфигурацию, которая используется для self-hosted Nextcloud с Docker, TLS и резервными копиями, или держите сервер закрытым и подключайтесь к нему через VPN. Если на этом VPS будет размещено что-то помимо фотографий, применяйте те же ограничения к каждому добавляемому сервису, поскольку для self-hosted RustDesk relay требуется доступ только к его собственным двум портам и больше ни к чему.
Какое мобильное приложение лучше
В этом аспекте проекты максимально различаются, и именно по этой причине большинство пользователей выбирают Immich.
Immich выпускает официальные приложения для Android и iOS. Они выполняют фоновое резервное копирование фотопленки: новые фотографии отправляются на сервер без необходимости открывать приложение. Для доступа вне дома в документации Immich описаны три способа: VPN (например, WireGuard или OpenVPN), Tailscale или reverse proxy с HTTPS. Reverse proxy позволяет мобильным приложениям подключаться без использования VPN-клиента на каждом устройстве. Immich предупреждает, что нельзя открывать порт 2283 напрямую в интернет без дополнительной настройки.
У PhotoPrism нет официального нативного приложения. Проект предоставляет прогрессивное веб-приложение (PWA), которое можно добавить на главный экран из браузера. Для синхронизации с телефона документация предлагает использовать WebDAV (web distributed authoring and versioning). Разработчики рекомендуют стороннее приложение PhotoSync, настроенное на работу с директорией /import/ или /originals/ по протоколу WebDAV. Это работает, но требует использования платного стороннего ПО для выполнения задачи, которую Immich решает встроенными средствами клиента.
Если необходимо автоматическое резервное копирование фотографий для нескольких членов семьи, выбор очевиден — Immich.
Что на самом деле дает машинное обучение
Immich выполняет семантический поиск по вашей библиотеке с помощью CLIP, поэтому запрос вроде «красный велосипед на снегу» найдет фотографии, которые никто никогда не помечал тегами. Также приложение выполняет распознавание и кластеризацию лиц, а также поиск дубликатов. Индексация большого объема импортированных данных на CPU может занимать часы в фоновом режиме — это нормально и не требует GPU (графического процессора).
PhotoPrism классифицирует изображения по меткам с помощью встроенной модели ONNX, распознает лица и группирует их по людям с помощью моделей ONNX, а также считывает метаданные геолокации для построения карты мест. Файл vision.yml в папке конфигурации позволяет заменить стандартные средства на Ollama или OpenAI для генерации меток и описаний, если это необходимо. Карта — это та функция, ради которой пользователи остаются в системе: библиотека, проиндексированная по местам событий, — это принципиально иной способ просмотра двадцатилетних архивов фотографий. Та же идея работает и с другими медиаколлекциями: интерфейс Halcyon в стиле видеопроката 90-х для Jellyfin — это кино-версия такого подхода, где просмотр идет по «полкам», а не по спискам. Распознавание лиц включено в бесплатную версию Community. Платные подписки Essentials и Plus добавляют дополнительные возможности, такие как более детальные слои карт, расширенные роли пользователей и интерфейс управления ими; стоимость начинается от нескольких евро в месяц при ежегодной оплате (по состоянию на октябрь 2026 года).
У Immich нет платных функций, и проект заявляет, что их никогда не будет. Проект продает опциональные пожизненные ключи продукта — 25 долларов за одного пользователя или 100 долларов за весь сервер (по ценам, объявленным Immich в июле 2024 года), но покупка ключа ничего не разблокирует, и 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 можно восстановить, но это потребует значительного времени работы процессора. Сам по себе дамп базы данных ничего не восстановит, так как он содержит только метаданные.
Для PhotoPrism индексация выполняется отдельной командой.
docker compose exec photoprism photoprism backup -i -fОна создает SQL-дамп в storage/backup/. После этого скопируйте папку originals и папку storage. Поскольку PhotoPrism также создает вспомогательные YAML-файлы с описанием каждой фотографии, утраченный индекс можно восстановить только на основе файлов, что является существенным преимуществом для архива, который вы планируете хранить десятилетиями.
Независимо от выбранного варианта, регулярно отправляйте эти резервные копии за пределы сервера с помощью зашифрованных дедуплицированных резервных копий restic во внешнее хранилище. Резервная копия на том же диске, что и библиотека, резервной копией не является. Настройте уведомление об ошибке задания: резервное копирование, которое незаметно остановилось в марте, до момента восстановления выглядит так же, как резервное копирование, успешно выполненное прошлой ночью. Собственный сервер ntfy отправит уведомление об этой ошибке на телефон в тот же вечер.
Что выбрать для запуска
Запускайте Immich, если ваши фотографии хранятся на телефонах, если более одного человека должны создавать резервные копии фотопленки и если вы можете выделить серверу 6 GB оперативной памяти или больше. Это максимально близкий к Google Photos аналог, который можно разместить на собственном сервере, а мобильное приложение является его ключевой особенностью. Наше пошаговое руководство по установке Immich подробно описывает проблемы с нехваткой памяти и нюансы при обновлении.
Запускайте PhotoPrism, если у вас уже есть фотоархив на диске, если вам важны карты, метаданные и сохранение собственной структуры папок, или если ваш VPS имеет 4 GB оперативной памяти и вы предпочитаете работающую библиотеку вместо постоянного использования swap. Это более совершенный инструмент для систематизации, который менее требователен к аппаратному обеспечению.
Запуск обоих приложений одновременно также является разумным решением. Immich обрабатывает ежедневную загрузку с телефонов, а раз в год вы сортируете лучшие снимки в свой архив и позволяете PhotoPrism проиндексировать его. Они не конфликтуют, так как PhotoPrism считывает папки, в то время как Immich управляет собственным хранилищем.
FAQ
Могут ли PhotoPrism и Immich использовать одну и ту же папку с фотографиями?
Это небезопасно при двустороннем доступе. PhotoPrism индексирует папку originals и обладает функциями записи в неё, если только он не запущен в режиме «только чтение», в то время как Immich предполагает, что он является единственным владельцем содержимого своей папки загрузки. Вы можете указать PhotoPrism путь к копии папки library от Immich в режиме «только чтение» для просмотра, но не позволяйте обоим приложениям управлять одними и теми же файлами. Шаблон хранения Immich может перемещать или переименовывать ресурсы, пока PhotoPrism выполняет индексацию.
Достаточно ли стабилен Immich, чтобы хранить единственную копию моих фотографий?
Ни одно self-hosted приложение не должно быть единственным местом хранения данных. Immich теперь следует семантическому версионированию и заявляет, что критические изменения ограничены мажорными релизами. Закрепите версию IMMICH_VERSION на теге мажорной версии, например v3, ознакомьтесь с примечаниями к выпуску и выполняйте обновление с помощью docker compose pull && docker compose up -d. Понижение версии не поддерживается даже в рамках одной минорной версии, поэтому делайте дамп базы данных перед каждым обновлением. Храните резервные копии оригинальных файлов вне сервера, чтобы минимизировать риски.
Почему контейнер машинного обучения Immich постоянно перезапускается?
Обычно это происходит из-за принудительного завершения процесса по причине нехватки памяти. Запустите docker compose ps --all, так как остановленные контейнеры скрыты без этого флага, и проверьте, завершается ли сервис машинного обучения с кодом 137. Этот код означает, что процесс был завершен сигналом 9; обычно это вызвано механизмом OOM Killer (Out of Memory Killer) ядра, но возможны и другие причины, поэтому подтвердите это с помощью sudo dmesg | grep -i 'out of memory'. Добавьте swap или полностью отключите машинное обучение, если на машине 4 GB оперативной памяти. Лимит памяти для контейнера не ограничивает его производительность: при достижении лимита процесс всё равно будет завершен, но он перестанет потреблять ресурсы остальной части сервера. Без машинного обучения перестанут работать интеллектуальный поиск и распознавание лиц, но остальная часть Immich будет функционировать нормально.
Нужен ли PhotoPrism MariaDB или достаточно SQLite?
SQLite работает и подходит для личной медиатеки, но при его использовании PhotoPrism ограничивает себя четырьмя рабочими процессами. Документация рекомендует перейти на MariaDB, так как она лучше справляется с высокой конкурентностью. Файл compose, который поставляет проект, уже включает MariaDB, поэтому рекомендуемый путь является также и стандартным.
Сколько дополнительного дискового пространства нужно заложить сверх размера медиатеки?
Добавьте от 10 до 20 процентов к размеру ваших оригиналов для любого из этих приложений. Это пространство потребуется для создаваемых миниатюр и перекодированных видеопревью. Коллекция объемом 200 GB потребует примерно от 220 до 240 GB только для самой медиатеки, плюс место для базы данных и дальнейшего роста. Если вы также храните полную локальную резервную копию на том же томе, оригиналы и эта копия потребуют не менее 400 GB без учета остальных данных, поэтому планируйте около 450 GB или разместите копию на отдельном томе.