Установка Immich на Proxmox: полное руководство

Установка Immich на Proxmox чаще всего упирается в один и тот же момент: контейнер создан, Docker внутри него поднят, а веб-интерфейс фотогалереи не открывается из-за неправильно проброшенного хранилища или нехватки прав в непривилегированном LXC. Проблема решается на этапе подготовки, поэтому разберём весь процесс от выбора типа виртуализации до первой загрузки фотографий.

Immich — это self-hosted альтернатива Google Photos с автоматической загрузкой снимков со смартфона, распознаванием лиц и поиском по объектам. Proxmox VE позволяет развернуть его либо в лёгком LXC-контейнере, либо в полноценной виртуальной машине. Оба варианта рабочие, но у каждого есть нюансы, которые определяют стабильность всей системы.

LXC или VM: что выбрать для Immich

Первое решение, которое нужно принять, — тип виртуализации. LXC-контейнер расходует меньше ресурсов, стартует за секунды и удобен для бэкапов штатными средствами Proxmox. Однако Immich работает через Docker, а Docker внутри LXC требует включения вложенной виртуализации (nesting) и аккуратной настройки прав.

Полноценная виртуальная машина изолирована сильнее и не создаёт проблем с правами на файловую систему, но потребляет больше оперативной памяти и дискового пространства. Если сервер слабый или вы планируете держать на нём ещё несколько сервисов, LXC предпочтительнее. Если надёжность и простота обслуживания важнее экономии ресурсов — берите VM с Debian или Ubuntu Server.

  • 🖥️ LXC — быстрый старт, минимальные накладные расходы, но нужен nesting для Docker
  • 💻 VM — полная изоляция, никаких сюрпризов с правами, но выше расход RAM
  • 📦 Docker в LXC требует опций nesting=1 и желательно keyctl=1
  • 🔄 Для GPU-ускорения распознавания лиц в LXC проброс устройств сложнее, чем в VM с PCI passthrough
📊 Как вы разворачиваете Immich на Proxmox?
В LXC-контейнере
В виртуальной машине
Через готовый helper-скрипт
Только планирую установку

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

Immich состоит из нескольких сервисов: сервер приложения, база данных PostgreSQL, Redis и модуль машинного обучения. Именно последний самый прожорливый — при первичной индексации библиотеки он загружает процессор и память под завязку.

ПараметрМинимумКомфортно
vCPU24 и более
RAM4 ГБ8 ГБ
Диск под систему20 ГБ40 ГБ SSD
Хранилище фотопо размеру библиотекис запасом на превью

Обратите внимание: кроме оригиналов фотографий Immich генерирует миниатюры и видеопревью, которые тоже занимают место. Закладывайте на хранилище запас поверх объёма самой библиотеки. Для больших коллекций имеет смысл сразу подключить отдельный диск или сетевое хранилище.

Создание LXC-контейнера под Immich

Создайте контейнер через веб-интерфейс Proxmox: Datacenter → Create CT. В качестве шаблона подойдёт Debian актуальной версии. При настройке отметьте контейнер как привилегированный либо, если используете непривилегированный, будьте готовы к дополнительной настройке mapping пользователей — для Docker это критично.

После создания откройте конфигурацию контейнера и включите необходимые опции. В консоли хоста Proxmox это делается так:

pct set <ID> --features nesting=1,keyctl=1

Далее зайдите в контейнер командой pct enter <ID>, обновите систему и установите Docker с плагином compose официальным способом из документации Docker. Проверьте, что демон запустился: docker run hello-world должен отработать без ошибок.

⚠️ Внимание: запуск Immich в непривилегированном LXC без корректного mapping UID/GID приводит к тому, что файлы загруженных фото на смонтированных каталогах принадлежат «чужим» пользователям. Если видите ошибки доступа к файлам — проверьте соответствие ID пользователя внутри контейнера и на хосте.

☑️ Готовность контейнера к установке Immich

Выполнено: 0 / 5

Монтирование хранилища для фотографий

Фотобиблиотеку лучше держать вне системного диска контейнера. Для LXC используется bind mount — проброс каталога с хоста внутрь контейнера. Точка монтирования добавляется в конфигурацию контейнера:

pct set <ID> -mp0 /mnt/photos,mp=/mnt/photos

Здесь /mnt/photos на хосте — каталог, где физически лежат снимки, а после запятой — путь внутри контейнера. Для виртуальной машины аналогичная задача решается пробросом диска через VirtIO или монтированием сетевой шары по NFS/SMB внутри гостевой системы.

Перед первым запуском Immich убедитесь, что пользователь, от которого работают контейнеры Docker, имеет право записи в каталог библиотеки — иначе загрузка фото будет молча падать или выдавать ошибки в логах.

Установка Immich через Docker Compose

Официальный способ установки Immich — через docker compose. Создайте рабочий каталог, например /opt/immich, и скачайте актуальные файлы docker-compose.yml и .env из официального репозитория проекта на GitHub. Имена и структура файлов периодически меняются между версиями, поэтому сверяйтесь с документацией на момент установки.

В файле .env обязательно задайте три вещи: путь к каталогу библиотеки (UPLOAD_LOCATION), пароль к базе данных и версию образа. Значение latest для версии использовать не стоит — при автообновлении можно получить несовместимые миграции базы. Указывайте конкретный тег релиза.

docker compose up -d

docker compose logs -f immich_server

Первая команда поднимает все сервисы, вторая показывает логи — по ним удобно отследить готовность. После запуска веб-интерфейс доступен по адресу http://IP-контейнера:2283. Первый зарегистрированный пользователь становится администратором.

Типичные ошибки и их решение

Что делать, если страница Immich не открывается? Начните с проверки по цепочке: работает ли контейнер, слушает ли порт сервис, нет ли ошибок в логах. Команда docker compose ps покажет статус всех контейнеров — если какой-то в состоянии Restarting, смотрите его логи первым делом.

  • 🔌 Порт недоступен — проверьте файрвол Proxmox и корректность проброса портов в compose-файле
  • 💾 Ошибки записи файлов — несовпадение UID/GID между хостом и контейнером, лечится настройкой mapping
  • 🧠 ML-задачи висят — нехватка RAM, увеличьте лимит памяти контейнера или VM
  • 🗄️ Ошибки подключения к базе — проверьте пароль в .env и что контейнер PostgreSQL запущен
⚠️ Внимание: не обновляйте Immich, не сделав снапшот контейнера или бэкап базы данных. Миграции схемы БД необратимы — откатиться на старую версию образа после неудачного обновления без резервной копии не получится.
Как ускорить распознавание лиц на слабом железе

Если процессор без GPU, модуль машинного обучения работает на CPU и индексация большой библиотеки может занять часы или дни. Можно вынести ML-контейнер на другую машину в сети, указав её адрес в настройках Immich, либо временно отключить часть задач в админ-панели и запускать их ночью.

Обновление и резервное копирование

Обновление сводится к замене тега версии в .env и перезапуску стека командой docker compose pull && docker compose up -d. Но перед этим обязательно сделайте две вещи: снапшот контейнера/VM средствами Proxmox и дамп базы данных штатной утилитой pg_dump внутри контейнера PostgreSQL.

Резервная копия Immich — это не только сами фотографии. Без дампа базы вы потеряете альбомы, метаданные лиц, настройки пользователей и историю загрузок. Храните дампы БД рядом с бэкапом библиотеки, чтобы восстановление было согласованным.

Часто задаваемые вопросы

Можно ли установить Immich без Docker напрямую в LXC?

Теоретически да, но официально поддерживается только развёртывание через Docker Compose. Ручная установка всех зависимостей (PostgreSQL, Redis, ML-модуль) сложна в сопровождении и ломается при обновлениях.

Какой порт использует Immich по умолчанию?

Веб-интерфейс по умолчанию доступен на порту 2283. Его можно изменить в настройках compose-файла, а для доступа извне рекомендуется поставить перед Immich обратный прокси с HTTPS.

Работает ли мобильное приложение Immich с self-hosted сервером?

Да, в приложении для Android и iOS достаточно указать адрес вашего сервера. Для автозагрузки фото вне домашней сети потребуется доступ из интернета — через VPN или обратный прокси с сертификатом.

Сколько места занимают превью и метаданные?

Точный объём зависит от размера и состава библиотеки. Миниатюры и транскодированные видео могут добавлять заметную долю к объёму оригиналов, поэтому закладывайте запас дискового пространства и следите за наполнением через веб-интерфейс Proxmox.

Можно ли перенести существующую фотобиблиотеку в Immich?

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