Immich – это программа с открытым кодом для хранения фотографий и видео на собственном сервере. Она устроена как Google Фото. Снимки собираются в ленту по датам, ищутся по содержимому, например по слову beach, группируются по лицам и открываются в браузере и в мобильном приложении. Разница в том, что все файлы лежат на вашем VPS, а не у стороннего сервиса. В этой статье мы установим Immich официальным способом через Docker Compose, создадим администратора, загрузим фотографии, посмотрим, как работает поиск и распознавание лиц, закроем лишний порт и настроим резервные копии с проверкой восстановления. Все шаги мы повторили на тестовом сервере с Debian 12, версия Immich на момент проверки 3.3.4.
Как устроен Immich
Immich состоит не из одной программы, а из четырёх контейнеров, которые поднимает один файл Docker Compose. Главный из них, immich-server, показывает веб-интерфейс, принимает загрузки из браузера и телефона и выполняет фоновые задания. Рядом работает PostgreSQL, в нём хранятся даты съёмки, альбомы, имена людей и настройки, но не сами фотографии. Третий контейнер, Valkey, совместим с Redis и держит очередь заданий. Оригиналы фотографий и видео остаются обычными файлами в папке на диске сервера, путь к которой задаёт параметр UPLOAD_LOCATION. Поэтому «копия Immich» всегда состоит из двух частей, базы данных и папки с файлами, и по одной из них вернуть библиотеку нельзя.
Четвёртый контейнер, immich-machine-learning, и делает Immich похожим на Google Фото. Когда вы загружаете снимок, сервер сохраняет оригинал, делает миниатюры, читает метаданные вроде даты съёмки и камеры, а затем отдаёт картинку контейнеру машинного обучения. Там нейросеть CLIP превращает изображение в набор чисел, который описывает его смысл, и этот набор записывается в базу данных. Когда вы позже вводите в поиск слово beach, та же нейросеть превращает слово в такой же набор чисел, а база выбирает снимки, чьи числа ближе всего. Именно поэтому находятся пляжи, хотя в названии файла и в метаданных такого слова нет. С лицами всё похоже. Отдельная модель находит лица на снимках, считает для каждого свой набор чисел и объединяет похожие лица в одного человека. Всё это считается на процессоре вашего сервера внутри контейнера, видеокарта не нужна.
Из-за нейросетей Immich заметно тяжелее обычного файлового облака. Документация Immich называет минимумом 6 ГБ памяти и 2 ядра, а рекомендует 8 ГБ и 4 ядра, и пишет, что на 4 ГБ можно работать с отключённым машинным обучением. Мы измерили это на своём сервере. Пока Immich обрабатывал первые 11 снимков, четыре контейнера вместе занимали до 2,8 ГБ памяти, из них около 1,4 ГБ приходилось на сервер и около 1,2 ГБ на контейнер машинного обучения. Модели выгружаются из памяти после 300 секунд простоя, и в покое весь Immich занимал около 1 ГБ. Нейросети при этом скачиваются при первом использовании и занимают на диске ещё около 2 ГБ.
Что понадобится
- Сервер с Debian 12 и не меньше 6 ГБ памяти, например тариф DE-RZ9-3. Для комфортной работы подойдёт DE-RZ9-4 с 8 ГБ памяти и 120 ГБ NVMe, у нас был именно такой объём. Диск зависит от размера вашей библиотеки, и по документации Immich миниатюры и перекодированные видео добавляют к ней в среднем 10–20 процентов. Если сервера ещё нет, закажите его по инструкции.
- Подключение по SSH, например через Termius. Команды выполняются от имени
root. - Docker с плагином Compose. Как их установить, рассказано в отдельной статье. У нас стояли Docker 29.9.2 и Compose 5.6.1.
- Около 7 ГБ свободного места под образы и нейросети, не считая ваших фотографий. Домен для первого запуска не нужен.
Шаг 1. Проверьте Docker
Immich работает только с современным плагином Compose, поэтому команда должна быть docker compose через пробел. Старую docker-compose документация Immich называет неподдерживаемой. Проверьте версии.
docker --version
docker compose versionЕсли в ответе есть версии обеих программ, переходите дальше. Если Docker не найден или стоит старый пакет docker.io из стандартных репозиториев, установите свежий Docker по нашей инструкции.
Шаг 2. Скачайте файлы Immich
Создайте папку для проекта и скачайте два официальных файла. Первый описывает контейнеры, второй хранит настройки.
mkdir -p /opt/immich-app && cd /opt/immich-app
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Файл Compose нужно брать из последнего релиза, а не из основной ветки репозитория, потому что они могут не совпадать, об этом предупреждает комментарий в самом файле. В файле заданы имя проекта immich и имена контейнеров immich_server, immich_postgres, immich_redis и immich_machine_learning, так что они не спутаются с другими вашими контейнерами. Содержимое docker-compose.yml править не нужно, все настройки лежат в .env.
Шаг 3. Заполните настройки в .env
В файле .env нужно изменить две вещи, пароль базы данных и часовой пояс.
Сгенерируйте пароль. Команда выдаст 32 символа из цифр и латинских букв, а Immich разрешает в этом пароле только символы
A-Za-z0-9, иначе Docker может неверно разобрать файл. Скопируйте результат.bashopenssl rand -hex 16Откройте файл в редакторе.
bashnano .envНайдите строку
DB_PASSWORD=postgresи заменитеpostgresна скопированный пароль. Пароль нужен только для связи контейнеров между собой, наружу база не открыта, но стандартное значение оставлять не стоит.Найдите строку
# TZ=Etc/UTC, удалите в начале решётку и пробел. При желании замените значение на свой часовой пояс из списка tz database, напримерEurope/Moscow. У нас осталсяEtc/UTC.Сохраните файл сочетанием Ctrl + O, затем Enter, а выйдите из редактора сочетанием Ctrl + X.
Закройте файл от посторонних, ведь в нём лежит пароль.
bashchmod 600 .env
Проверьте результат. Эта команда покажет только строки с настройками, без пояснений.
grep -vE '^(#|$)' .env
Готовые настройки, пароль базы скрыт
Остальные параметры можно не трогать.
UPLOAD_LOCATION=./library– папка для фото и видео. Путь начинается с точки, значит, она создастся рядом с файлами проекта, то есть в/opt/immich-app/library.DB_DATA_LOCATION=./postgres– папка с файлами базы данных. Документация Immich требует локальный диск и прямо запрещает сетевые диски для этой папки.IMMICH_VERSION=v3– версия Immich. Значениеv3означает «текущая третья версия», и свежие выпуски внутри неё вы получите обновлением. Можно закрепить точную версию, напримерv3.3.4, тогда обновляться придётся вручную.
Шаг 4. Запустите Immich
Запустите все четыре контейнера в фоне.
docker compose up -dПри первом запуске Docker скачивает образы общим размером около 4,7 ГБ. На нашем сервере скачивание заняло около 35 секунд, а сами контейнеры стартовали за секунду.

Сеть и четыре контейнера запущены
Подождите около минуты и проверьте статус. Когда у всех четырёх контейнеров в колонке STATUS появится слово healthy, Immich готов к работе.
docker compose psПорт 2283 открыт для всего интернета
Docker публикует порт 2283 своими правилами, в обход UFW. Мы проверили это на тестовом сервере. В UFW не было ни одного правила для 2283, и всё же соединение с другого компьютера устанавливалось. Более того, даже после команды ufw deny 2283/tcp оно продолжало устанавливаться. Пока вы не создали администратора, любой, кто найдёт этот порт, может зарегистрироваться первым и стать им. Поэтому сразу переходите к следующему шагу, а в шаге 9 мы закроем порт. Подробнее об этой особенности рассказано в статье про Docker.

Порт слушает на всех адресах, а правил в UFW нет
Шаг 5. Создайте администратора и пройдите первую настройку
Откройте в браузере адрес http://IP-адрес-сервера:2283. Вы увидите приветствие Immich.

Первый экран нового сервера
Нажмите Старт. Кнопку Восстановить из резервной копии мы используем ниже, при проверке восстановления.
- В форме Регистрация администратора введите адрес электронной почты, он станет вашим логином, и придумайте надёжный пароль. Immich сам предупреждает, что первый зарегистрированный пользователь становится администратором и сможет создавать других. Сохраните пароль в менеджере паролей.
- В поле Имя введите имя, которое будет видно в интерфейсе.
- Нажмите Зарегистрироваться, затем на странице входа введите те же почту и пароль и нажмите Вход.

Форма создания администратора
После входа Immich проведёт вас по короткому мастеру из нескольких экранов, в нём нужно нажимать кнопку внизу карточки. Первые два экрана предлагают выбрать тему и язык интерфейса, а остальные стоит прочитать внимательнее.
- Конфиденциальность сервера – здесь два переключателя, оба включены по умолчанию. Карта берёт плитки с внешнего сервиса
tiles.immich.cloud, а проверка версии периодически обращается кversion.immich.cloud. Если хотите, чтобы сервер вообще не ходил к внешним сервисам, выключите оба, потом их можно вернуть в настройках. - Конфиденциальность пользователя – переключатель для Google Cast, которому нужна загрузка ресурсов с серверов Google.
- Шаблон хранилища – как раскладывать оригиналы по папкам, подробнее об этом в шаге 8.
- Резервное копирование – напоминание о стратегии 3-2-1, к ней мы вернёмся в шаге 11.
- Мобильное приложение – ссылки на магазины приложений и настройка Obtainium.
В конце нажмите Готово.

Два необязательных обращения к внешним сервисам

По умолчанию оригиналы раскладываются по годам, месяцам и дням
Шаг 6. Загрузите фотографии
Нажмите Загрузить в правом верхнем углу и выберите файлы, либо перетащите их в окно браузера. Мы загрузили 11 общедоступных снимков, и они сразу появились в ленте. Дата для ленты берётся из метаданных снимка, а если их нет, из даты изменения файла. Поэтому снимок с камеры, снятый в 2005 году, лёг в 2005 год, а файл без метаданных попал на дату, когда он последний раз менялся.

Загруженные снимки в ленте по датам
В правом нижнем углу во время загрузки показывается панель со счётчиками Осталось, Загружено, Ошибки и Дубликаты. Загрузка идёт быстро, но потом сервер ещё около минуты в фоне делает миниатюры, читает метаданные и отдаёт снимки нейросетям. За очередями можно следить в Управление сервером > Задачи, это пункт в меню, которое открывается по клику на ваш аватар. Пока в очередях что-то есть, поиск и люди будут работать не по всем снимкам.
Immich определяет повторы. Когда мы загрузили тот же снимок второй раз, он не появился снова, а счётчик Дубликаты показал 1. Файл неподдерживаемого типа, например обычный текстовый файл, Immich не принимает совсем.
Шаг 7. Попробуйте поиск и людей
Поиск по содержимому
Щёлкните по строке Поиск фотографий вверху, введите запрос и нажмите Enter. Immich ищет «по смыслу», а не по названию файла. По запросу beach первыми стали пляж с мостом Золотые Ворота и пляж с зонтиками, а третьей собака на берегу моря.

Поиск по слову beach, самые подходящие снимки идут первыми
Обратите внимание на язык запроса. Модель по умолчанию называется ViT-B-32__openai, и русскими словами она работает непредсказуемо. На наших снимках запросы «кошка» и «снег велосипед» нашли нужное первым, а «пляж», «горное озеро» и «космонавт» нет. Английские запросы сработали заметно лучше. Запросы cat, dog, beach, snow bicycle, mountain lake и astronaut вывели нужный снимок на первое место, хотя запрос bridge мост наверх не поднял, а библиотека у нас совсем небольшая. Документация Immich советует для других языков многоязычные модели, в названиях которых есть xlm, siglip2 или nllb. Они тяжелее, по таблице документации им нужно около 3 ГБ памяти и больше, поэтому на нашем сервере мы их не проверяли. Чтобы сменить модель, сделайте следующее.
- Откройте Управление сервером > Настройки > Настройки машинного обучения > Интеллектуальный поиск.
- Впишите название новой модели в поле CLIP модель и сохраните настройки.
- Откройте Задачи, найдите задачу Интеллектуальный Поиск и нажмите Все, чтобы Immich заново обработал все снимки новой моделью.

Модель для поиска задаётся в настройках машинного обучения
Лица
Распознавание лиц работает в два этапа. Сначала Immich находит на снимках лица, а потом объединяет похожие в людей. На наших снимках лица нашлись на всех трёх портретах и на фото космонавта с собаками. Однако страница Люди при этом оставалась пустой. В том же разделе машинного обучения, в блоке Распознавание лиц, есть настройка Минимум распознанных лиц. В интерфейсе она описана как минимальное число распознанных лиц для создания человека, и по умолчанию равна 3. У нас каждое лицо встречалось один раз.
Мы поставили значение 1 и на странице Задачи нажали Сброс у задачи Распознавание Лиц. В журнале сервера появились записи о создании четырёх человек, но страница Люди оставалась пустой, пока мы не дали им имена. Почему безымянные группы не показываются даже при значении 1, мы выяснять не стали. Практический вывод простой, давайте людям имена. Сделать это можно так.
- Откройте снимок и нажмите значок i, чтобы увидеть панель Информация.
- В блоке Люди нажмите на лицо.
- Нажмите Добавить имя, введите имя и нажмите Enter.
Появится сообщение «Имя успешно изменено», и человек окажется на странице Люди.

Люди после того, как мы дали им имена
Шаг 8. Узнайте, где лежат файлы
Всё, что Immich хранит на диске, находится в папке UPLOAD_LOCATION, то есть в /opt/immich-app/library. Внутри неё свои подпапки.
library– оригиналы, которые Immich разложил по шаблону хранилища. Мы оставили шаблон из мастера, поэтому путь выглядит какlibrary/library/admin/2026/10/02/cat-1.jpg, то есть имя пользователя, год, месяц и день.thumbs– миниатюры и превью.encoded-video– перекодированные версии видео.profile– аватарки пользователей.upload– ещё одно место для оригиналов, документация Immich относит эту папку к важным вместе сlibraryиprofile.backups– автоматические дампы базы данных, о них в шаге 11.

Оригиналы в library, миниатюры в thumbs, база отдельно в postgres
Цифры на нашем примере такие. Оригиналы 11 снимков заняли 28 МБ, миниатюры к ним 5,1 МБ, а папка базы данных postgres почти 430 МБ. Документация Immich называет типичным размером базы от 1 до 3 ГБ. Нейросети хранятся не здесь, а в томе Docker immich_model-cache, у нас там 2,1 ГБ.
Не правьте эти папки руками
Документация Immich просит не менять файлы в папках хранилища, кроме резервного копирования. Загружайте, удаляйте и переименовывайте снимки только через веб-интерфейс или мобильное приложение, иначе база данных перестанет совпадать с файлами.
Шаг 9. Закройте порт и подключите домен
Официальная документация Immich прямо предупреждает, что нельзя пробрасывать порт 2283 в интернет без дополнительной защиты, потому что вход и пароли пойдут по обычному HTTP. Поэтому оставим Immich доступным только на самом сервере. Для этого не нужно править официальный docker-compose.yml, который вы будете заменять при обновлениях. Создайте рядом файл docker-compose.override.yml, Compose подхватывает его сам.
nano docker-compose.override.yml# Порт 2283 слушает только внутри сервера
services:
immich-server:
ports: !override
- "127.0.0.1:2283:2283"Метка !override нужна, чтобы заменить список портов, а не добавить к нему второй. Примените изменение.
docker compose up -dCompose пересоздаст только контейнер immich-server. Теперь порт слушает на адресе 127.0.0.1, и с другого компьютера соединение не устанавливается. Мы проверили, что с нашего компьютера оно уходит в тайм-аут, а через SSH-туннель Immich по-прежнему открывается.

Порт 2283 теперь слушает только 127.0.0.1
Дальше есть два способа открывать Immich.
SSH-туннель подходит для себя. Выполните на своём компьютере команду ниже и откройте в браузере
http://127.0.0.1:2283. Окно с туннелем нужно держать открытым.bashssh -L 2283:127.0.0.1:2283 root@IP-адрес-сервераДомен с HTTPS нужен для мобильного приложения и для доступа с любых устройств. Привяжите домен по инструкции, поставьте Nginx и подключите бесплатный сертификат. Nginx будет пересылать запросы на
http://127.0.0.1:2283.
Мы не настраивали HTTPS на этом сервере, поэтому готового файла для Nginx здесь нет. Возьмите проверенный пример со страницы Immich про обратный прокси и учтите требования, которые документация перечисляет для любого прокси.
- Прокси должен передавать заголовки
Host,X-Real-IP,X-Forwarded-ForиX-Forwarded-Proto. - Нужна поддержка WebSocket и разрешение на очень большие загрузки, в примере для Nginx стоит
client_max_body_size 50000M. Если лимит оставить маленьким, загрузка крупных файлов будет обрываться ошибкой 413, о которой рассказано в статье про Nginx. - Таймауты в примере увеличены до 600 секунд, иначе большие видео не успевают загрузиться.
- Immich должен работать в корне домена или поддомена, а адреса вида
/immichне поддерживаются.
Шаг 10. Подключите мобильное приложение
Мобильное приложение мы на тестовом сервере не запускали, поэтому этот шаг основан на официальной документации Immich. Приложение умеет копировать снимки с телефона на сервер, чтобы они не пропали вместе с телефоном.
- Установите приложение Immich. Оно есть в App Store и Google Play, а для Android ещё и в виде APK на странице релизов GitHub, через Obtainium и FUTO F-Droid. Ссылки на магазины есть и в мастере первой настройки.
- Откройте приложение и введите адрес сервера. В документации пример записан как
http://IP-адрес:2283, но мы закрыли этот порт, поэтому вводите адрес своего домена, напримерhttps://photos.example.com. - Войдите с почтой и паролем из шага 5.
- Нажмите на значок облака в правом верхнем углу, выберите альбомы телефона, которые нужно копировать, и нажмите кнопку Enable Backup внизу экрана. Так название кнопки записано в документации, в русской версии приложения оно может звучать иначе.
Обновляйте приложение раньше сервера
Документация Immich предупреждает, что сервер работает только с приложениями своей мажорной версии, а приложение обычно поддерживает текущую и предыдущую. Поэтому перед обновлением сервера до новой мажорной версии обновите приложения на всех телефонах.
Шаг 11. Настройте резервные копии
Immich не копирует фотографии сам, и если сервер пропадёт, пропадёт и библиотека. Документация рекомендует правило 3-2-1, то есть три копии данных, на двух разных носителях, одна из них за пределами сервера. Копировать нужно обе части Immich, базу данных и папку с файлами, потому что база без файлов не содержит ни одной фотографии, а файлы без базы теряют альбомы, людей и порядок.
Дампы базы данных от самого Immich
Перейдите в Управление сервером > Настройки > Настройки резервного копирования базы данных. Дампы включены по умолчанию. Immich создаёт их каждую ночь в 2:00 и хранит 14 последних, расписание задаётся выражением в формате cron. Файлы появляются в папке backups внутри UPLOAD_LOCATION.

Расписание и число хранимых дампов
Дамп можно создать и вручную. Откройте Управление сервером > Задачи, нажмите Создать задачу, выберите Создать резервную копию базы данных и нажмите Создать. Через несколько секунд в /opt/immich-app/library/backups появился файл вида immich-db-backup-20261021T134144-v3.3.4-pg14.19.sql.gz размером около 19 МБ. В имени записаны дата, версия Immich и версия PostgreSQL.

Ручной запуск дампа базы данных
Не удивляйтесь размеру. Даже база без единой фотографии дала у нас дамп около 18 МБ, а в ней есть таблица географических названий geodata_places на 228 820 строк.
Скрипт для копий на самом сервере
Дампы от Immich лежат на том же диске, что и фото. Поэтому сделаем скрипт, который собирает и базу, и файлы в одну папку, откуда их удобно забирать. Сначала база, потом файлы, как советует документация Immich. Так в худшем случае получится файл без записи в базе, который можно загрузить заново, а не запись без файла.
nano /opt/immich-app/backup.sh#!/bin/sh
# Резервная копия Immich: сначала дамп базы, потом архив с фотографиями
BACKUP_DIR=/root/immich-backups
STAMP=$(date +%F-%H%M)
mkdir -p "$BACKUP_DIR"
# База данных (метаданные, альбомы, люди, настройки)
docker exec immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > "$BACKUP_DIR/db-$STAMP.sql.gz"
# Оригиналы фотографий и видео, загрузки и аватарки
tar -czf "$BACKUP_DIR/files-$STAMP.tar.gz" -C /opt/immich-app/library library upload profile
# Хранить 7 последних копий каждого вида
ls -1t "$BACKUP_DIR"/db-*.sql.gz | tail -n +8 | xargs -r rm --
ls -1t "$BACKUP_DIR"/files-*.tar.gz | tail -n +8 | xargs -r rm --Миниатюры и перекодированные видео в архив не попадают, потому что Immich создаёт их заново, а оригиналы заменить нечем. Сделайте скрипт исполняемым и запустите.
chmod +x /opt/immich-app/backup.sh
/opt/immich-app/backup.sh
ls -lh /root/immich-backups
Дамп базы и архив с файлами
Чтобы копии делались сами, добавьте скрипт в расписание командой crontab -e, например на 3:00 каждую ночь.
0 3 * * * /opt/immich-app/backup.shМы проверили запуск скрипта планировщиком, он отработал и создал оба файла. Подробнее о расписании рассказано в статье про cron. Копии на этом же сервере не спасут, если пропадёт сам сервер, поэтому время от времени забирайте их на другой компьютер или сервер, например командой rsync.
Как восстановить Immich из копии
Мы проверили восстановление на тестовом сервере, как после потери сервера. Мы остановили Immich, удалили папку базы данных postgres, оставили папку с файлами, запустили Immich заново и восстановили базу из дампа. Так же выглядит и переезд на новый сервер, только папку с файлами сначала нужно вернуть на место.
На новом сервере выполните шаги 1–4, но администратора пока не создавайте. Затем верните файлы из архива на место. Команда ниже распакует папки
library,uploadиprofileвUPLOAD_LOCATION, а миниатюры Immich по документации создаст заново отдельными задачами.bashtar -xzf files-2026-10-21-1604.tar.gz -C /opt/immich-app/libraryДамп базы положите в папку
backupsвнутриUPLOAD_LOCATIONили загрузите его на шаге 5.Откройте Immich в браузере. Вместо создания администратора нажмите Восстановить из резервной копии. Сервер перейдёт в режим обслуживания и перезапустится, а на странице появится сообщение «Временно недоступно».
Адрес для входа в режим обслуживания Immich пишет в журнал сервера. Выполните команду ниже и найдите строку со ссылкой.
bashdocker logs immich_server 2>&1 | grep -A1 "log in using"Ссылка начинается с
https://my.immich.app/maintenance?token=.... Мы не отправляли токен на внешний сайт, а открыли тот же путь по собственному адресу Immich, то есть вместоhttps://my.immich.appподставили адрес, по которому вы открываете Immich, напримерhttp://127.0.0.1:2283в случае SSH-туннеля. Токен действует как пароль, никому его не показывайте.Появится страница Восстановление библиотеки с проверкой папок. Immich проверяет, что папки доступны для чтения и записи и что в них есть файлы. У нас красный крестик стоял у папки
profile, потому что в ней нет файлов, мы не ставили аватарку, и это не помешало восстановлению. Нажмите Далее.Выберите дамп из списка (по документации можно и загрузить файл
.sql.gzкнопкой Выбрать с компьютера) и нажмите Восстановить, затем подтвердите действие. Immich предупреждает, что база будет очищена и восстановлена из выбранной копии, а текущее состояние он сохраняет заранее в файлrestore-point-...sql.gz.Дождитесь завершения. У нас дамп в 19 МБ восстановился за 24 секунды, после чего сервер сам перезапустился и вышел из режима обслуживания.

Выбор дампа из папки backups
После восстановления мы вошли с прежним паролем администратора. В библиотеке были те же 11 снимков и 4 человека, поиск по содержимому работал.
Дамп не содержит фотографий
В дампе только метаданные. Без папок library, upload и profile восстановленная база будет ссылаться на файлы, которых нет.
Как обновить Immich
Обновление в Immich всегда начинается с резервной копии. Запустите скрипт из шага 11, посмотрите примечания к выпуску на странице релизов, на случай изменений, ломающих совместимость, а затем обновите контейнеры.
cd /opt/immich-app
docker compose pull && docker compose up -dПервая команда скачивает новые образы, вторая пересоздаёт контейнеры, у которых образ изменился. Данные и настройки лежат в папках и томах, поэтому остаются на месте.

Обновление образов и перезапуск контейнеров
На скриншоте уже стоит последняя версия, поэтому контейнеры остались как были. Саму смену версии мы проверили отдельно. Мы поставили в .env значение IMMICH_VERSION=v3.3.3, запустили Immich, затем вернули v3 и выполнили эти же две команды. На новой установке без данных контейнеры пересоздались, и сервер ответил версией 3.3.4, она же показана в левом нижнем углу интерфейса. Дальше несколько правил из документации.
- Изменения, ломающие совместимость, по документации должны появляться только в мажорных версиях.
- Откат на старую версию не поддерживается, даже внутри одной минорной версии, поэтому копия перед обновлением нужна по-настоящему.
- Документация не описывает автоматические обновления, а вместе с сервером нужно вовремя обновлять приложения на телефонах, поэтому мы советуем обновляться вручную.
- Старые образы занимают место. Документация предлагает команду
docker image prune, но она удаляет все образы без тегов на сервере, а не только образы Immich, поэтому на сервере с другими проектами выполняйте её с осторожностью.
Полезные команды
Все команды выполняются в папке /opt/immich-app.
docker compose ps # состояние контейнеров
docker compose logs -f immich-server # журнал сервера, выход по Ctrl+C
docker compose stop # остановить Immich, данные остаются
docker compose start # запустить снова
docker compose down # удалить контейнеры, папки с данными остаются
docker stats --no-stream # сколько памяти занимает каждый контейнер
docker exec -it immich_server immich-admin version # версия ImmichНе добавляйте к docker compose down флаг -v, если не хотите заодно удалить том с нейросетями, потому что Immich скачает их заново.
Частые вопросы
password authentication failed for user "postgres"
Immich не может подключиться к своей базе, и контейнер immich_server постоянно перезапускается. Мы получили эту ошибку, когда изменили DB_PASSWORD в .env уже после первого запуска. База данных запоминает пароль в момент создания и новый не принимает, а сервер приходит к ней с новым.

Сервер перезапускается из-за неверного пароля базы
Верните в .env прежний пароль и выполните docker compose up -d. Через минуту сервер снова стал healthy. Поэтому пароль нужно задавать до первого запуска и сохранить в надёжном месте.
no configuration file provided: not found
Вы запускаете docker compose не в той папке. Мы получили это сообщение, когда выполнили docker compose up -d в /root. Перейдите в папку проекта командой cd /opt/immich-app и повторите.
Страница не открывается после закрытия порта
После шага 9 адрес http://IP-адрес-сервера:2283 перестаёт отвечать, и это нормально. С нашего компьютера соединение уходило в тайм-аут. Откройте Immich через SSH-туннель на http://127.0.0.1:2283 или через домен с HTTPS, как описано в шаге 9. Если не открывается и туннель, проверьте, что контейнеры работают, командой docker compose ps, и что команда ss -ltn | grep 2283 показывает адрес 127.0.0.1:2283.
Забыли пароль администратора
Пароль можно сбросить командой внутри контейнера.
docker exec -it immich_server immich-admin reset-admin-passwordКоманда найдёт администратора, покажет его почту и имя и спросит новый пароль. Мы ввели свой, а на вопрос о сброшенных сессиях оставили ответ по умолчанию, то есть Yes, после чего появилось сообщение The admin password has been updated. Учтите, что вводимый пароль на экране виден открытым текстом.

Сброс пароля администратора
Страница «Люди» пустая, хотя лица найдены
Безымянные группы лиц страница не показывает. Настройка Минимум распознанных лиц по умолчанию равна 3. Мы поставили 1, Immich создал четыре группы, но на странице Люди они появились только после того, как мы дали им имена. Как это сделать, описано в шаге 7.
Поиск на русском языке находит не то
Модель ViT-B-32__openai, которая стоит по умолчанию, нестабильно понимает русские запросы. Пробуйте английские слова или установите многоязычную модель по описанию в шаге 7. Учтите, что такие модели требуют заметно больше памяти.
Временно недоступно. Сервер Immich переведён в режим обслуживания
Immich включает этот режим, когда вы нажимаете Восстановить из резервной копии. Мы видели его при проверке восстановления. Войти в режим можно по ссылке из журнала сервера, как описано в разделе про восстановление. Если вы не собирались восстанавливать базу, выйдите из режима кнопкой Отключить режим обслуживания на странице режима или командой docker exec immich_server immich-admin disable-maintenance-mode, которая есть в документации Immich.
На сервере мало памяти, Immich тормозит или контейнеры падают
Минимум по документации 6 ГБ, а мы видели пики до 2,8 ГБ только на 11 снимках, и при большой библиотеке потребление растёт. На сервере с 4 ГБ документация разрешает работать с отключённым машинным обучением. Для этого откройте Управление сервером > Настройки > Настройки машинного обучения и выключите Включить машинное обучение. Тогда исчезнут поиск по содержимому и распознавание лиц, но Immich останется хранилищем с лентой и альбомами. Проверить расход памяти можно командой docker stats --no-stream.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Официальный сайт: https://f3cloud.com