Files
secondary-school-grade-archive/deploy/backup.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

41 lines
1.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 中学成绩档案 — 数据备份(数据库 + uploads,统一 tar.gz
set -euo pipefail
INSTALL_DIR="${INSTALL_DIR:-/opt/secondary-school-grade-archive}"
BACKUP_DIR="${BACKUP_DIR:-/root/grade-archive-backups}"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
ARCHIVE="${BACKUP_DIR}/grade-archive_${TIMESTAMP}.tar.gz"
WORK=$(mktemp -d)
cleanup() {
rm -rf "${WORK}"
}
trap cleanup EXIT
cd "${INSTALL_DIR}"
# shellcheck disable=SC1090
source .env
mkdir -p "${BACKUP_DIR}"
echo "[INFO] 备份数据库…"
PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump -h 127.0.0.1 -U "${POSTGRES_USER}" "${POSTGRES_DB}" \
--no-owner --no-privileges --clean --if-exists \
> "${WORK}/database.sql"
cat > "${WORK}/manifest.json" <<EOF
{
"app": "secondary-school-grade-archive",
"created_at": "$(date -Iseconds)",
"database": "${POSTGRES_DB}"
}
EOF
echo "[INFO] 打包 uploads…"
tar -czf "${ARCHIVE}" -C "${WORK}" database.sql manifest.json -C "${INSTALL_DIR}" uploads/
echo "[INFO] 完成: ${ARCHIVE}"
# 清理 30 天前的备份
find "${BACKUP_DIR}" -name 'grade-archive_*.tar.gz' -mtime +30 -delete 2>/dev/null || true