Перейти к основному содержимому

Скрипт резервного копирования

Borg — это многофункциональная программа для создания архивов с дедупликацией и встроенной возможностью версионности. Мы предоставляем шаблон bash-скрипта, который можно запускать ежедневно/еженедельно в качестве задания cron для резервного копирования ваших файлов и базы данных. Рекомендуем ознакомиться с кратким руководством по Borg перед использованием этого скрипта.

Этот скрипт предполагает наличие второго жёсткого диска, подключенного к вашему серверу, для локального резервного копирования, а также доступ по SSH к удалённой машине для третьей копии вне площадки. BorgBase является альтернативным вариантом для удалённых резервных копий с конкурентной ценовой политикой. Вы можете полностью отказаться от удалённого резервного копирования, удалив соответствующие строки из шаблонного скрипта.

База данных сохраняется в вашу папку для загрузок Immich в подкаталоге database-backup. Затем база данных архивируется и версионируется вместе с вашими активами с помощью Borg. Это гарантирует синхронизацию резервной копии базы данных с вашими активами в каждом снимке.

информация

Этот скрипт создаёт резервные копии вашей базы данных вместе с вашей фото/видео библиотекой. Это дублируется с автоматическим инструментом резервного копирования базы данных, встроенным в Immich. Этот скрипт имеет два преимущества перед встроенным инструментом резервного копирования:

  • Этот скрипт использует хранилище более эффективно за счёт версионности резервных копий, а не создания нескольких копий.
  • Резервное копирование базы данных выполняется одновременно с резервным копированием библиотеки, гарантируя синхронизацию резервных копий базы данных и библиотеки.

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

Необходимые условия

  • Borg должен быть установлен на вашем сервере, а также на удалённой машине. Инструкции по установке Borg можно найти здесь.
  • (Необязательно) Чтобы запускать этот скрипт от имени пользователя, отличного от root, вам следует добавить своё имя пользователя в группу docker.
  • Для того чтобы запускать этот скрипт без взаимодействия с пользователем, настройте подключение по SSH без пароля к вашей удалённой машине с вашего сервера. Если вы пропустили предыдущий шаг, убедитесь, что это выполнено из аккаунта root.

Чтобы инициализировать репозиторий Borg, выполните следующие команды один раз.

Настройка Borg
UPLOAD_LOCATION="/путь/к/каталогу/immich"       # Локация базы данных Immich, как указано в вашем .env файле
BACKUP_PATH="/путь/к/директории/локального/резервного/копирования"

mkdir "$UPLOAD_LOCATION/database-backup"
borg init --encryption=none "$BACKUP_PATH/immich-borg"

## Настройка удалённого хранилища
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/путь/к/директории/удалённого/резервного/копирования"

borg init --encryption=none "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg"

Отредактируйте следующий скрипт при необходимости и добавьте его в ваш crontab. Учтите, что этот скрипт предполагает отсутствие символов :, @ или " в ваших путях. Если такие символы есть, вам нужно будет экранировать их и/или переименовать пути.

Шаблон резервного копирования Borg
#!/bin/sh

# Пути
UPLOAD_LOCATION="/путь/к/каталогу/immich"
BACKUP_PATH="/путь/к/директории/локального/резервного/копирования"
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/путь/к/директории/удалённого/резервного/копирования"


### Локально

# Резервное копирование базы данных Immich
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# Для программ резервного копирования с дедупликацией, таких как Borg или Restic, сжатие контента может увеличить размер резервной копии, усложнив дедупликацию. Если вы используете другую программу или всё же предпочитаете сжимать, используйте следующую команду:
# docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz

### Добавление в локальный репозиторий Borg
borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$BACKUP_PATH"/immich-borg
borg compact "$BACKUP_PATH"/immich-borg


### Добавление в удалённый репозиторий Borg
borg create "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg
borg compact "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg

Восстановление

Чтобы восстановить данные из резервной копии, используйте команду borg mount.

Восстановление из локальной резервной копии
BACKUP_PATH="/путь/к/директории/локального/резервного/копирования"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
Восстановление из удалённой резервной копии
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/путь/к/директории/удалённого/резервного/копирования"
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint

Вы можете найти доступные снимки в отдельных подкаталогах по адресу /tmp/immich-mountpoint. Восстановите нужные файлы и размонтируйте репозиторий Borg с помощью команды borg umount /tmp/immich-mountpoint.