Самостоятельный хостинг Immich на VPS с Docker Compose

14 мин чтения·Matthieu·photo-managementself-hostingimmichdocker-composegoogle-photos-alternative|

Разверните Immich на VPS как самостоятельно размещённую замену Google Photos. Настройка Docker Compose, мобильный бэкап, планирование хранилища с реальными цифрами, машинное обучение на CPU, бэкап и восстановление базы данных, безопасное обновление.

Immich — открытая платформа для управления фотографиями и видео с самостоятельным размещением. Она обеспечивает автоматический бэкап с мобильных устройств, распознавание лиц, умный поиск и общий доступ к альбомам. Если хочешь перестать отправлять свои фото в Google, Immich — наиболее полная самостоятельно размещаемая альтернатива.

Запуск Immich на европейском VPS означает, что твои фотографии остаются на инфраструктуре, которую ты контролируешь. Никакого сканирования третьими лицами, никаких обучающих датасетов, никаких неожиданных изменений политики. С точки зрения GDPR, ты одновременно контроллер данных и процессор, что упрощает соответствие требованиям, когда данные никогда не покидают твой сервер.

Это руководство разворачивает Immich на удалённом VPS с помощью Docker Compose. Предполагается, что Docker Engine с плагином Compose уже установлен и работает reverse proxy. Если их нужно установить сначала, смотри Docker в продакшене на VPS: что ломается и как это починить и Traefik vs Caddy vs Nginx: сравнение Docker reverse proxy.

Что нужно для запуска Immich на VPS?

Immich требует минимум 6 ГБ оперативной памяти и 2 ядра CPU для полного развёртывания с включённым машинным обучением. Без ML достаточно 4 ГБ. Хранилище зависит от твоей фотобиблиотеки: рассчитывай на сырой размер библиотеки плюс 10-20% накладных расходов на миниатюры и перекодированное видео, плюс 1-3 ГБ для базы PostgreSQL. Требуется Docker Engine с плагином Compose. Immich работает только на Linux.

Компонент Минимум Рекомендуется
RAM 4 ГБ (ML выключен) 8 ГБ
CPU 2 ядра 4 ядра
Хранилище 50 ГБ (небольшая библиотека) 250 ГБ+
ПО Docker Engine + плагин Compose То же
ОС Любой Linux с Docker Ubuntu 22.04/24.04, Debian 12

PostgreSQL нуждается в локальном SSD-хранилище. Никогда не размещай базу данных на сетевом ресурсе. На Virtua VPS NVMe — стандарт, так что это уже покрыто.

Как развернуть Immich с Docker Compose?

Скачай официальный файл Docker Compose и пример файла окружения со страницы релизов Immich, настрой пути хранилища и пароль базы данных, затем запусти стек.

Создать директорию проекта

mkdir -p /opt/immich && cd /opt/immich

Скачать официальные файлы

Всегда скачивай эти файлы из последнего релиза. Не копируй из блогов (включая этот), потому что Immich часто обновляет свой Compose-файл под изменения образов базы данных.

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

Настроить окружение

Открой файл .env:

nano .env

Задай следующие значения:

UPLOAD_LOCATION=/opt/immich/data
DB_DATA_LOCATION=/opt/immich/postgres
IMMICH_VERSION=v2.6.1
DB_PASSWORD=<твой-надёжный-пароль>
TZ=Europe/Berlin

Сгенерируй надёжный пароль для базы данных, используя только буквенно-цифровые символы (A-Za-z0-9). Спецсимволы вызывают проблемы парсинга Docker Compose в файлах .env:

openssl rand -base64 32 | tr -dc 'A-Za-z0-9' | head -c 32; echo

Скопируй вывод и вставь как значение DB_PASSWORD.

Зафиксируй IMMICH_VERSION на конкретном теге релиза вроде v2.6.1 вместо метатега v2. Это предотвращает неожиданные обновления при запуске docker compose pull для других сервисов. Ты сам контролируешь, когда Immich обновляется.

Создать директории данных

mkdir -p /opt/immich/data /opt/immich/postgres

Убрать открытый порт

Стандартный Compose-файл открывает порт 2283 напрямую. Поскольку ты используешь reverse proxy, удали или закомментируй секцию ports в docker-compose.yml, чтобы Immich был доступен только через прокси:

sed -i "s/- '2283:2283'/# - '2283:2283'/" docker-compose.yml

Вместо этого подключи Immich к Docker-сети твоего reverse proxy. Если сеть прокси называется proxy:

cat >> docker-compose.yml << 'EOF'

networks:
  default:
  proxy:
    external: true
EOF

Затем добавь сеть proxy к сервису immich-server. Отредактируй docker-compose.yml и добавь под сервисом immich-server:

    networks:
      - default
      - proxy

Это оставляет базу данных и Redis во внутренней сети, открывая reverse proxy доступ только к серверу.

Запустить стек

docker compose up -d

Следи за логами, чтобы убедиться, что все сервисы стартуют нормально:

docker compose logs -f --tail=50

В логах сервера появится Immich Server is listening on http://[::1]:2283, когда он будет готов. Сервис машинного обучения затем загружает свои модели. Нажми Ctrl+C, чтобы выйти из потока логов.

Проверь, что все четыре контейнера работают:

docker compose ps
NAME                    STATUS
immich_server           Up (healthy)
immich_machine_learning Up (healthy)
immich_redis            Up (healthy)
immich_postgres         Up (healthy)

Все четыре должны показать Up (healthy) в течение пары минут. ML-контейнер запускается дольше всех, потому что скачивает модели при первом старте.

Ограничить права доступа к файлам

Файл .env содержит пароль от базы данных. Заблокируй его:

chmod 600 .env
ls -la .env
-rw------- 1 root root 245 Mar 20 10:00 .env

Как настроить reverse proxy для Immich?

Immich нуждается в reverse proxy для HTTPS и обработки больших файловых загрузок с мобильных устройств. Лимит размера тела запроса нужно выставить достаточно высоко для загрузки видео. Без этого загрузки, превышающие стандартный лимит (обычно 1 МБ в Nginx), молча провалятся.

Полную настройку reverse proxy смотри в Traefik vs Caddy vs Nginx: сравнение Docker reverse proxy. Ниже — фрагменты, специфичные для Immich.

Caddy

В твоём Caddyfile:

photos.example.com {
    reverse_proxy immich_server:2283
}

Caddy автоматически управляет TLS и не имеет лимита размера тела по умолчанию, поэтому загрузка видео работает сразу.

Traefik

Добавь labels к сервису immich-server в docker-compose.yml:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.immich.rule=Host(`photos.example.com`)"
      - "traefik.http.routers.immich.entrypoints=websecure"
      - "traefik.http.routers.immich.tls.certresolver=letsencrypt"
      - "traefik.http.services.immich.loadbalancer.server.port=2283"

Для больших загрузок через Traefik добавь middleware для увеличения лимита буферизации или настрой maxRequestBodyBytes в статической конфигурации Traefik.

Nginx

Если используешь Nginx как reverse proxy, ключевая настройка — client_max_body_size. Без неё загрузка видео не будет работать:

server {
    server_name photos.example.com;

    client_max_body_size 50000M;

    location / {
        proxy_pass http://immich_server:2283;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support for real-time updates
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Направь DNS A-запись (и AAAA, если есть IPv6) на IP-адрес твоего VPS. После распространения DNS обращайся к Immich по адресу https://photos.example.com.

Как защитить Immich после первого входа?

Открой https://photos.example.com в браузере. Immich покажет страницу регистрации. Создай учётную запись администратора с надёжным паролем.

После создания учётной записи админа немедленно отключи публичную регистрацию. Перейди в Administration > Settings > Server и выключи Allow New Users. Иначе любой, кто обнаружит твой URL, сможет создать аккаунт и загружать файлы в твоё хранилище.

Настройки панели администратора для проверки

  • Administration > Settings > Storage Template: включи, чтобы организовывать файлы по дате ({{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}) вместо случайных UUID. Это позволяет вручную просматривать файлы и выборочно восстанавливать.
  • Administration > Settings > Backup: автоматические бэкапы базы данных включены по умолчанию, запускаются ежедневно в 2:00 с хранением 14 дней. Убедись, что это активно.
  • Administration > Settings > Server: установи внешний URL на свой домен (https://photos.example.com). Мобильное приложение и общие ссылки используют его.

Укрепление на уровне контейнеров

Добавь параметры безопасности к сервису immich-server в docker-compose.yml:

    security_opt:
      - no-new-privileges:true

Это предотвращает повышение привилегий внутри контейнера. Флаг no-new-privileges блокирует бинарники с setuid от получения повышенных прав.

Для ограничения ресурсов добавь лимиты памяти, чтобы ни один контейнер не сожрал всю RAM VPS и не вызвал OOM killer. Полный синтаксис смотри в Лимиты ресурсов, healthcheck-проверки и политики перезапуска в Docker Compose. Практичная стартовая точка для VPS с 8 ГБ:

    deploy:
      resources:
        limits:
          memory: 2G

Установи это для immich-server и immich-machine-learning. PostgreSQL и Redis редко нуждаются в явных лимитах на VPS с 8 ГБ, но выигрывают от них на инстансе с 4 ГБ.

Скрыть информацию о версии

Immich по умолчанию показывает свою версию в ответах API. Это не прямая уязвимость, но раскрытие версии помогает атакующим целенаправленно эксплуатировать известные проблемы. Встроенного переключателя для скрытия нет, но reverse proxy может убирать заголовки ответа. В Nginx:

proxy_hide_header X-Powered-By;

Как подключить мобильное приложение Immich для автоматического бэкапа?

Установи приложение Immich из App Store (iOS) или Google Play (Android). При первом запуске введи URL сервера (https://photos.example.com) и войди с учётными данными админа. Приложение предложит включить автоматический бэкап.

Настроить автоматический бэкап

  1. Открой приложение, нажми на свой аватар в правом верхнем углу, затем Backup Settings.
  2. Включи Background Backup. На iOS также включи Background App Refresh в системных настройках. На Android отключи оптимизацию батареи для Immich, чтобы система не убивала приложение.
  3. Выбери, какие альбомы бэкапить. По умолчанию Immich бэкапит фотоплёнку. Можно добавить другие альбомы (скриншоты, изображения WhatsApp) на экране выбора альбомов.
  4. Включи Cellular Backup только если тариф мобильной связи позволяет. Большие видеозагрузки могут потребить несколько ГБ.

Первый тест бэкапа

Сделай фото, открой приложение Immich и потяни вниз для обновления. Фотография должна появиться в ленте за несколько секунд при подключении к Wi-Fi. Индикатор статуса бэкапа в приложении показывает зелёную галочку, когда все фото синхронизированы.

С VPS можно убедиться, что загрузки приходят:

ls /opt/immich/data/upload/

Ты увидишь директорию с именем, соответствующим твоему ID пользователя, содержащую загруженные файлы.

Сколько хранилища нужно Immich на одну фотографию?

Планирование хранилища на VPS важнее, чем на NAS, потому что ты не можешь просто вставить ещё один диск. Вот реальные цифры на основе типичных фотобиблиотек смартфонов.

Хранилище по типу фотографии

Формат Средний размер Примечания
Смартфон JPEG 3-5 МБ Самый распространённый формат
HEIC (iPhone) 2-3 МБ Формат Apple по умолчанию с iPhone 7
RAW (зеркалка) 25-50 МБ Профессиональные камеры
Видео смартфон (1080p) ~150 МБ/мин Зависит от кодека
Видео смартфон (4K) ~400 МБ/мин H.265 экономит ~40%

Общее хранилище по размеру библиотеки

Таблица рассчитана для JPEG смартфона в среднем 4 МБ плюс накладные расходы Immich (миниатюры, перекодировка, база данных).

Размер библиотеки Сырые фото Миниатюры (~15%) БД Итого
10 000 фото 40 ГБ 6 ГБ 1 ГБ ~47 ГБ
25 000 фото 100 ГБ 15 ГБ 1,5 ГБ ~117 ГБ
50 000 фото 200 ГБ 30 ГБ 2 ГБ ~232 ГБ
100 000 фото 400 ГБ 60 ГБ 3 ГБ ~463 ГБ
200 000 фото 800 ГБ 120 ГБ 4 ГБ ~924 ГБ

Если в библиотеке есть видео, умножай потребность в хранилище соответственно. Библиотека с 10% видеоконтента (по количеству файлов) может удвоить потребность в хранилище, потому что видео в 30-100 раз тяжелее фото.

Когда добавлять больше хранилища

На Virtua VPS можно подключить дополнительные блочные тома, когда основной диск заполняется. Примонтируй том и направь UPLOAD_LOCATION на него. Для библиотек свыше 500 ГБ стоит рассмотреть S3-совместимое внешнее хранилище. Immich поддерживает это через конфигурацию хранилища, выгружая медиа в объектное хранилище при сохранении базы данных и миниатюр локально.

Следи за использованием диска простой проверкой в cron:

df -h /opt/immich/data

Настрой оповещение при использовании свыше 80%. Полный диск повреждает базу PostgreSQL и может сделать инстанс Immich невосстановимым без бэкапа.

Функция «Free Up Space» в v2.5

Immich v2.5+ включает кнопку «Free Up Space» в мобильном приложении. После того как фото сохранены на сервер, приложение может удалить локальные копии с телефона для освобождения места. Удаляются только файлы, загрузка которых подтверждена и которые отсутствуют в корзине Immich. Работает на iOS и Android.

Как работает машинное обучение Immich без GPU?

ML-функции Immich (распознавание лиц, умный поиск через CLIP и обнаружение объектов) по умолчанию работают на CPU. GPU не нужен. Контейнер immich-machine-learning загружает модели в RAM и обрабатывает фото в фоне, не блокируя загрузку и просмотр.

На VPS с 4 ядрами и 8 ГБ RAM ожидай примерно такое время обработки при первичном сканировании:

Размер библиотеки Распознавание лиц Индексация CLIP Итого (последовательно)
1 000 фото ~15 мин ~20 мин ~35 мин
10 000 фото ~2,5 часа ~3,5 часа ~6 часов
50 000 фото ~12 часов ~17 часов ~29 часов

Это разовые затраты. После первичного сканирования новые загрузки обрабатываются за секунды. ML-контейнер работает с низким приоритетом и не блокирует загрузку или просмотр фото во время обработки очереди.

Выбор моделей

Immich использует две основные ML-модели:

  • Распознавание лиц: определяет и группирует лица в библиотеке. Запускается автоматически при каждой загрузке.
  • CLIP (умный поиск): индексирует фото по содержимому, позволяя искать «закат» или «собака на пляже» без тегов. Потребляет больше RAM, чем распознавание лиц.

Обе модели загружаются в RAM при первом обращении и выгружаются после 5 минут бездействия (MACHINE_LEARNING_MODEL_TTL=300 по умолчанию). На VPS с ограниченной памятью можно уменьшить это значение для более быстрого освобождения RAM:

# In .env
MACHINE_LEARNING_MODEL_TTL=60

Пересоздай контейнер после изменения переменных окружения (простого перезапуска недостаточно):

docker compose up -d --force-recreate immich-machine-learning

Распределение RAM по компонентам

Компонент Использование RAM (VPS 8 ГБ) Использование RAM (VPS 4 ГБ)
immich-server ~500 МБ ~500 МБ
immich-machine-learning ~1,5-2 ГБ отключён
PostgreSQL ~500 МБ-1 ГБ ~500 МБ
Redis (Valkey) ~50 МБ ~50 МБ
ОС + накладные расходы Docker ~1 ГБ ~1 ГБ
Доступный запас ~3-4 ГБ ~2 ГБ

Как отключить ML для экономии ресурсов на небольшом VPS?

Если у тебя VPS с 4 ГБ или ты хочешь сэкономить ресурсы, удали или закомментируй сервис immich-machine-learning в docker-compose.yml:

cd /opt/immich

Отредактируй docker-compose.yml и закомментируй (или удали) весь блок сервиса immich-machine-learning. Затем перезапусти:

docker compose up -d

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

Как бэкапить базу данных и фотографии Immich?

Бэкапь две вещи: базу PostgreSQL через pg_dump и директорию загрузок через rsync. Запланируй оба в cron. Не используй rsync --delete на целевом бэкапе, потому что повреждение на источнике распространится на твой бэкап. Храни хотя бы одну копию вне сервера. Периодически тестируй процедуру восстановления.

Бэкап базы данных

docker exec -t immich_postgres pg_dump \
  --clean --if-exists \
  --dbname=immich \
  --username=postgres | gzip > /opt/immich/backups/db-$(date +%Y%m%d-%H%M%S).sql.gz

Бэкап директории загрузок

rsync -a --info=progress2 \
  /opt/immich/data/ \
  /mnt/backup/immich-data/

Пропусти миниатюры и перекодированное видео для экономии места. Они генерируются автоматически:

rsync -a --info=progress2 \
  --exclude='thumbs/' \
  --exclude='encoded-video/' \
  /opt/immich/data/ \
  /mnt/backup/immich-data/

Автоматизация через cron

Создай скрипт бэкапа:

cat > /opt/immich/backup.sh << 'SCRIPT'
#!/bin/bash
set -euo pipefail

BACKUP_DIR="/mnt/backup/immich"
mkdir -p "$BACKUP_DIR/db"

# Database dump
docker exec -t immich_postgres pg_dump \
  --clean --if-exists \
  --dbname=immich \
  --username=postgres | gzip > "$BACKUP_DIR/db/immich-db-$(date +%Y%m%d).sql.gz"

# Keep last 14 database dumps
find "$BACKUP_DIR/db" -name "immich-db-*.sql.gz" -mtime +14 -delete

# Media sync (excludes regeneratable data)
rsync -a \
  --exclude='thumbs/' \
  --exclude='encoded-video/' \
  /opt/immich/data/ \
  "$BACKUP_DIR/media/"

echo "Backup completed: $(date)"
SCRIPT

chmod 700 /opt/immich/backup.sh

Запланируй запуск каждую ночь в 3:00 (после собственного внутреннего бэкапа Immich в 2:00):

(crontab -l 2>/dev/null; echo "0 3 * * * /opt/immich/backup.sh >> /var/log/immich-backup.log 2>&1") | crontab -

Бэкап вне сервера

Для настоящей стратегии бэкапа 3-2-1 копируй бэкапы с сервера при помощи rclone на любой S3-совместимый провайдер хранилища:

rclone sync /mnt/backup/immich remote:immich-backup --transfers 4

Смотри документацию провайдера хранилища для настройки rclone.

Проверка восстановления

Бэкап, который ты не тестировал, — не бэкап. Вот процедура восстановления:

cd /opt/immich
docker compose down -v
rm -rf /opt/immich/postgres/*

docker compose pull
docker compose create
docker start immich_postgres
sleep 10

gunzip --stdout /mnt/backup/immich/db/immich-db-20260320.sql.gz | \
  sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | \
  docker exec -i immich_postgres psql \
    --dbname=immich \
    --username=postgres \
    --single-transaction \
    --set ON_ERROR_STOP=on

docker compose up -d

После восстановления войди в веб-интерфейс. Пролистай ленту и убедись, что фотографии загружаются. Если миниатюры отсутствуют (потому что ты исключил их из бэкапа), перейди в Administration > Job Queues и запусти Generate Thumbnails.

Как безопасно обновить Immich?

Immich придерживается семантического версионирования и выпускает релизы часто. Некоторые релизы включают миграции базы данных. Откат после обновления не поддерживается. Поэтому нужен дисциплинированный процесс обновления.

Пошаговая процедура обновления

  1. Прочитай changelog. Проверь страницу релизов на breaking changes перед тем, как что-либо пуллить.

  2. Сделай бэкап базы данных. Запусти скрипт бэкапа или ручной pg_dump как показано выше. Не пропускай этот шаг.

  3. Обнови пин версии. Отредактируй /opt/immich/.env и измени IMMICH_VERSION на новую версию:

# Example: updating from v2.6.1 to v2.7.0
sed -i 's/IMMICH_VERSION=v2.6.1/IMMICH_VERSION=v2.7.0/' /opt/immich/.env
  1. Pull и перезапуск.
cd /opt/immich
docker compose pull
docker compose up -d
  1. Проверь логи.
docker compose logs -f --tail=100

Ищи сообщения о миграции и убедись, что сервер стартует без ошибок. Миграции базы данных запускаются автоматически при старте.

  1. Очисти старые образы.
docker image prune -f

Откат

Если что-то сломалось, нельзя просто откатить версию, потому что база данных могла мигрировать вперёд. Вместо этого восстанавливай из бэкапа базы до обновления:

  1. Останови стек: docker compose down -v
  2. Восстанови базу из бэкапа (смотри раздел восстановления выше)
  3. Верни IMMICH_VERSION к предыдущей версии в .env
  4. Запусти стек: docker compose up -d

Вот почему перед каждым обновлением делается бэкап.

Как импортировать фото из Google Takeout в Immich?

Самый простой способ импортировать экспорт Google Photos — immich-go, инструмент от сообщества, который напрямую читает ZIP-файлы Google Takeout. Он сохраняет структуру альбомов, даты и GPS-метаданные из JSON-файлов сайдкаров.

Скачай immich-go на локальную машину (не на VPS). Сгенерируй API-ключ в Immich: нажми на свой аватар > Account Settings > API Keys > New API Key.

immich-go upload from-google-photos \
  --server=https://photos.example.com \
  --api-key=your-api-key \
  /path/to/takeout-*.zip

Сначала запусти dry run, чтобы увидеть, что будет импортировано:

immich-go upload from-google-photos \
  --server=https://photos.example.com \
  --api-key=your-api-key \
  --dry-run \
  /path/to/takeout-*.zip

Инструмент дедуплицирует по контрольной сумме. Если запустить импорт дважды, ничего не загрузится повторно.

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

Монтирование внешней библиотеки

Если фотографии уже лежат на файловой системе VPS (из предыдущего бэкапа или миграции), можно примонтировать их как внешнюю библиотеку вместо повторной загрузки. Добавь путь как том в docker-compose.yml под immich-server:

    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
      - /mnt/photos:/mnt/photos:ro

Затем в веб-интерфейсе Immich перейди в Administration > External Libraries и добавь /mnt/photos как путь библиотеки. Immich индексирует файлы на месте, не копируя их. Флаг :ro делает монтирование только для чтения, чтобы Immich не мог изменить оригиналы.

Устранение неполадок

Контейнер перезапускается в цикле

Проверь логи конкретного контейнера:

docker compose logs immich-server --tail=50
docker compose logs database --tail=50

Частые причины: неправильный DB_PASSWORD в .env (контейнер и база данных не совпадают), недостаточно RAM (OOM killer), или полный диск.

Загрузки молча проваливаются

Почти всегда лимит размера тела запроса reverse proxy. Проверь конфигурацию прокси на client_max_body_size (Nginx) или аналог. Caddy не имеет лимита по умолчанию. Значения по умолчанию у Traefik зависят от версии.

ML-модели не загружаются

ML-контейнер скачивает модели при первом запуске. Если VPS имеет ограниченную пропускную способность или загрузка была прервана, модели могут быть повреждены. Удали контейнер, очисти том кеша моделей и пересоздай:

docker compose rm -sf immich-machine-learning
docker volume rm immich_model-cache
docker compose up -d immich-machine-learning

Фото отображаются, но миниатюры сломаны

Перегенерируй миниатюры из панели администратора: Administration > Job Queues > Generate Thumbnails > Start.

Ошибки подключения к базе после восстановления

Если видишь ошибки relation already exists или foreign key constraint violated во время восстановления, база не была полностью очищена перед импортом. Останови все контейнеры, удали директорию DB_DATA_LOCATION, пересоздай контейнер postgres, подожди 10 секунд для инициализации, затем запусти восстановление заново.

Просмотр логов

Все логи Immich проходят через драйвер логирования Docker:

docker compose logs -f

Для конкретного сервиса:

docker compose logs database -f
docker compose logs immich-machine-learning -f

Отфильтровать только ошибки:

docker compose logs immich-server 2>&1 | grep -i error

Авторское право 2026 Virtua.Cloud. Все права защищены. Данный контент является оригинальным произведением команды Virtua.Cloud. Воспроизведение, повторная публикация или распространение без письменного разрешения запрещены.

Готовы попробовать?

Разверните свой сервер за секунды. Linux, Windows или FreeBSD.

Смотреть тарифы VPS