Установка 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 состоит из нескольких сервисов: сервер приложения, база данных PostgreSQL, Redis и модуль машинного обучения. Именно последний самый прожорливый — при первичной индексации библиотеки он загружает процессор и память под завязку.
| Параметр | Минимум | Комфортно |
|---|---|---|
| vCPU | 2 | 4 и более |
| RAM | 4 ГБ | 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
Монтирование хранилища для фотографий
Фотобиблиотеку лучше держать вне системного диска контейнера. Для 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. Второй способ сохраняет структуру папок и не дублирует файлы.