Immich项目数据备份方案:基于Borg的自动化备份脚本指南
immich 自主托管的照片和视频备份解决方案,直接从手机端进行操作。 项目地址: https://gitcode.com/gh_mirrors/im/immich
前言
在个人照片和视频管理领域,Immich作为一个优秀的自托管解决方案,为用户提供了便捷的媒体管理体验。然而,任何数据管理系统的核心问题之一就是如何确保数据安全。本文将详细介绍如何为Immich项目配置基于Borg的自动化备份方案,实现本地和远程双重备份保护。
Borg备份方案概述
BorgBackup是一款功能强大的去重归档软件,具有以下显著优势:
- 高效的去重存储技术,大幅节省备份空间
- 内置版本控制功能,可保留多个时间点的备份快照
- 支持数据压缩和加密
- 可配置灵活的备份保留策略
针对Immich项目,我们设计的备份方案将同时备份:
- PostgreSQL数据库(包含用户信息、元数据等关键数据)
- 原始照片/视频文件
- 系统配置文件
备份方案优势分析
相比Immich内置的自动数据库备份工具,本方案具有两大核心优势:
- 存储效率优化:采用版本化备份而非完整副本,节省存储空间
- 数据一致性保障:确保数据库备份与媒体库备份时间点完全同步
准备工作
系统环境要求
- 主服务器和远程备份服务器均需安装BorgBackup
- 建议将执行用户加入docker组以获得必要权限
- 配置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
关键参数说明
--exclude
参数排除了缩略图和转码视频目录,这些可重新生成的数据无需备份prune
命令配置了灵活的保留策略:- 保留最近4个每周备份
- 保留最近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
# 后续操作与本地恢复相同
最佳实践建议
- 备份验证:定期验证备份可恢复性
- 监控机制:设置备份完成通知
- 加密考虑:生产环境建议启用Borg加密功能
- 路径规范:避免在路径中使用特殊字符(:@")
- 存储规划:确保备份目标有足够空间
通过实施这套备份方案,您可以确保Immich项目的数据安全,即使面临硬件故障或意外删除等情况,也能快速恢复服务。
immich 自主托管的照片和视频备份解决方案,直接从手机端进行操作。 项目地址: https://gitcode.com/gh_mirrors/im/immich
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考