Семье не нужны папки на сервере. Им нужна лента с фотографиями, поиск и автозагрузка с телефона. Immich всё это даёт: мобильные приложения, общие альбомы, поиск по лицам и по описанию вроде «собака на пляже». Для меня главное, что файлы остаются обычными файлами на диске.
Установка
Immich запускается через Docker Compose. Файлы конфигурации берутся из официальных релизов:
mkdir -p /srv/apps/immich && cd /srv/apps/immich
curl -LO https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
curl -L -o .env https://github.com/immich-app/immich/releases/latest/download/example.env
В .env важны две строки:
UPLOAD_LOCATION=/srv/data/photos/immich
DB_DATA_LOCATION=/srv/apps/immich/postgres
Фотографии лежат на зеркале, а базу данных я держу на NVMe: на жёстких дисках она заметно медленнее. Там же стоит закрепить версию в IMMICH_VERSION, чтобы обновляться осознанно, после чтения заметок к релизу.
docker compose up -d
Импорт старых фотографий
Загружать весь архив через телефон бессмысленно. Два рабочих способа:
- Внешняя библиотека: Immich читает существующую папку и не трогает файлы. Папка подключается в контейнер как том только для чтения.
- Консольная утилита
immich: загружает файлы на сервер, как будто их отправил телефон.
Я начал с внешней библиотеки, потому что так проще откатиться. Новые снимки приходят с телефонов автозагрузкой, и Immich сам раскладывает их по папкам с датами.
Нагрузка на N100
Первичная обработка 780 ГБ заняла около пяти суток. Больше всего времени ушло на распознавание лиц и построение поиска. Память в этот момент занята почти полностью: без 16 ГБ я бы не обошёлся. Зато дальше сервер спокойно обрабатывает новые снимки за минуты.
На время импорта я снизил число параллельных задач машинного обучения до одной в настройках задач. Сервер стал отзывчивее, а общее время выросло ненамного. Перекодирование видео идёт через аппаратный блок Quick Sync, для этого в Compose подключается файл hwaccel.transcoding.yml.
Что надо копировать
Папка с фотографиями без базы данных теряет альбомы, лица и описания. Immich сам регулярно делает дамп базы в UPLOAD_LOCATION/backups, поэтому она попадает в общий бэкап вместе с фотографиями. Миниатюры и перекодированное видео можно не копировать, они создаются заново:
/srv/data/photos/immich/thumbs
/srv/data/photos/immich/encoded-video
Итог
Семья пользуется приложением и не думает о сервере, а это лучшая оценка. Минус один: проект быстро развивается, и обновления иногда требуют внимания. Поэтому перед каждым обновлением делаю снимок и читаю заметки к релизу.