Files
wangliang 39986f10f2 初始化 LibreDesk 本地实例部署仓库
- docker compose 部署:app / db / redis / tls(nginx) / bridge-tools,宿主端口错开避免与本机服务冲突
- bridge-tools 内联进仓库(compose build 路径改为 ./bridge-tools),仓库自包含可部署
- 部署说明 README、crm-new 对照与 bridge-tools 方案文档、备份与隧道脚本
- .gitignore 排除 .env、config.toml、uploads/、tls 私钥/证书、backups/、logs/
2026-10-29 13:24:13 +08:00

53 lines
1.9 KiB
Bash
Executable File
Raw Permalink 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
# LibreDesk 定时备份:Postgres dump + uploads + 密钥配置,保留 14 天。
# 用法:./scripts/backup.sh
# cron:0 3 * * * cd /home/dev/code/yehwang-ai/libredesk && ./scripts/backup.sh >> logs/backup.log 2>&1
set -euo pipefail
cd "$(dirname "$0")/.."
TS="$(date +%Y%m%d-%H%M%S)"
BACKUP_DIR="backups"
LOG_PREFIX="[backup $(date -Is)]"
mkdir -p "$BACKUP_DIR" logs
DB_FILE="$BACKUP_DIR/db-$TS.dump"
UPLOADS_FILE="$BACKUP_DIR/uploads-$TS.tar.gz"
CONFIG_FILE="$BACKUP_DIR/config.toml.$TS"
ENV_FILE="$BACKUP_DIR/env.$TS"
POSTGRES_USER="${POSTGRES_USER:-libredesk}"
POSTGRES_DB="${POSTGRES_DB:-libredesk}"
echo "$LOG_PREFIX start"
# 1) 数据库(custom format,可直接 pg_restore)
docker compose exec -T db pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB" > "$DB_FILE"
# 2) 上传文件
tar -czf "$UPLOADS_FILE" -C . uploads
# 3) 配置文件(含加密密钥 / DB 密码,保持 600)
cp -p config.toml "$CONFIG_FILE"
cp -p .env "$ENV_FILE"
chmod 600 "$CONFIG_FILE" "$ENV_FILE"
# 4) 校验 dump:先看 PGDMP 头,再用 pg_restore 读出 TOC(容器内 bind mount,避免 stdin 不可 seek)
if [ "$(head -c 5 "$DB_FILE")" != "PGDMP" ]; then
echo "$LOG_PREFIX ERROR: dump 文件头不是 PGDMP:$DB_FILE" >&2
exit 1
fi
TOC_COUNT="$(docker run --rm -v "$PWD/$BACKUP_DIR:/b:ro" "${VERIFY_IMAGE:-pgvector/pgvector:pg18}" pg_restore -l "/b/$(basename "$DB_FILE")" | grep -cE '^[0-9]+;' || true)"
if [ "${TOC_COUNT:-0}" -lt 100 ]; then
echo "$LOG_PREFIX ERROR: dump 校验失败(TOC 条目=$TOC_COUNT),保留文件供排查:$DB_FILE" >&2
exit 1
fi
# 5) 保留 14 天
find "$BACKUP_DIR" -maxdepth 1 -type f \
\( -name 'db-*.dump' -o -name 'uploads-*.tar.gz' -o -name 'config.toml.*' -o -name 'env.*' \) \
-mtime +14 -delete
echo "$LOG_PREFIX ok db=$(du -h "$DB_FILE" | cut -f1) uploads=$(du -h "$UPLOADS_FILE" | cut -f1) toc=$TOC_COUNT"