b14d267642
- web_search 工具/插件接入自托管 SearXNG,支持百度/必应/搜狗/360搜索 - DevTools 加入 docker-compose.dev.yml,devtools/Dockerfile - scripts/pg-backup.sh 数据库备份恢复脚本,docs/pg-backup-migration.md - 后台思考 + datetime 插件时区默认 Asia/Shanghai - docker-compose 对齐 volume 名称,清理 tool-engine 残留引用 - README.md / Deploy.md 更新至当前架构(移除简报/tool-engine,新增搜索/跨端同步/DevTools) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
55 lines
1.4 KiB
Bash
55 lines
1.4 KiB
Bash
#!/bin/bash
|
|
# Cyrene PostgreSQL 备份/恢复
|
|
# 用法: ./pg-backup.sh backup # 备份到 ./backups/
|
|
# ./pg-backup.sh restore # 从最新备份恢复
|
|
set -euo pipefail
|
|
|
|
CONTAINER="cyrene_postgres"
|
|
DB="cyrene_ai"
|
|
USER="cyrene"
|
|
BACKUP_DIR="$(cd "$(dirname "$0")/../backups" && pwd)"
|
|
|
|
backup() {
|
|
mkdir -p "$BACKUP_DIR"
|
|
local file="$BACKUP_DIR/cyrene_$(date +%Y%m%d_%H%M%S).sql"
|
|
echo "正在备份 $DB → $file ..."
|
|
docker exec "$CONTAINER" pg_dump -U "$USER" -d "$DB" \
|
|
--no-owner --no-acl --clean --if-exists > "$file"
|
|
ls -lh "$file"
|
|
echo "备份完成: $file"
|
|
|
|
# 只保留最近 7 个备份
|
|
local count=$(ls -1 "$BACKUP_DIR"/*.sql 2>/dev/null | wc -l)
|
|
if [ "$count" -gt 7 ]; then
|
|
ls -1t "$BACKUP_DIR"/*.sql | tail -n +8 | xargs rm -f
|
|
echo "已清理旧备份 (保留最近 7 个)"
|
|
fi
|
|
}
|
|
|
|
restore() {
|
|
local file
|
|
if [ -n "${1:-}" ]; then
|
|
file="$1"
|
|
else
|
|
file=$(ls -1t "$BACKUP_DIR"/*.sql 2>/dev/null | head -1)
|
|
fi
|
|
if [ -z "$file" ] || [ ! -f "$file" ]; then
|
|
echo "错误: 找不到备份文件" >&2
|
|
exit 1
|
|
fi
|
|
echo "正在从 $file 恢复..."
|
|
docker exec -i "$CONTAINER" psql -U "$USER" -d "$DB" < "$file"
|
|
echo "恢复完成"
|
|
}
|
|
|
|
case "${1:-}" in
|
|
backup) backup ;;
|
|
restore) restore "${2:-}" ;;
|
|
*)
|
|
echo "用法: $0 backup|restore [文件路径]"
|
|
echo " backup 备份到 $BACKUP_DIR"
|
|
echo " restore [file] 恢复备份 (默认最新)"
|
|
exit 1
|
|
;;
|
|
esac
|