Ir para o conteúdo principal

Script de Backup

Borg é um software de arquivamento com deduplicação e versionamento integrado, rico em recursos. Oferecemos um script bash modelo que pode ser executado diariamente/semanalmente como um trabalho de cron para fazer backup de seus arquivos e banco de dados. Recomendamos que você leia o guia de início rápido para Borg antes de executar este script.

Este script pressupõe que você possui um segundo disco rígido conectado ao seu servidor para backup local e acesso SSH a uma máquina remota para sua terceira cópia off-site. BorgBase é uma alternativa para backups fora do local com uma estrutura de preços competitiva. Você pode optar por pular os backups fora do local removendo as linhas relevantes do script modelo.

O banco de dados é salvo na pasta de upload do Immich no subdiretório database-backup. O banco de dados é então arquivado e versionado junto com seus ativos pelo Borg. Isso garante que o backup do banco de dados esteja sincronizado com seus ativos em cada instantâneo.

informação

Este script realiza backups do seu banco de dados juntamente com sua biblioteca de fotos/vídeos. Isso é redundante com a ferramenta automática de backup do banco de dados integrada no Immich. Usar este script para fazer backup do banco de dados possui duas vantagens sobre a ferramenta de backup integrada:

  • Este script usa o armazenamento de forma mais eficiente ao versionar seus backups, em vez de fazer várias cópias.
  • Os backups do banco de dados são realizados ao mesmo tempo que o backup da biblioteca, garantindo que os backups do banco de dados e da biblioteca estejam sempre sincronizados.

Se você estiver usando este script, é seguro desativar os backups automáticos do banco de dados integrados no painel de administração para economizar espaço de armazenamento.

Pré-requisitos

  • Borg precisa estar instalado no seu servidor e na máquina remota. Você pode encontrar instruções para instalar Borg aqui.
  • (Opcional) Para executar este script como um usuário que não seja root, você deve adicionar seu nome de usuário ao grupo docker.
  • Para executar este script de forma não interativa, configure ssh sem senha para sua máquina remota a partir do seu servidor. Se você pulou a etapa anterior, certifique-se de que essa etapa seja feita a partir da conta root.

Para inicializar o repositório do Borg, execute os seguintes comandos uma vez.

Configuração do Borg
UPLOAD_LOCATION="/path/to/immich/directory"       # Local do banco de dados Immich, conforme configurado no arquivo .env
BACKUP_PATH="/path/to/local/backup/directory"

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

## Configuração remota
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"

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

Edite o seguinte script conforme necessário e adicione-o ao seu crontab. Note que este script pressupõe que não existam caracteres :, @ ou " em seus caminhos. Se esses caracteres existirem, você precisará escapá-los e/ou renomear os caminhos.

Template de Backup do Borg
#!/bin/sh

# Caminhos
UPLOAD_LOCATION="/path/to/immich/directory"
BACKUP_PATH="/path/to/local/backup/directory"
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"


### Local

# Backup do banco de dados do Immich
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# Para programas de backup com deduplicação como Borg ou Restic, comprimir o conteúdo pode aumentar o tamanho do backup ao dificultar a deduplicação. Se estiver usando um programa diferente ou preferir compactar, você pode usar o seguinte comando:
# 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

### Adicionar ao repositório local do 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


### Adicionar ao repositório remoto do 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

Restauração

Para restaurar a partir de um backup, use o comando borg mount.

Restaurar do backup local
BACKUP_PATH="/path/to/local/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
Restaurar do backup remoto
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint

Você pode encontrar os instantâneos disponíveis em subdiretórios separados em /tmp/immich-mountpoint. Restaure os arquivos de que precisar e desmonte o repositório do Borg usando borg umount /tmp/immich-mountpoint