Самостоятельный хостинг Immich на VPS с Docker Compose
Разверните 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) и войди с учётными данными админа. Приложение предложит включить автоматический бэкап.
Настроить автоматический бэкап
- Открой приложение, нажми на свой аватар в правом верхнем углу, затем Backup Settings.
- Включи Background Backup. На iOS также включи Background App Refresh в системных настройках. На Android отключи оптимизацию батареи для Immich, чтобы система не убивала приложение.
- Выбери, какие альбомы бэкапить. По умолчанию Immich бэкапит фотоплёнку. Можно добавить другие альбомы (скриншоты, изображения WhatsApp) на экране выбора альбомов.
- Включи 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 придерживается семантического версионирования и выпускает релизы часто. Некоторые релизы включают миграции базы данных. Откат после обновления не поддерживается. Поэтому нужен дисциплинированный процесс обновления.
Пошаговая процедура обновления
-
Прочитай changelog. Проверь страницу релизов на breaking changes перед тем, как что-либо пуллить.
-
Сделай бэкап базы данных. Запусти скрипт бэкапа или ручной
pg_dumpкак показано выше. Не пропускай этот шаг. -
Обнови пин версии. Отредактируй
/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
- Pull и перезапуск.
cd /opt/immich
docker compose pull
docker compose up -d
- Проверь логи.
docker compose logs -f --tail=100
Ищи сообщения о миграции и убедись, что сервер стартует без ошибок. Миграции базы данных запускаются автоматически при старте.
- Очисти старые образы.
docker image prune -f
Откат
Если что-то сломалось, нельзя просто откатить версию, потому что база данных могла мигрировать вперёд. Вместо этого восстанавливай из бэкапа базы до обновления:
- Останови стек:
docker compose down -v - Восстанови базу из бэкапа (смотри раздел восстановления выше)
- Верни
IMMICH_VERSIONк предыдущей версии в.env - Запусти стек:
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