Immich项目数据备份方案:基于Borg的自动化备份脚本指南

Immich项目数据备份方案:基于Borg的自动化备份脚本指南

immich 自主托管的照片和视频备份解决方案,直接从手机端进行操作。 immich 项目地址: https://gitcode.com/gh_mirrors/im/immich

前言

在个人照片和视频管理领域,Immich作为一个优秀的自托管解决方案,为用户提供了便捷的媒体管理体验。然而,任何数据管理系统的核心问题之一就是如何确保数据安全。本文将详细介绍如何为Immich项目配置基于Borg的自动化备份方案,实现本地和远程双重备份保护。

Borg备份方案概述

BorgBackup是一款功能强大的去重归档软件,具有以下显著优势:

  • 高效的去重存储技术,大幅节省备份空间
  • 内置版本控制功能,可保留多个时间点的备份快照
  • 支持数据压缩和加密
  • 可配置灵活的备份保留策略

针对Immich项目,我们设计的备份方案将同时备份:

  1. PostgreSQL数据库(包含用户信息、元数据等关键数据)
  2. 原始照片/视频文件
  3. 系统配置文件

备份方案优势分析

相比Immich内置的自动数据库备份工具,本方案具有两大核心优势:

  1. 存储效率优化:采用版本化备份而非完整副本,节省存储空间
  2. 数据一致性保障:确保数据库备份与媒体库备份时间点完全同步

准备工作

系统环境要求

  1. 主服务器和远程备份服务器均需安装BorgBackup
  2. 建议将执行用户加入docker组以获得必要权限
  3. 配置SSH免密登录以实现自动化远程备份

初始化Borg仓库

执行以下命令初始化本地和远程Borg仓库:

# 设置路径变量
UPLOAD_LOCATION="/path/to/immich/directory"  # 与.env文件中配置一致
BACKUP_PATH="/path/to/local/backup/directory"

# 创建数据库备份目录
mkdir "$UPLOAD_LOCATION/database-backup"

# 初始化本地Borg仓库(无加密)
borg init --encryption=none "$BACKUP_PATH/immich-borg"

# 初始化远程Borg仓库
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
borg init --encryption=none "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg"

备份脚本详解

以下是完整的备份脚本模板,可根据实际环境修改:

#!/bin/sh

# 路径配置
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"

### 本地备份流程

# 1. 备份PostgreSQL数据库
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres > "$UPLOAD_LOCATION"/database-backup/immich-database.sql

# 2. 创建本地Borg快照
borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" \
    --exclude "$UPLOAD_LOCATION"/thumbs/ \
    --exclude "$UPLOAD_LOCATION"/encoded-video/

# 3. 清理旧备份(保留策略:4周+3月)
borg prune --keep-weekly=4 --keep-monthly=3 "$BACKUP_PATH"/immich-borg

# 4. 压缩仓库空间
borg compact "$BACKUP_PATH"/immich-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

关键参数说明

  1. --exclude参数排除了缩略图和转码视频目录,这些可重新生成的数据无需备份
  2. prune命令配置了灵活的保留策略:
    • 保留最近4个每周备份
    • 保留最近3个每月备份
  3. compact命令用于优化存储空间

自动化部署建议

建议通过cron实现定期自动备份,例如:

# 每日凌晨3点执行备份
0 3 * * * /path/to/backup-script.sh

数据恢复指南

当需要恢复数据时,可按以下步骤操作:

从本地备份恢复

# 挂载Borg仓库
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint

# 浏览和恢复文件
cd /tmp/immich-mountpoint
ls  # 查看可用快照

# 恢复完成后卸载
borg umount /tmp/immich-mountpoint

从远程备份恢复

# 挂载远程Borg仓库
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint

# 后续操作与本地恢复相同

最佳实践建议

  1. 备份验证:定期验证备份可恢复性
  2. 监控机制:设置备份完成通知
  3. 加密考虑:生产环境建议启用Borg加密功能
  4. 路径规范:避免在路径中使用特殊字符(:@")
  5. 存储规划:确保备份目标有足够空间

通过实施这套备份方案,您可以确保Immich项目的数据安全,即使面临硬件故障或意外删除等情况,也能快速恢复服务。

immich 自主托管的照片和视频备份解决方案,直接从手机端进行操作。 immich 项目地址: https://gitcode.com/gh_mirrors/im/immich

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣宣廷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值