Immich вместо Google Фото для бизнеса: где хранить 2 миллиона фото с объектов
Кейс сентября 2025-го: строительная компания, 12 прорабов, 2 млн фотографий с объектов за 8 лет работы — и всё это раскидано по личным Google Photos сотрудников. Инвентаризация, поиск, безопасность превращались в хаос. За 4 дня мы перевели всё на self-hosted Immich, и теперь бухгалтер находит фото «акт на Тверской май 2024» за 3 секунды.
Почему обычным хранилищем тут не обойтись
Такая ситуация вполне типична для строительной отрасли, ремонта или инженерии. Прорабы и техники на объектах каждый день делают от 30 до 80 фотографий — это и фотофиксация текущих работ, и акты, и снимки скрытых работ, повреждений, а порой даже чертёж карандашом на стене или документ, сфотографированный на телефон. За 5–8 лет у любого активного сотрудника набирается от 50 до 200 тысяч снимков.
А дальше обычно происходит вот что:
- Фото лежат в личном Google Photos сотрудника на личном аккаунте.
- Когда сотрудник увольняется — с ним уходит весь архив. Бухгалтерии нужно фото двухлетней давности для защиты в суде — и его уже нет.
- Если фото залить на Яндекс.Диск или NAS — их там миллионы без структуры, найти что-то невозможно. Поиск по имени файла IMG_20230714_143828.jpg бесполезен.
- Когда надо сделать отчёт для заказчика, прораб вручную сортирует тысячу фото — это полдня работы.
- Дубликаты съедают место — одно и то же фото лежит и у прораба, и у менеджера, и в папке объекта.
Задача простая: собрать всё в одном контролируемом месте, где работает нормальный поиск и автоматическое распознавание того, что на фото.
Что умеет Immich в 2025 году
Immich — это просто феноменальный open-source проект! Всего за пару лет он сумел вырасти из какой-то «непонятной альфы» в по-настоящему серьёзную и достойную замену Google Photos. Судите сами: у него 50k звёзд на GitHub, свежие релизы выходят каждую неделю, а коммьюнити просто кипит жизнью. Что же он умеет?
- Мобильные клиенты для Android и iOS, которые автоматически заливают новые фото в фоне, как Google Photos.
- Распознавание лиц — группирует фото по людям, можно подписать имя и потом искать.
- Поиск по содержимому — работает нейросеть CLIP, ищет «красный кран», «залитый фундамент», «человек в каске» на русском и английском.
- OCR — распознаёт текст на фото. Фото акта с номером — и вы можете найти его по номеру.
- Геокарта — показывает все фото на карте по EXIF-координатам.
- Альбомы и sharing — можно создать альбом «Объект на Тверской, июнь 2025», дать ссылку заказчику на просмотр или загрузку.
- Дубликаты — автоматически находит повторы и показывает, какие можно удалить.
- Таймлайн по дате — прокрутка лет как в Google Photos.
- Внешние библиотеки — Immich может читать существующие фото из любой папки на диске без копирования.
Архитектура, которую мы собрали клиенту
Один физический сервер в офисе клиента плюс бэкап в облако:
| Компонент | Конфигурация |
|---|---|
| Сервер | Мини-PC Intel N100, 16 ГБ RAM, 500 ГБ NVMe (ОС и PostgreSQL) |
| Хранилище | Внешний JBOD-корпус на 4×4 ТБ HDD в ZFS RAID-Z1 |
| ОС | Debian 12 + Docker |
| Immich | В Docker Compose, 6 контейнеров |
| Прокси | nginx с Let's Encrypt, доступ только через WireGuard |
| Бэкап | Restic каждую ночь в S3-хранилище российского провайдера |
Железо в сумме — 86 000 ₽ единоразово, аренда VPS под бэкап — 1 800 ₽ в месяц за 8 ТБ S3.
Как мы переносили 2 миллиона фото
- Дни 1–2. Собрали данные со всех сотрудников. Часть — через выгрузку из Google Takeout (Google делает архив за 3–5 дней и даёт ссылку скачать), часть — с локальных телефонов через кабель, часть — с флешек и внешних дисков, которые у бухгалтерии лежали с 2018 года.
- День 3 утро. Скопировали всё в промежуточный SSD и запустили import через Immich CLI:
immich upload --album "Архив до 2025". Импорт 1.8 ТБ занял 14 часов. - День 3 вечер — день 5 утро. Machine-learning процессы на фоне — распознавание лиц, CLIP-эмбеддинги, OCR. Загрузили CPU на 80%, но сервер стоит в серверной и работает круглосуточно. Заняло ~70 часов.
- День 4. Параллельно установили мобильный клиент Immich всем 12 прорабам, настроили автозагрузку только по Wi-Fi (чтобы не жрать мобильный трафик).
- День 5. Обучение: 2 часа всем сотрудникам (как искать, как создавать альбомы), отдельно час с бухгалтерией и юристом (как доставать фото для судов).
Реальные сценарии использования
Через месяц после внедрения я собрал типичные запросы, которые теперь закрываются за секунды:
- «Найди фото кровли на Ленинградском с августа 2024». Ранее — час ручного поиска у прораба, теперь — 3 секунды в Immich.
- «Нужны все фото электрика Петрова на объектах за июль 2025». Раньше — никак, потому что Петров уволился. Теперь — один клик на его лицо, фильтр по дате.
- «Покажи акт скрытых работ по фундаменту, там был номер АКТ-2024-145». OCR находит фото с таким текстом за 2 секунды.
- «Где снимки бетонирования, где виден кран МКСП-42?» CLIP-поиск «жёлтый кран с надписью МКСП-42» — работает.
- «Нужны все фото квартиры 46, клиент подаёт в суд за плохую работу». Альбом по адресу с таймлайном, отправляется юристу ссылкой.
Что с безопасностью
Immich по умолчанию — инструмент личный, так что под бизнес его надо докрутить:
- SSO через Authentik/Keycloak. Логины совпадают с рабочей почтой, пароли централизованно. Уволился сотрудник — отключили доступ одним кликом, фото остались в архиве.
- Права на папки/альбомы. У прораба — полный доступ к своим фото и к общим альбомам своих объектов. У бухгалтерии — только чтение. У директора — всё.
- Доступ только через VPN. Immich-сервер не торчит в интернет. Прорабы на объектах подключаются через WireGuard, мобильный клиент автоматически.
- 2FA через TOTP — обязательно для администраторов.
- Шифрование бэкапов. Restic пишет в S3-хранилище зашифрованно, ключ — только у клиента.
- Политика удаления. Настроили корзину на 90 дней — если прораб удалил фото «чтобы почистить», у юриста ещё есть 3 месяца на восстановление.
Цена
| Статья | Стоимость |
|---|---|
| Мини-PC + JBOD + диски | 86 000 ₽ (единоразово) |
| Работы АйТи Фреш | 75 000 ₽ (единоразово) |
| Аренда S3 для бэкапа (8 ТБ) | 1 800 ₽/мес |
| Immich и все компоненты | 0 ₽ (open source) |
| Первый год | 182 600 ₽ |
Для понимания разницы: если бы мы выбрали 12 бизнес-подписок Google Workspace Business Plus, с 5 ТБ на каждого пользователя, это обошлось бы компании в 21 600 ₽/мес, то есть 259 200 ₽/год. И это, не говоря уже о постоянной головной боли с оплатой из России. А вот наш self-hosted Immich окупается меньше чем за год, и самое главное — все данные навсегда остаются в полном владении вашей компании.
Что мы ведём на абонентке
- Обновление Immich при выходе релизов (раз в 1–2 недели).
- Мониторинг дисков (SMART, заполненность), алерты в Telegram при 80%.
- Проверка бэкапа — раз в квартал разворачиваем на тестовой VM.
- Помощь новым сотрудникам с установкой мобильного клиента.
- Добавление альбомов для новых объектов по запросу из офиса.
- Расширение массива при заполнении (планово раз в 1,5–2 года).
Требования к серверу и что проверяю до установки
По официальным требованиям Immich нужно минимум 6 ГБ RAM (рекомендовано 8 ГБ) и минимум 2 ядра CPU (рекомендовано 4). На машине с 4 ГБ его можно запустить только с выключенным машинным обучением — то есть без поиска по содержимому и без распознавания лиц, ради которых его обычно и ставят. Контейнер машинного обучения на amd64 начиная с v3 требует процессор с уровнем микроархитектуры x86-64-v2. На виртуалке проверяю, что гипервизор отдаёт гостю нужный набор инструкций, а не урезанную модель CPU.
Что ещё сверяю по документации до установки:
- ОС — Linux. Immich в полноценной виртуальной машине работает нормально, а Docker внутри LXC-контейнера разработчики не рекомендуют. На Proxmox я поэтому ставлю его в VM.
- База PostgreSQL (
DB_DATA_LOCATION) обычно занимает 1–3 ГБ и должна лежать на локальном SSD. Сетевые шары для неё не поддерживаются вообще, файловые системы NTFS и FAT тоже не подходят. - Миниатюры и перекодированное видео добавляют к объёму библиотеки в среднем 10–20% — закладываю это в расчёт дисков.
- Нужна команда
docker compose(плагин); старыйdocker-composeImmich больше не поддерживает. - В
.envфиксирую версию вIMMICH_VERSION, а не оставляю плавающий тег. Обновляю сознательно, после чтения заметок к релизу.
Резервное копирование: база отдельно, файлы отдельно
Immich не сканирует папку с библиотекой: пути к файлам и все метаданные хранятся в базе. Без базы архив превращается в миллионы файлов без альбомов, лиц и подписей. Поэтому бэкап всегда из двух частей.
- Дамп базы Immich делает сам: по умолчанию ежедневно в 2:00, хранит последние 14 копий в
UPLOAD_LOCATION/backups. Расписание и срок хранения меняются в Administration → Settings → Backup. Внеочередной дамп запускаю через Administration → Job Queues → Create job → Create Database Dump. - В дампе нет ни одной фотографии, только метаданные. Поэтому restic у меня забирает весь
UPLOAD_LOCATION: backups, library, upload, profile, thumbs и encoded-video.
Восстановление на новом сервере по документации такое: кладу .env и compose-файл, переношу эти каталоги в новый UPLOAD_LOCATION, запускаю docker compose up -d и на экране приветствия выбираю Restore from backup. Immich сначала покажет проверку целостности папок, затем даст выбрать дамп (.sql.gz). Перед восстановлением он сам делает точку возврата и при сбое откатывается на неё. Раз в квартал прогоняю эту процедуру на тестовой VM — только так понятно, что бэкап рабочий.
Массовая загрузка через CLI: ключи, которые реально нужны
Для переноса архива использую официальный CLI. Сначала immich login <url> <ключ API> — учётные данные сохраняются в ~/.config/immich/auth.yml, после работы этот файл удаляю или делаю logout. Затем загрузка:
# сначала посмотреть, что будет загружено
immich upload --recursive --dry-run /mnt/archive/
# альбомы по именам папок, 4 файла параллельно (значение по умолчанию)
immich upload --recursive --album /mnt/archive/
# всё в один альбом, пропуская служебные файлы
immich upload --recursive --album-name "Архив до 2025" --ignore "**/Thumbs.db" /mnt/archive/
По умолчанию CLI хеширует файлы перед отправкой и пропускает то, что уже есть на сервере. Ключ --skip-hash ускоряет старт, но дедупликацию сервер всё равно сделает сам. Скрытые папки без --include-hidden не загружаются. Ключ --delete, который удаляет локальные файлы после загрузки, при переносе архива не применяю: исходники держу до проверки бэкапа.
FAQ
- Что такое Immich и зачем он бизнесу?
- Immich — open-source альтернатива Google Photos. Автоматически загружает фото с телефонов сотрудников на корпоративный сервер, распознаёт лица и объекты, ищет по тексту на русском. Для бизнеса — способ собрать фотоархив в одном месте.
- Безопасно ли держать рабочие фото на таком сервере?
- Да, если настроить SSO, 2FA, VPN-доступ и бэкапы. Мы ставим Immich за reverse-proxy с доступом только по VPN, что снимает вопрос «кто-то утащил архив».
- Какая железка нужна для 2 миллионов фото?
- 8 vCPU / 16 ГБ RAM / 8 ТБ HDD для хранения + 500 ГБ NVMe под PostgreSQL. GPU ускоряет, но не обязателен. Первичная индексация — 4–5 дней, потом всё быстро.
- Сколько стоит внедрение Immich в АйТи Фреш?
- От 75 000 ₽ за работы + железо по факту. Срок 3–5 рабочих дней. Для клиентов на абонентке обслуживание входит в стандартный тариф.
Источники
- Immich: Requirements — требования к RAM и CPU, x86-64-v2, размещение PostgreSQL, запрет сетевых шар для базы.
- Immich: Backup and Restore — автоматические дампы базы, каталоги для бэкапа, порядок восстановления.
- Immich: Command Line Interface — ключи immich upload и хранение учётных данных CLI.

