MAATRIX / Блог / Immich на Ubuntu 24.04: пошаговая установка

Immich на Ubuntu 24.04: пошаговая установка

MAATRIX

Если телефон снова просит доплатить за место в iCloud или Google Photos, а отдавать свои фото чужому облаку не хочется — самое время поднять Immich на собственном сервере. Это открытый self-hosted аналог Google Photos: автоматический бэкап с телефона, распознавание лиц и объектов, поиск по содержимому фото, общие альбомы для семьи. Ниже — рабочая установка на Ubuntu 24.04 через Docker Compose, от подготовки сервера до HTTPS-доступа и мобильного приложения.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Immich и когда он оправдан

Immich — не просто файлопомойка вроде Nextcloud с папкой «Фото». Это специализированное приложение с фоновым автобэкапом на iOS и Android, распознаванием лиц (группировка «это один и тот же человек»), поиском по смысловому содержимому кадра («пляж», «собака», «документ») через ML-модели, поддержкой RAW и HEIC, общими альбомами и режимом «партнёр» для двух аккаунтов с общей библиотекой.

Смысл разворачивать его на своём сервере, а не пользоваться готовым облаком, появляется в трёх случаях: вы не хотите, чтобы личные фото индексировались чужим ИИ; вам жалко платить ежемесячно за место, которое проще один раз купить на VPS; или у вас уже есть сервер под другие сервисы и Immich органично встанет рядом через Docker.

Честная оговорка: проект развивается очень быстро, релизы выходят часто, иногда с изменениями в структуре compose-файла. Это не повод отказываться — просто не автообновляйтесь вслепую на мажорные версии без чтения changelog, об этом ниже отдельно.

Требования к серверу

Immich — не самый лёгкий сервис: помимо веб-сервера он гоняет ML-модели для распознавания лиц и объектов, а это нагрузка на CPU (или GPU, если он есть).

РесурсМинимумКомфортно
CPU2 vCPU4+ vCPU
RAM4 ГБ6-8 ГБ
ДискSSD, под размер библиотеки + 20% запасаNVMe, отдельный том под фото
ОСUbuntu 24.04 LTS

Это ориентир, а не измеренный бенчмарк — точные цифры зависят от размера библиотеки и от того, сколько фото индексируется одновременно при первом запуске (именно тогда CPU нагружается сильнее всего, дальше нагрузка эпизодическая). Диск — это по факту главная статья расходов: фото и видео с телефона быстро копятся, поэтому берите сервер с запасом по хранилищу или с возможностью докупить дополнительный том.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Подготовка Ubuntu 24.04

Обновите систему и заведите отдельного пользователя без root, если ещё этого не сделали:

apt update && apt upgrade -y
adduser immichadmin
usermod -aG sudo immichadmin

Поставьте Docker и Docker Compose — подробный разбор есть в отдельной статье про установку Docker на Ubuntu 24.04, здесь коротко:

curl -fsSL https://get.docker.com | sh
usermod -aG docker immichadmin

Перелогиньтесь, чтобы группа docker применилась, и настройте файрвол — открываем только SSH и порты для веб-доступа, сам Immich наружу светить не будем:

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Подробнее про настройку правил — в статье про файрвол на Ubuntu 24.04.

Разворачиваем Immich через Docker Compose

Создайте рабочую папку и скачайте актуальные файлы прямо из релизов проекта:

mkdir -p ~/immich-app && cd ~/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, на которую ссылается release — не приходится вручную угадывать структуру сервисов, она меняется от версии к версии.

Откройте .env и поправьте ключевые параметры:

nano .env
UPLOAD_LOCATION=/opt/immich-library
DB_DATA_LOCATION=./postgres
TZ=Europe/Moscow
IMMICH_VERSION=release
DB_PASSWORD=замените_на_свой_длинный_пароль

Пароль базы сгенерируйте сразу нормальный, а не оставляйте дефолтный:

openssl rand -base64 24

UPLOAD_LOCATION лучше вынести на отдельный смонтированный диск, если он у вас есть — это как раз то место, где будут расти ваши оригиналы фото и видео. Создайте директорию заранее:

sudo mkdir -p /opt/immich-library
sudo chown -R $USER:$USER /opt/immich-library

Поднимаем стек:

cd ~/immich-app
docker compose up -d

Актуальный compose-файл разворачивает несколько контейнеров: сам сервер Immich (веб-API и обработка фоновых задач), базу Postgres с векторным расширением для поиска по смыслу, Redis для очередей и контейнер машинного обучения, который считает эмбеддинги и распознаёт лица. Первый запуск может занять пару минут — образы весят немало, особенно ML-контейнер.

Проверьте, что всё поднялось:

docker compose ps
docker compose logs -f immich-server

Дождитесь в логах записи о том, что сервер слушает порт — по умолчанию это 2283.

Первый запуск, аккаунт и мобильное приложение

Откройте в браузере http://IP-сервера:2283 (пока без домена, это временно, для проверки). Первый зарегистрированный аккаунт автоматически становится администратором. Задайте логин, пароль, при желании — шаблон организации библиотеки на диске.

Дальше — мобильное приложение. Оно есть в App Store и Google Play, называется просто Immich. При первом входе укажите адрес сервера (пока IP:порт, позже смените на домен из следующего раздела), войдите под своей учётной записью и включите переключатель автобэкапа в настройках.

Тут стоит сказать честно про разницу платформ. На Android фоновая синхронизация работает через foreground-сервис и обычно стабильна — приложение реально грузит новые кадры, даже когда свёрнуто. На iOS Apple сильно ограничивает фоновую активность приложений, поэтому загрузка иногда откладывается до момента, когда вы открываете приложение сами, или требует держать разрешение на фоновое обновление включённым в настройках iOS. Это не баг Immich, а системное ограничение платформы — на него стоит рассчитывать заранее, а не удивляться потом.

Из полезного сразу после установки: включите общие альбомы для членов семьи, настройте партнёрский доступ, если хотите видеть библиотеку супруга/супруги в общей ленте, и проверьте, что RAW-файлы с камеры (если снимаете не только на телефон) корректно превью-рендерятся — Immich умеет их показывать, но конвертация тяжелее, чем для обычных JPEG.

HTTPS-доступ через домен и защита сервера

Открытый напрямую порт 2283 без TLS — плохая идея, особенно если планируете заходить в приложение вне домашней сети: мобильные ОС и сами приложения работают надёжнее по HTTPS, да и пароль в открытом виде гонять не хочется. Проще всего закрыть это Caddy — он сам получает и продлевает сертификат Let's Encrypt.

Направьте A-запись домена (например, photos.example.com) на IP сервера, затем поставьте Caddy по инструкции Caddy с авто-SSL на Ubuntu 24.04 и добавьте в Caddyfile:

photos.example.com {
    reverse_proxy localhost:2283
}

Перезапустите Caddy:

sudo systemctl reload caddy

После этого закройте прямой доступ к порту Immich извне — в файрволе достаточно не открывать его вовсе (мы и так открывали только 80/443/22), либо явно запретить:

ufw deny 2283

В мобильном приложении и в браузере используйте теперь https://photos.example.com. Дополнительно не забудьте про базовую защиту самого сервера — SSH-ключи вместо пароля и fail2ban не помешают, раз сервис теперь смотрит в интернет.

Бэкап библиотеки, апгрейды и аппаратное ускорение

Своя библиотека фото — это ровно тот случай, когда бэкап не опция, а обязаловка: потерять единственную копию семейного архива обиднее, чем потерять конфиг VPN. У Immich два места, которые нужно бэкапить отдельно — базу данных и файлы оригиналов.

Дамп базы:

docker compose exec -T database pg_dumpall -U postgres > immich_db_$(date +%F).sql

Файлы библиотеки (UPLOAD_LOCATION) бэкапить проще всего через restic — есть отдельный разбор установки restic на Ubuntu 24.04 с настройкой репозитория и расписания. Идея та же: регулярный снапшот /opt/immich-library в отдельное хранилище, желательно за пределами того же физического сервера.

Обновление стека — стандартное для Docker Compose:

cd ~/immich-app
docker compose pull
docker compose up -d

Перед крупным обновлением (не патч-версией, а сменой минорной или мажорной цифры) стоит заглянуть в release notes на GitHub проекта — Immich развивается быстро, и иногда релизы требуют ручных шагов миграции. Мелкие патчи обычно проходят без сюрпризов.

Отдельная тема — аппаратное ускорение, актуальная как раз для выделенного сервера с реальным «железом» под капотом, а не урезанной виртуалки. Если на сервере есть intel-встройка (iGPU с Quick Sync) или GPU с поддержкой CUDA, в официальном репозитории Immich есть готовые override-файлы для транскодинга видео и для ускорения ML-контейнера — они подключаются отдельной командой поверх основного docker-compose.yml. Это заметно ускоряет как обработку видео из галереи, так и распознавание лиц на больших библиотеках, но требует пробрасывать устройство в контейнер, что реальнее сделать именно на выделенном сервере, а не на типовой VPS с виртуализацией без passthrough.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Нужен ли обязательно домен, или можно только по IP?

Можно и по IP в пределах локальной сети (дома через VPN, например), но для доступа снаружи и стабильной работы мобильного приложения домен с HTTPS удобнее и надёжнее.

Сколько человек могут пользоваться одним сервером Immich?

Сколько угодно — это многопользовательская система, у каждого своя библиотека, плюс есть режим общего доступа между «партнёрами» и общие альбомы.

Что будет с оригиналами, если пересчитывать миниатюры или переиндексировать лица?

Оригиналы в UPLOAD_LOCATION не трогаются, пересчёт касается только превью и метаданных распознавания — но бэкап всё равно обязателен, это не замена ему.

Поддерживаются ли HEIC и RAW с iPhone?

Да, Immich принимает и конвертирует HEIC для показа, RAW-файлы тоже загружаются и превьюшатся, хотя рендер превью для RAW ощутимо тяжелее для CPU.

Как перенести библиотеку на новый сервер?

Забрать дамп базы и содержимое UPLOAD_LOCATION, поднять Immich той же версии на новом сервере, восстановить дамп через psql, положить файлы на место и запустить стек.

Что делать, если ML-контейнер ест слишком много CPU при первом запуске?

Это нормально при первичной индексации большой библиотеки — нагрузка спадает, когда все существующие фото проиндексированы, дальше обрабатываются только новые загрузки.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →