Files
secondary-school-grade-archive/deploy/restore.sh
T
dekun 530a8b70a1 学生资料设置、头像与自动备份恢复。
首页卡片支持修改/删除;详情页设置 Tab 可维护学校、年级与头像;系统设置新增数据备份下载与恢复;备份默认存 /root/grade-archive-backups,详见 docs/BACKUP.md。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 17:56:09 +08:00

57 lines
1.4 KiB
Bash

#!/usr/bin/env bash
# 中学成绩档案 — 从备份包恢复(命令行,适合新服务器迁移)
set -euo pipefail
if [[ $# -lt 1 ]]; then
echo "用法: sudo bash deploy/restore.sh /path/to/grade-archive_YYYYMMDD_HHMMSS.tar.gz"
exit 1
fi
ARCHIVE="$1"
INSTALL_DIR="${INSTALL_DIR:-/opt/secondary-school-grade-archive}"
WORK=$(mktemp -d)
cleanup() {
rm -rf "${WORK}"
}
trap cleanup EXIT
if [[ ! -f "${ARCHIVE}" ]]; then
echo "[ERROR] 备份文件不存在: ${ARCHIVE}"
exit 1
fi
cd "${INSTALL_DIR}"
# shellcheck disable=SC1090
source .env
echo "[WARN] 即将恢复数据库与 uploads,当前数据将被覆盖。"
read -rp "确认继续?[y/N] " confirm
if [[ "${confirm}" != "y" && "${confirm}" != "Y" ]]; then
echo "已取消"
exit 0
fi
echo "[INFO] 解压备份…"
tar -xzf "${ARCHIVE}" -C "${WORK}"
if [[ ! -f "${WORK}/database.sql" ]]; then
echo "[ERROR] 备份包缺少 database.sql"
exit 1
fi
echo "[INFO] 恢复数据库…"
PGPASSWORD="${POSTGRES_PASSWORD}" psql -h 127.0.0.1 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" \
-v ON_ERROR_STOP=1 -f "${WORK}/database.sql"
if [[ -d "${WORK}/uploads" ]]; then
echo "[INFO] 恢复 uploads…"
rm -rf "${INSTALL_DIR}/uploads"
cp -a "${WORK}/uploads" "${INSTALL_DIR}/uploads"
fi
echo "[INFO] 重启服务…"
systemctl restart grade-archive 2>/dev/null || true
echo "[INFO] 恢复完成"