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.
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.
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.
#!/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
.
BACKUP_PATH="/path/to/local/backup/directory"
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="/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