实验数据的备份非常重要,往往都会做几个备份,这里是将elabftw实例备份到其它服务器(比如自建的服务器或者NAS,注意如果NAS不支持borgbackup的话就不能用此方案,但是也有其它变通方案)上的一个方案,相对比较简单,值得推荐
- 宿主机安装sshpass(相对比较简单的方案)
sudo apt-get update
sudo apt-get install sshpass
- 建立备份脚本文件夹
mkdir borg-backup
cd borg-backup
- 创建变量文件
vi .env
在文件中写入如下代码
# 远程主机登录密码
SSH_PASS='MyPassw0rd123'
# borg 仓库路径(后面第6步创建的仓库)
BORG_REPO='user@remote-host:/path/to/borg-repo'
# SSH 端口(远程服务器的端口)
SSH_PORT=XX22
# borg 密码(如果有加密仓库)
BORG_PASSPHRASE='your-borg-passphrase'
- 给.env文件设置权限(600,防止泄露)
chmod 600 /opt/borg-backup/.env
- 创建borg-backup脚本
#!/bin/bash
# === 加载配置 ===
source "$(dirname "$0")/.env"
# 本地要备份的目录
BACKUP_SOURCE="/etc /home /var/www"
# 备份档案名
HOSTNAME=$(hostname -s)
TIMESTAMP=$(date +%Y-%m-%d_%H-%M)
ARCHIVE="$HOSTNAME-$TIMESTAMP"
# 日志文件路径
LOGFILE="$(dirname "$0")/backup.log"
# 保留策略
PRUNE_OPTS="--keep-daily=7 --keep-weekly=4 --keep-monthly=6"
# 设置 borg 环境变量
export BORG_REPO="$BORG_REPO"
export BORG_PASSPHRASE="$BORG_PASSPHRASE"
export BORG_RSH="sshpass -p $SSH_PASS ssh -o StrictHostKeyChecking=no -p $SSH_PORT"
# === 执行备份 ===
exec > >(tee -a "$LOGFILE") 2>&1
echo "[$(date)] Starting backup: $ARCHIVE"
borg create --verbose --stats --compression zstd,3 \
::$ARCHIVE $BACKUP_SOURCE
BACKUP_EXIT=$?
echo "[$(date)] Pruning old backups..."
borg prune -v --list $PRUNE_OPTS
PRUNE_EXIT=$?
if [ $BACKUP_EXIT -eq 0 ] && [ $PRUNE_EXIT -eq 0 ]; then
echo "[$(date)] ✅ Backup and prune successful."
else
echo "[$(date)] ⚠️ Backup or prune failed!"
fi
echo "------------------------------------------"
6. 给脚本执行权限:
chmod +x /opt/borg-backup/borg-backup.sh
7. 创建远程仓库
7.1 确保远程目录存在且有权限
ssh user@remoteIP -p XX22 "mkdir -p /destination/repo-name"
7.2 初始化Borg仓库
不加密(强烈不建议)
borg init \
--encryption=none \
--rsh='ssh -p XX22' \
user@remoteIP:/destination/repo-name
加密
borg init \
--encryption=keyfile-blake2 \
--rsh='ssh -p XX22' \
user@remoteIP:/destination/repo-name
7.3验证仓库
borg info \
--rsh='ssh -p XX22' \
user@remoteIP:/destination/repo-name
密钥文件至关重要,必须单独备份!你可以用 borg key export 命令将它导出到安全的地方
borg key export --rsh='ssh -p XX22' user@remoteIP:/destination/repo-name ./repo-name.keyfile
也可以选择输出一个html文件用于扫码
borg key export --qr-html --rsh='ssh -p XX22' user@remoteIP:/destination/repo-name ./repo-name.keyfile
8. 根据创建好的远程仓库,更新前面的.env文件
9. 运行脚本,如果正常就会有如下显示

- 设置定时备份命令
crontab -e
在文件里添加如下代码
0 2 * * * /opt/borg-backup/borg-backup.sh
这样elabftw的远程备份就完备了!