Резервное копирование и восстановление
Рекомендуется стратегия резервного копирования 3-2-1 для защиты данных. Вы должны сохранить копии загруженных фотографий/видео, а также базу данных Immich для обеспечения полной резервной копии. На этой странице представлено руководство по резервному копированию базы данных и местоположению пользовательских загруженных фотографий и видео. Шаблон скрипта bash можно использовать в качестве cron-задачи, он предоставлен здесь
Инструкции на этой странице показывают, как подготовить ваш экземпляр Immich для резервного копирования, и какие файлы нужно сохранять. Вам все равно необходимо использовать фактический инструмент резервного копирования, чтобы сделать копию данных вручную.
База данных
Immich сохраняет пути к файлам в базе данных, она не сканирует папку библиотеки для обновления базы данных, поэтому резервные копии имеют решающее значение.
Обратитесь к официальной документации postgres для получения информации о резервном копировании и восстановлении базы данных Postgres.
Не рекомендуется напрямую создавать резервную копию папки DB_DATA_LOCATION
. Если сделать это, пока база данных работает, это может привести к поврежденной резервной копии, которую нельзя восстановить.
Автоматические дампы базы данных
Автоматические дампы базы данных можно использовать для восстановления базы данных в случае повреждения файлов базы данных Postgres. Нет мониторинга этих дампов, и вы не получите уведомление, если они окажутся неуспешными.
Дампы базы данных НЕ содержат никаких фотографий или видео, только метаданные. Они могут использоваться только с копией других файлов в UPLOAD_LOCATION
, как указано ниже.
Для целей аварийного восстановления Immich автоматически создает дампы базы данных. Дампы сохраняются в UPLOAD_LOCATION/backups
.
Обязательно создавайте свою собственную независимую резервную копию базы данных вместе с папками ассетов, как указано ниже.
Вы можете настроить расписание и количество сохраняемых дампов базы данных в настройках администратора.
По умолчанию Immich сохраняет последние 14 дампов базы данных и создает новый дамп каждый день в 2:00 утра.
Запуск дампа
Вы можете инициировать дамп базы данных на странице статуса задач администратора.
Откройте страницу, выберите модальное окно "Создать задачу" в правом верхнем углу, выберите "Создать дамп базы данных" и нажмите "Подтвердить".
Запустится задача и инициирует дамп, вы можете убедиться, что процесс прошел успешно, проверив журналы или папку backups/
.
Эти дампы учитываются в количестве последних X
дампов, которые будут сохраняться на основе ваших настроек.
Восстановле ние
Мы надеемся упростить восстановление в будущих версиях, пока что вы можете найти дампы базы данных в папке UPLOAD_LOCATION/backups
на вашем хосте.
На данный момент выполните шаги, перечисленные в следующем разделе, для восстановления базы данных.
Ручное резервное копирование и восстановление
- Linux system
- Windows system (PowerShell)
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
docker compose down -v # ВНИМАНИЕ! Удаляет все данные Immich для новой установки
## Раскомментируйте следующую строку и замените DB_DATA_LOCATION на ваш путь Postgres для полного сброса базы данных
# rm -rf DB_DATA_LOCATION # ВНИМАНИЕ! Удаляет все данные Immich для новой установки
docker compose pull # Обновление до последней версии Immich (при необходимости)
docker compose create # Создание Docker-контейнеров для приложений Immich без их запуска
docker start immich_postgres # Запуск сервера Postgres
sleep 10 # Ожидание запуска сервера Postgres
# Проверьте пользователя базы данных, если вы отклонились от значения по умолчанию
gunzip --stdout "/path/to/backup/dump.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=postgres --username=<DB_USERNAME> # Восстановление резервной копии
docker compose up -d # Запуск остальных приложений Immich
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>))
docker compose down -v # ВНИМАНИЕ! Удаляет все данные Immich для новой установки
## Раскомментируйте следующую строку и замените DB_DATA_LOCATION на ваш путь Postgres для полного сброса базы данных
# Remove-Item -Recurse -Force DB_DATA_LOCATION # ВНИМАНИЕ! Удаляет все данные Immich для новой установки
## Вы должны подключить резервную копию (например, в виде тома: `- 'C:\path\to\backup\dump.sql:/dump.sql'`) к контейнеру immich_postgres через docker-compose.yml
docker compose pull # Обновление до последней версии Immich (при необходимости)
docker compose create # Создание Docker-контейнеров для приложений Immich без их запуска
docker start immich_postgres # Запуск сервера Postgres
sleep 10 # Ожидание запуска сервера Postgres
docker exec -it immich_postgres bash # Вход в оболочку Docker и выполнение следующей команды
# Проверьте пользователя базы данных, если вы отклонились от значения по умолчанию. Если ваша резервная копия заканчивается на `.gz`, замените `cat` на `gunzip --stdout`
cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
exit # Выход из оболочки Docker
docker compose up -d # Запуск остальных приложений Immich
Обратите внимание, чтобы восстановление базы данных прошло правильно, требуется полностью свежая установка (т. е. сервер Immich никогда не запускался с момента создания контейнеров Docker). Если приложение Immich работало, могут возникнуть конфликты Postgres в процессе восстановления базы данных (отношение уже существует, нарушение внешних ключевых ограничений, несколько первичных ключей и т. д.), в таком случае необходимо удалить папку DB_DATA_LOCATION
для сброса базы данных.
Некоторые методы деплоя затрудняют запуск базы данных без запуска сервера. В таких случаях вы можете установить переменную окружения DB_SKIP_MIGRATIONS=true
перед запуском сервисов. Это предотвратит запуск миграций сервера, которые мешают процессу восстановления. Убедитесь, что вы удалили эту переменную и перезапустили сервисы после восстановления базы данных.
Файловая система
Immich сохраняет два типа контента в файловой системе: (а) оригинальные, неизмененные активы (фото и видео), и (б) созданный к онтент. Мы рекомендуем создавать резервные копии всего содержания UPLOAD_LOCATION
, но только оригинальный контент является критически важным, который сохраняется в следующих папках:
UPLOAD_LOCATION/library
UPLOAD_LOCATION/upload
UPLOAD_LOCATION/profile
Если вы решите создать резервную копию только этих папок, вам придется заново запускать задачи перекодирования и генерации миниатюр для всех активов после восстановления из резервной копии.
Если вы переместили некоторые из этих папок на другое устройство хранения, например profile/
, обязательно корректируйте путь резервной копии в соответствии с вашей настройкой
Типы активов и местоположение хранения
Некоторые местоположения хранения зависят от Шаблона хранилища. См. ниже дополнительные детали.
- Шаблон хранилища выключен (По умолчанию).
- Шаблон хранилища включен
Папка UPLOAD_LOCATION/library
по умолчанию не используется на новых машинах с версией 1.92.0. Она используется только если системный администратор активировал движок шаблона хранения,
п одробнее в заметках к релизу.
1. Пользовательские папки:
- У каждого пользователя есть уникальная строка, которая его представляет.
- Вы можете найти свой идентификатор пользователя в Настройках аккаунта -> Аккаунт -> Идентификатор пользователя.
2. Типы активов и местоположение хранения:
-
Исходные активы:
- Оригинальные активы, загруженные через интерфейс браузера, мобильные устройства и CLI.
- Сохраняются в
UPLOAD_LOCATION/upload/<userID>
.
-
Изображения аватара:
- Изображения профиля пользователя.
- Сохраняются в
UPLOAD_LOCATION/profile/<userID>
.
-
Миниатюры изображений:
- Превью изображения (малые миниатюры и крупные предварительные обзоры) для каждого актива и миниатюры для распознанных лиц.
- Сохраняются в
UPLOAD_LOCATION/thumbs/<userID>
.
-
Перекодированные активы:
- Видео, которые были перекодированы из оригинала для широкой совместимости. Оригинал не удаляется.
- Сохраняются в
UPLOAD_LOCATION/encoded-video/<userID>
.
-
Postgres
- База данных Immich, содержащая всю информацию для правильного функционирования системы.
Примечание: Эта папка будет видна только пользователям, которые внесли изменения, упомянутые в v1.102.0 (определенные, необязательные изменения), или начали использовать эту версию. - Сохраняется в
DB_DATA_LOCATION
.
опасностьРезервная копия этой папки не является резервной копией вашей базы данных! Следуйте инструкциям, указанным здесь, чтобы узнать, как выполнить правильное резервное копирование.
- База данных Immich, содержащая всю информацию для правильного функционирования системы.
Если вы решили активировать движок шаблона хранения, он переместит все активы в UPLOAD_LOCATION/library/<userID>
.
Когда вы отключаете движок шаблона хранения, он оставляет активы в UPLOAD_LOCATION/library/<userID>
и не возвращает их в UPLOAD_LOCATION/upload
.
Новые активы будут сохраняться в UPLOAD_LOCATION/upload
.
1. Пользовательские папки:
- У каждого пользователя есть уникальная строка, которая его представляет.
- Администратор может установить Метку Хранилища для пользователя, которая будет использоваться вместо
<userID>
для папкиlibrary/
. - У администратора по умолчанию метка хранилища —
admin
.
- Администратор может установить Метку Хранилища для пользователя, которая будет использоваться вместо
- Вы можете найти свой иденти фикатор пользователя и Метку Хранилища в настройках учетной записи: Аккаунт -> User ID.
2. Типы ресурсов и места хранения:
-
Исходные ресурсы:
- Оригинальные ресурсы, загруженные через браузер, мобильное приложение и CLI.
- Хранятся в
UPLOAD_LOCATION/library/<userID>
.
-
Аватары:
- Изображения профилей пользователей.
- Хранятся в
UPLOAD_LOCATION/profile/<userID>
.
-
Миниатюры:
- Предпросмотровые изображения (размытие, маленькие, большие) для каждого ресурса и миниатюры для распознанных лиц.
- Хранятся в
UPLOAD_LOCATION/thumbs/<userID>
.
-
Кодированные ресурсы:
- Видео, перекодированные из оригинальных для более широкой совместимости. Оригиналы не удаляются.
- Хранятся в
UPLOAD_LOCATION/encoded-video/<userID>
.
-
Файлы в очереди загрузки (мобильные):
- Файлы, загруженные через мобильные приложения.
- Временно хранятся в
UPLOAD_LOCATION/upload/<userID>
. - Перемещаются в
UPLOAD_LOCATION/library/<userID>
после успешной загрузки.
-
Postgres
- База данных Immich, содерж ащая всю необходимую информацию для правильного функционирования системы. Примечание: Эта папка появится только у пользователей, которые внесли изменения, упомянутые в v1.102.0 (опциональные, необязательные изменения), или начали использовать с этой версии.
- Хранится в
DB_DATA_LOCATION
.
опасностьРезервная копия этой папки не является резервной копией вашей базы данных! Следуйте инструкциям, приведенным здесь, чтобы узнать, как правильно создать резервную копию.
Не прикасайтесь к файлам в этих папках ни при каких обстоятельствах, кроме создания резервной копии. Изменение или удаление ресурса может привести к отсутствующим или неотслеживаемым файлам. Вы можете считать это чем-то вроде обязательного интерфейса: доступ к просмотру, изменению и удалению ресурсов возможен только через мобильное приложение или браузер.
Порядок создания резервных копий
Резервная копия Immich должна включать как базу данных, так и файлы ресурсов. При создании резервной копии возможно их рассогласование, что может привести к поврежденным ресурсам после восстановления. Лучший способ справиться с этим — остановить контейнер immich-server во в ремя создания резервной копии. Если ничего не изменяется, то резервная копия всегда будет синхронизированной.
Если остановка контейнера невозможна, то рекомендуется сначала создать резервную копию базы данных, а затем файловой системы. В этом случае в худшем случае в файловой системе окажутся файлы, о которых база данных не знает. Если необходимо, эти файлы можно загрузить вручную после восстановления. Если резервная копия создается наоборот (сначала файловая система, затем база данных), то возможно, что восстановленная база данных будет ссылаться на файлы, которых нет в резервной копии файловой системы, что приведет к поврежденным ресурсам.