Saltar al contenido principal

Script de Respaldo

Borg es un software de archivo con deduplicación, rico en características y con versión integrada. Proporcionamos un script bash de plantilla que puede ejecutarse diariamente/semanalmente como un trabajo de cron para respaldar tus archivos y base de datos. Te recomendamos leer la guía de inicio rápido de Borg antes de ejecutar este script.

Este script asume que tienes un segundo disco duro conectado a tu servidor para el respaldo en sitio y acceso SSH a una máquina remota para tu tercera copia externa. BorgBase es una opción alternativa para respaldos externos con una estructura de precios competitiva. Puedes optar por omitir los respaldos externos eliminando las líneas relevantes del script de plantilla.

La base de datos se guarda en tu carpeta de carga de Immich en el subdirectorio database-backup. La base de datos se respalda y versiona junto con tus recursos mediante Borg. Esto asegura que el respaldo de la base de datos esté sincronizado con tus recursos en cada captura instantánea.

información

Este script realiza respaldos de tu base de datos junto con tu biblioteca de fotos/videos. Esto es redundante con la herramienta automática de respaldo de bases de datos integrada en Immich. Usar este script para respaldar tu base de datos tiene dos ventajas sobre la herramienta de respaldo integrada:

  • Este script utiliza el almacenamiento de manera más eficiente al versionar tus respaldos en lugar de hacer múltiples copias.
  • Los respaldos de la base de datos se realizan al mismo tiempo que el respaldo de la biblioteca, asegurando que los respaldos de tu base de datos y biblioteca estén siempre sincronizados.

Si usas este script, es seguro desactivar los respaldos automáticos integrados de la base de datos desde tu panel de administración para ahorrar espacio de almacenamiento.

Prerrequisitos

  • Borg necesita estar instalado en tu servidor así como en la máquina remota. Puedes encontrar instrucciones para instalar Borg aquí.
  • (Opcional) Para ejecutar este script como un usuario que no sea root, deberías añadir tu nombre de usuario al grupo docker.
  • Para ejecutar este script de forma no interactiva, configura SSH sin contraseña hacia tu máquina remota desde tu servidor. Si omitiste el paso anterior, asegúrate de que este paso se realice desde tu cuenta root.

Para inicializar el repositorio Borg, ejecuta los siguientes comandos una vez.

Configuración de Borg
UPLOAD_LOCATION="/ruta/a/directorio/immich"       # Ubicación de la base de datos de Immich, tal como se establece en tu archivo .env
BACKUP_PATH="/ruta/a/directorio/de/respaldo/local"

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

## Configuración remota
REMOTE_HOST="usuario_remoto@IP"
REMOTE_BACKUP_PATH="/ruta/a/directorio/de/respaldo/remoto"

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

Edita el siguiente script según sea necesario y agrégalo a tu crontab. Ten en cuenta que este script asume que no hay caracteres :, @ o " en tus rutas. Si estos caracteres existen, necesitarás escapar y/o renombrar las rutas.

Plantilla de respaldo de Borg
#!/bin/sh

# Rutas
UPLOAD_LOCATION="/ruta/a/directorio/immich"
BACKUP_PATH="/ruta/a/directorio/de/respaldo/local"
REMOTE_HOST="usuario_remoto@IP"
REMOTE_BACKUP_PATH="/ruta/a/directorio/de/respaldo/remoto"


### Local

# Respaldo de la base de datos de Immich
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# Para programas de respaldo con deduplicación como Borg o Restic, comprimir el contenido puede aumentar el tamaño del respaldo al dificultar la deduplicación. Si usas un programa diferente o aún prefieres comprimir, puedes usar el siguiente comando en su lugar:
# 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

### Agregar al repositorio Borg local
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


### Agregar al repositorio Borg remoto
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

Restauración

Para restaurar desde un respaldo, utiliza el comando borg mount.

Restaurar desde respaldo local
BACKUP_PATH="/ruta/a/directorio/de/respaldo/local"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
Restaurar desde respaldo remoto
REMOTE_HOST="usuario_remoto@IP"
REMOTE_BACKUP_PATH="/ruta/a/directorio/de/respaldo/remoto"
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint

Puedes encontrar capturas instantáneas disponibles en subdirectorios separados en /tmp/immich-mountpoint. Restaura los archivos que necesites y desmonta el repositorio Borg usando borg umount /tmp/immich-mountpoint