Установка Immich на VPS: развёртывание self-hosted альтернативы Google Photos через Docker
TL;DR
В данном руководстве мы разберем процесс установки Immich — самого мощного и быстроразвивающегося решения для хранения фотографий и видео на собственном сервере. Мы настроим полноценную экосистему с поддержкой распознавания лиц, автоматического бэкапа с мобильных устройств и интеллектуального поиска, используя Docker и современные практики администрирования. По итогу вы получите приватное облако, которое по функционалу не уступает Google Photos, но полностью принадлежит вам.
- Полная независимость: Ваши данные хранятся на вашем VPS, а не на серверах корпораций.
- Интеллектуальные функции: Распознавание лиц, поиск по объектам и геопозиции работают локально.
- Безопасность: Настройка SSL-сертификатов, Firewall и автоматических бэкапов.
- Масштабируемость: Возможность подключения внешних хранилищ и оптимизация под большие библиотеки (1ТБ+).
- Версия 2026: Все команды и конфигурации актуальны для современных дистрибутивов Linux.
1. Что мы настраиваем и зачем: Эволюция Self-hosted Photo Storage
Схема: 1. Что мы настраиваем и зачем: Эволюция Self-hosted Photo Storage
Долгое время Google Photos оставался безальтернативным лидером для хранения мобильных медиаархивов. Однако изменение политики бесплатного хранения и растущие опасения пользователей по поводу приватности данных привели к взрывному росту популярности self-hosted решений. Immich — это не просто скрипт для просмотра картинок, это сложная микросервисная архитектура, написанная на TypeScript и Dart, которая ставит своей целью повторить и превзойти пользовательский опыт коммерческих облаков.
Почему стоит выбрать Immich на собственном VPS вместо готовых облачных решений?
- Контроль данных: Вы точно знаете, где физически находятся ваши файлы. Никакие алгоритмы модерации не заблокируют ваш аккаунт из-за ложноположительных срабатываний.
- Скорость работы: При использовании современного VPS с NVMe-дисками индексация и поиск работают быстрее, чем в перегруженных облаках.
- Отсутствие подписок: Вы платите только за ресурсы сервера, а не за "аренду" места по завышенным тарифам.
- Функционал: Поддержка RAW-форматов, живых фото (Live Photos), распознавание лиц на базе машинного обучения и удобные мобильные приложения для iOS и Android.
В рамках этого туториала мы пройдем путь от "голого" сервера до работающего сервиса с настроенным доменом и мобильным приложением.
2. Какой VPS-конфиг нужен под Immich в 2026 году
Схема: 2. Какой VPS-конфиг нужен под Immich в 2026 году
Immich — ресурсный проект. В отличие от простых статических сайтов, он активно использует Machine Learning (ML) для анализа изображений, классификации лиц и генерации превью. Это накладывает определенные требования к железу.
| Ресурс |
Минимум (для 1-2 пользователей) |
Рекомендуемо (для семьи) |
Профи (10+ пользователей) |
| CPU |
2 ядра (x86_64) |
4-6 ядер |
8+ ядер / Dedicated |
| RAM |
4 GB |
8-12 GB |
16 GB+ |
| Disk |
40 GB SSD (система) |
200 GB+ NVMe |
1 TB+ (Block Storage/HDD) |
| OS |
Ubuntu 24.04 LTS |
Ubuntu 24.04 / Debian 12 |
Debian 12 |
Особое внимание стоит уделить оперативной памяти. Компонент immich-machine-learning может потреблять значительный объем RAM при первичной индексации большой библиотеки. Если памяти будет меньше 4 ГБ, Docker может начать аварийно завершать процессы (OOM Killer).
Для комфортной работы и быстрой генерации превью лучше всего выбрать подходящий VPS с SSD или NVMe накопителями, так как база данных PostgreSQL и поисковый движок чувствительны к задержкам ввода-вывода (IOPS).
Если ваша библиотека превышает 500 ГБ, рассмотрите возможность подключения дополнительного блочного хранилища (Block Storage) или использование выделенного сервера (Dedicated), где можно установить емкие HDD диски в RAID-массиве для повышения надежности.
3. Подготовка сервера: Безопасность и базовые утилиты
Схема: 3. Подготовка сервера: Безопасность и базовые утилиты
Прежде чем устанавливать Docker, необходимо привести сервер в порядок. Мы предполагаем, что у вас есть свежая установка Ubuntu 24.04 или 26.04.
Первым делом обновим список пакетов и саму систему:
sudo apt update && sudo apt upgrade -y
Установим необходимые системные утилиты, которые пригодятся нам для диагностики и работы:
sudo apt install -y curl wget git vim software-properties-common ufw fail2ban htop
Настройка безопасности — критический шаг. Настроим Firewall (UFW), разрешив только SSH и порты для веб-трафика:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
Рекомендуется также создать отдельного пользователя с правами sudo, чтобы не работать под root постоянно:
adduser adminuser
usermod -aG sudo adminuser
После этого лучше настроить вход по SSH-ключам и отключить вход по паролю в файле /etc/ssh/sshd_config.
4. Установка Docker и Docker Compose
Схема: 4. Установка Docker и Docker Compose
Immich поставляется в виде набора Docker-контейнеров. Это стандарт индустрии, который позволяет избежать конфликтов зависимостей. В 2026 году мы используем официальный репозиторий Docker для получения самых свежих версий.
Добавляем GPG-ключ Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Добавляем репозиторий в список источников:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Устанавливаем Docker Engine и Docker Compose плагин:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверяем корректность установки:
docker --version
docker compose version
Добавьте своего пользователя в группу docker, чтобы запускать контейнеры без sudo:
sudo usermod -aG docker $USER
Внимание: Для вступления изменений в силу нужно перезайти в систему или выполнить команду newgrp docker.
5. Пошаговое развертывание Immich
Схема: 5. Пошаговое развертывание Immich
Immich требует несколько файлов для запуска: основной манифест docker-compose.yml, файл конфигурации переменных окружения .env и базу данных PostgreSQL с расширением pgvector.
Создадим директорию для проекта:
mkdir -p ~/immich-app && cd ~/immich-app
Скачаем актуальные файлы конфигурации напрямую из официального репозитория Immich:
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget https://github.com/immich-app/immich/releases/latest/download/example.env -O .env
Давайте разберем, что находится внутри docker-compose.yml. В нем описаны следующие сервисы:
- immich-server: Основной API и бэкенд приложения.
- immich-microservices: Задачи по обработке видео, генерации превью и метаданных.
- immich-machine-learning: Сервис для распознавания лиц и классификации объектов.
- postgres: База данных для хранения метаданных и векторов лиц.
- redis: Очередь задач и кеширование.
Теперь создадим папку, где будут физически храниться ваши фотографии:
mkdir -p /home/$USER/immich-data/photos
mkdir -p /home/$USER/immich-data/postgres
6. Тонкая настройка: Переменные окружения и секреты
Схема: 6. Тонкая настройка: Переменные окружения и секреты
Файл .env содержит все ключевые настройки. Откройте его для редактирования:
nano .env
Вам необходимо изменить следующие параметры:
# Путь к вашим фото (обязательно укажите абсолютный путь)
UPLOAD_LOCATION=/home/adminuser/immich-data/photos
# Версия Immich (рекомендуется оставить release)
IMMICH_VERSION=release
# Секреты для базы данных (сгенерируйте свои сложные пароли!)
DB_PASSWORD=your_strong_password_here
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
# Настройки Redis
REDIS_HOSTNAME=redis
Если вы планируете использовать аппаратное ускорение для кодирования видео (например, если ваш VPS поддерживает Intel QuickSync или у вас есть GPU), в docker-compose.yml нужно будет пробросить соответствующие устройства (/dev/dri). Для большинства стандартных VPS мы оставляем программное кодирование.
После настройки запустим контейнеры:
docker compose up -d
Проверим статус запуска:
docker compose ps
Если все сервисы находятся в статусе Up, значит, бэкенд запущен и слушает порт 2283. Однако открывать этот порт напрямую в интернет небезопасно и неудобно (нет HTTPS).
7. Настройка HTTPS через Caddy: Доступ из внешнего мира
Схема: 7. Настройка HTTPS через Caddy: Доступ из внешнего мира
Для безопасного доступа через домен (например, photos.yourdomain.com) мы будем использовать Caddy. Это современный веб-сервер, который автоматически получает и обновляет SSL-сертификаты от Let's Encrypt.
Установим Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1G 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1G 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Создадим конфигурационный файл Caddyfile:
sudo nano /etc/caddy/Caddyfile
Добавьте туда следующий блок (замените домен на свой):
photos.yourdomain.com {
reverse_proxy localhost:2283
# Настройки для загрузки больших файлов
request_body {
max_size 10GB
}
}
Перезапустите Caddy:
sudo systemctl restart caddy
Теперь при переходе по вашему домену вы увидите экран приветствия Immich, где сможете создать первого администратора.
8. Бэкапы и обслуживание: Как не потерять семейный архив
Схема: 8. Бэкапы и обслуживание: Как не потерять семейный архив
Self-hosting накладывает на вас ответственность за сохранность данных. В Immich нужно бэкапить три вещи: базу данных PostgreSQL, файлы фотографий (Uploads) и файл .env.
Бэкап базы данных
Создадим простой скрипт для ежедневного дампа базы:
mkdir -p ~/immich-backups
nano ~/immich-backups/backup.sh
Текст скрипта:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/home/adminuser/immich-backups"
docker exec -t immich_postgres pg_dumpall -c -U postgres > $BACKUP_DIR/immich_db_$DATE.sql
# Удаляем бэкапы старше 30 дней
find $BACKUP_DIR -type f -name ".sql" -mtime +30 -delete
Сделайте скрипт исполняемым и добавьте его в cron:
chmod +x ~/immich-backups/backup.sh
(crontab -l ; echo "0 3 /home/adminuser/immich-backups/backup.sh") | crontab -
Синхронизация файлов
Для самих фотографий рекомендуется использовать инструменты вроде Restic или Rclone, чтобы отправлять их в облачное хранилище (S3, Backblaze B2). Команда для Rclone может выглядеть так:
rclone sync /home/adminuser/immich-data/photos remote:immich-backup-bucket
Обновление Immich
Immich обновляется часто. Для обновления выполните:
cd ~/immich-app
docker compose pull
docker compose up -d
Важно: Всегда читайте Release Notes на GitHub перед обновлением, так как иногда требуются ручные действия (Breaking Changes).
9. Troubleshooting + FAQ: Решение типичных проблем
Почему лица не распознаются сразу после загрузки?
Распознавание лиц — это фоновая задача. После загрузки фото оно попадает в очередь. Вы можете отслеживать прогресс в разделе Administration -> Job Settings. Если очередь стоит на месте, проверьте, запущен ли контейнер immich-machine-learning и хватает ли ему оперативной памяти. На слабых CPU этот процесс может занимать значительное время.
Какой VPS-конфиг минимально подойдёт для Immich?
Минимальный порог — 4 ГБ оперативной памяти и 2 ядра CPU. Однако на такой конфигурации интерфейс может "подтормаживать" во время индексации. Для комфортной работы рекомендуется 8 ГБ RAM. Если у вас огромная библиотека (более 100 000 фото), фокус смещается на скорость дисковой подсистемы — NVMe будет в разы предпочтительнее обычных SSD.
Что выбрать — VPS или dedicated для этой задачи?
Для большинства пользователей достаточно мощного VPS. Это дает гибкость: вы можете легко расширить объем диска или памяти. Dedicated-сервер стоит выбирать в двух случаях: если вам нужна максимальная приватность (физически выделенное железо) или если объем вашей библиотеки исчисляется терабайтами, так как стоимость хранения на больших HDD в составе выделенного сервера обычно ниже, чем стоимость блочного хранилища у облачных провайдеров.
Ошибка "Database is not ready" при старте. Что делать?
Обычно это означает, что контейнер с PostgreSQL еще не успел инициализироваться или упал из-за неверных прав на папку с данными. Проверьте логи: docker compose logs postgres. Убедитесь, что папка, указанная в .env, доступна пользователю, от которого запущен Docker.
Как перенести существующую библиотеку из Google Photos?
Используйте сервис Google Takeout для выгрузки архива. После скачивания воспользуйтесь утилитой Immich CLI. Она позволяет импортировать папки с сохранением структуры и метаданных. Не стоит просто копировать файлы в папку uploads, так как Immich должен проиндексировать их через API для корректной работы базы данных.
Immich потребляет слишком много ресурсов CPU, сервер греется/тормозит.
В настройках администратора (Job Settings) вы можете ограничить количество потоков (concurrency) для задач машинного обучения и генерации превью. Установите значение 1 или 2, чтобы оставить ресурсы для других задач сервера.
10. Выводы и следующие шаги
Мы успешно развернули Immich на VPS, обеспечив безопасность через Caddy и автоматизировав обслуживание. Теперь ваша медиатека находится под вашим полным контролем, а функционал распознавания объектов и лиц работает без участия сторонних корпораций.
Что делать дальше?
- Скачайте мобильное приложение Immich в App Store или Google Play и настройте автоматический бэкап фотографий с вашего телефона.
- Изучите раздел "External Libraries" — он позволяет подключить к Immich уже существующие на сервере папки с фото без их дублирования.
- Настройте многофакторную аутентификацию (2FA) в профиле пользователя для максимальной защиты вашего архива.
Помните, что Immich активно развивается. Регулярно проверяйте обновления и делайте бэкапы перед каждым обновлением контейнеров. Теперь ваш личный "Google Photos" готов к работе!