Как установить и настроить Immich на VPS
Google Photos перестал быть бесплатным ещё несколько лет назад, а привычка автоматически выгружать фото с телефона осталась. Immich закрывает этот разрыв: open-source сервис, который принимает бэкап с мобильного приложения, распознаёт лица и объекты на фото, строит карту по геометкам — и всё это на вашем собственном сервере, без лимитов на хранилище кроме размера диска. Разворачивается он через Docker Compose буквально за полчаса, если знать, на какие грабли не наступать. В этом руководстве — рабочая установка Immich на VPS с нуля: от требований к серверу до автобэкапа с телефона и регулярных бэкапов базы.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Immich и когда он оправдан
Immich — это self-hosted платформа для хранения и организации фото и видео с мобильных устройств. Ключевая особенность на фоне альтернатив вроде PhotoPrism или связки Nextcloud + приложение — Immich изначально проектировался как замена именно Google Photos: у него есть полноценные iOS- и Android-приложения с фоновой синхронизацией, а не просто веб-интерфейс с загрузкой руками.
Из коробки вы получаете:
- автоматический бэкап фото и видео с телефона в фоне, включая RAW и Live Photos;
- распознавание лиц и группировку людей (локально, без отправки фото во внешние API);
- поиск по содержимому снимка («пляж», «собака», «документ») через CLIP-модель;
- карту с привязкой снимков к геометкам;
- общие альбомы и партнёрский доступ (например, у супругов — общая лента);
- мобильное приложение, которое можно удалить оригиналы с телефона после успешного бэкапа, освобождая память устройства.
Смысл ставить Immich появляется, когда фотоархив семьи растёт быстрее, чем хочется платить Google или Apple за подписку, и когда вы не готовы отдавать распознавание лиц по своим детям стороннему облаку. Минус честно: это не «поставил и забыл» — за сервисом нужно присматривать, база данных требует бэкапов, а обновления иногда меняют схему БД. Если это не пугает — переходим к делу.
Требования к серверу
Immich состоит из нескольких контейнеров: сервер API, воркер машинного обучения (распознавание лиц и CLIP-поиск), PostgreSQL с расширением для векторного поиска и Redis. Это ощутимо тяжелее, чем условный однопроцессный сервис.
Ориентировочные требования:
| Параметр | Минимум | Комфортно |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 ГБ | 6–8 ГБ |
| Диск | под объём архива + 20% запаса | SSD/NVMe, отдельный том под фото |
| ОС | Ubuntu 24.04 / Debian 12 | — |
Главный потребитель ресурсов — machine-learning контейнер: первичное индексирование большого архива (десятки тысяч фото) может занимать несколько часов и заметно грузить CPU. На VPS с 2 vCPU это будет медленно, но рабочеспособно; если архив на 50 000+ фото и хочется, чтобы распознавание лиц не тянулось сутками, берите 4 vCPU. Точные цифры по времени индексации зависят от объёма и разрешения фото — ориентируйтесь на порядок «часы», а не «минуты», и не судите о производительности по первому дню.
По диску: фото и видео в оригинальном качестве занимают место быстро, особенно если телефон снимает в 4K и RAW. Планируйте диск с запасом или используйте VPS с подключаемым дополнительным томом, который проще расширить, чем пересоздавать основной раздел.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Docker и подготовка VPS
Immich официально поддерживается только через Docker Compose — ставить компоненты вручную не имеет смысла. Если Docker ещё не установлен, поставьте его штатным способом (подробный разбор есть в отдельной статье про установку Docker с нуля):
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker --version
docker compose version
Создайте рабочую директорию и структуру для данных:
mkdir -p /opt/immich/library
cd /opt/immich
Каталог library — это то место, куда лягут все оригиналы фото и видео. Если под фото выделен отдельный диск или том, примонтируйте его сюда заранее и проверьте df -h, прежде чем заливать первый бэкап — переносить терабайты данных между разделами постфактум не самое приятное занятие.
Развёртывание Immich через Docker Compose
Официальный проект даёт готовый docker-compose.yml и файл окружения .env — их проще скачать актуальными, чем копировать вручную, потому что образы и версии меняются чаще, чем хотелось бы:
curl -o docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
curl -o .env https://github.com/immich-app/immich/releases/latest/download/example.env
Откройте .env и задайте минимум три параметра:
# Куда складывать оригиналы фото/видео
UPLOAD_LOCATION=/opt/immich/library
# Данные для внутреннего PostgreSQL — задайте свой пароль
DB_PASSWORD=замените-на-длинный-случайный-пароль
# Версия — release тянет последний стабильный релиз
IMMICH_VERSION=release
Композ-файл в актуальной версии поднимает четыре сервиса: immich-server (API и веб-интерфейс), immich-machine-learning (распознавание лиц, CLIP-поиск), redis (очереди задач) и database (PostgreSQL с векторным расширением для поиска по смыслу). Проверять точные теги образов и версию Postgres-расширения лучше прямо в скачанном файле — Immich развивается быстро, и фиксировать их здесь смысла нет, они устареют раньше, чем вы прочитаете статью.
Запускаем:
docker compose up -d
docker compose ps
Дайте контейнерам минуту на первый старт — database должен инициализировать схему, а immich-machine-learning скачать модели при первом обращении. Логи для диагностики:
docker compose logs -f immich-server
Веб-интерфейс уже доступен на порту 2283:
http://IP-вашего-сервера:2283
Первый заход — создание администратора: email, пароль, имя. Дальше можно заводить дополнительных пользователей (например, членов семьи) прямо из панели администратора.
Домен, HTTPS и reverse-proxy
Открывать Immich напрямую по IP:2283 неудобно и небезопасно — мобильное приложение тоже должно ходить по HTTPS, иначе бэкап на мобильной сети превратится в проблему с сертификатами. Проще всего повесить перед Immich reverse-proxy с автоматическим SSL. Разберём на примере Caddy — он получает сертификат Let's Encrypt сам, без отдельной настройки certbot (подробности — в статье про установку Caddy с авто-SSL на VPS).
Убедитесь, что A-запись домена (например, photos.example.com) указывает на IP сервера, затем создайте Caddyfile:
photos.example.com {
reverse_proxy localhost:2283
}
И запустите Caddy — сертификат выпустится и обновится автоматически. Если вместо Caddy у вас уже стоит Nginx, конфиг reverse-proxy для Immich должен явно поддерживать большие тела запросов (загрузка видео) и long-lived соединения:
server {
listen 443 ssl;
server_name photos.example.com;
client_max_body_size 50000M;
proxy_read_timeout 600s;
location / {
proxy_pass http://127.0.0.1:2283;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
}
}
Параметр client_max_body_size критичен: без него загрузка видео в высоком разрешении будет обрываться с ошибкой 413, а разбираться в причине придётся дольше, чем настроить сразу правильно.
Мобильное приложение, автобэкап и обновления
Установите приложение Immich (доступно в App Store и Google Play), при первом запуске укажите адрес сервера — https://photos.example.com/api — и войдите под созданным аккаунтом. В настройках бэкапа:
- включите «Автобэкап» и выберите альбомы для синхронизации (по умолчанию — весь Camera Roll);
- решите, нужен ли бэкап только по Wi-Fi (по умолчанию да — разумно для лимитированного мобильного трафика);
- при желании включите автоудаление с телефона снимков, для которых бэкап подтверждён — это единственный способ реально освободить память устройства, а не просто иметь копию «на всякий случай».
Для семьи или пары полезна функция Partner Sharing — она открывает доступ к своей библиотеке другому пользователю без общего аккаунта, у каждого остаётся свой автобэкап и свой набор альбомов.
Обновление Immich — это обновление тегов образов и пересоздание контейнеров:
cd /opt/immich
docker compose pull
docker compose up -d
Важный нюанс: перед крупным обновлением (смена мажорной версии) загляните в release notes проекта на GitHub — иногда там требуется ручной шаг миграции базы или меняется формат .env. Пропустить это — верный способ получить сервис, который не стартует после docker compose up -d, с непонятной ошибкой в логах database.
Резервное копирование
Фото — это данные, которые не прощают потери, поэтому бэкап Immich должен закрывать две вещи отдельно: сам файловый архив (UPLOAD_LOCATION) и базу PostgreSQL с метаданными, альбомами и распознанными лицами. Восстановить одно без другого не получится — файлы без базы превратятся в безымянную кучу, а база без файлов будет ссылаться в никуда.
Дамп базы данных:
docker compose exec -T database pg_dumpall -c -U postgres > /opt/immich/backup/immich-db-$(date +%F).sql
Файловый архив синхронизируйте на внешнее хранилище отдельным заданием — вручную через rsync на другой сервер или через специализированный инструмент вроде Duplicati, если нужна дедупликация и шифрование бэкапа. Для восстановления после сбоя пригодится и понимание общих принципов бэкапа Docker-томов — эта тема разобрана в статье про бэкап Docker volume.
Простое расписание через cron — раз в сутки дамп базы плюс еженедельная полная синхронизация архива на второй сервер или объектное хранилище — закрывает 90% рисков. Проверяйте восстановление хотя бы раз в несколько месяцев на тестовом окружении: бэкап, который никогда не разворачивали, с равной вероятностью может оказаться и рабочим, и битым.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Immich бесплатен полностью?
Да, это open-source проект с открытым исходным кодом, лицензия не ограничивает домашнее и коммерческое использование. Разработка финансируется донатами и опциональной облачной версией, но self-hosted вариант остаётся полностью бесплатным.
Сколько занимает индексация большого архива фото?
Зависит от объёма, разрешения снимков и мощности CPU — процесс распознавания лиц и построения CLIP-эмбеддингов на слабом VPS может растянуться на часы для архива в десятки тысяч фото. Это одноразовая нагрузка: новые фото после бэкапа индексируются в фоне почти незаметно.
Можно ли перенести библиотеку из Google Photos в Immich?
Да, через Google Takeout — экспортируете архив, затем используете встроенный в Immich инструмент импорта библиотеки, который восстанавливает даты съёмки и геометки из метаданных Takeout, если они сохранились в JSON-файлах экспорта.
Нужна ли видеокарта для распознавания лиц?
Нет, machine-learning контейнер по умолчанию работает на CPU. GPU-ускорение поддерживается опционально и ускоряет обработку, но для домашнего использования CPU-режима обычно достаточно, просто индексация займёт больше времени.
Что будет с фото, если сервер выйдет из строя без бэкапа?
Всё, что лежит в UPLOAD_LOCATION и базе PostgreSQL, будет потеряно вместе с диском — Immich не хранит копию где-то ещё сам по себе. Именно поэтому раздел про бэкапы в этом руководстве не опциональный, а обязательный шаг настройки.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →