Скрипт резервного копирования
Borg — это многофункциональная программа для создания архивов с дедупликацией и встроенной возможностью версионности. Мы предоставляем шаблон bash-скрипта, который можно запускать ежедневно/еженедельно в качестве задания cron для резервного копирования ваших файлов и базы данных. Рекомендуем ознакомиться с кратким руководством по Borg перед использованием этого скрипта.
Этот скрипт предполагает наличие второго жёсткого диска, подключенного к вашему серверу, для локального резервного копирования, а также доступ по SSH к удалённой машине для третьей копии вне площадки. BorgBase является альтернативным вариантом для удалённых резервных копий с конкурентной ценовой политикой. Вы можете полностью отказаться от удалённого резервного копирования, удалив соответствующие строки из шаблонного скрипта.
База данных сохраняется в вашу папку для загрузок Immich в подкаталоге database-backup
. Затем база данных архивируется и версионируется вместе с вашими активами с помощью Borg. Это гарантирует синхронизацию резервной копии базы данных с вашими активами в каждом снимке.
Этот скрипт создаёт резервные копии вашей базы данных вместе с вашей фото/видео библиотекой. Это дублируется с автоматическим инструментом резервного копирования базы данных, встроенным в Immich. Этот скрипт имеет два преимущества перед встроенным инструментом резервного копирования:
- Этот скрипт использует хранилище более эффективно за счёт версионности резервных копий, а не создания нескольких копий.
- Резервное копирование базы данных выполняется одновременно с резервным копированием библиотеки, гарантируя синхронизацию резервных копий базы данных и библиотеки.
Если вы используете этот скрипт, то безопасно отключить встроенное автоматическое резервное копирование базы данных в вашей админ-панели, чтобы сэкономить место на хранилище.
Необходимые условия
- Borg должен быть установлен на вашем сервере, а также на удалённой машине. Инструкции по установке Borg можно найти здесь.
- (Необязательно) Чтобы запускать этот скрипт от имени пользователя, отличного от root, вам следует добавить своё имя пользователя в группу docker.
- Для того чтобы запускать этот скрипт без взаимодействия с пользователем, настройте подключение по SSH без пароля к вашей удалённой машине с вашего сервера. Если вы пропустили предыдущий шаг, убедитесь, что это выполнено из аккаунта root.
Чтобы инициализировать репозиторий 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. Учтите, что этот скрипт предполагает отсутствие символов :
, @
или "
в ваших путях. Если такие символы есть, вам нужно будет экранировать их и/или переименовать пути.
#!/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
.