fix(deploy): 更新 PostgreSQL 备份配置与凭据

- 更换超级用户名及口令为占位值,健康检查不再指定用户
- 备份任务改为按北京时间每天 02:00 执行,并增加调度日志
- 备份命令改用环境变量连接,移除硬编码 `-U postgres`
This commit is contained in:
2026-09-04 14:33:11 +08:00
parent e90028a412
commit 0b7f1f9667
+22 -10
View File
@@ -21,8 +21,10 @@ services:
ports:
- "15432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: Q!P@z#M$1@686^*^..
# 仅首次初始化空数据卷时生效;库内超级用户已被 ALTER ROLE 改名、口令已改,
# 这里写成与新库一致的名字/口令(占位符,需你自行替换成实际值)。
POSTGRES_USER: sql9f15b63fd203b36e
POSTGRES_PASSWORD: 1ec94b1acdaf57b66030242d418fad5a
POSTGRES_DB: postgres
volumes:
- /data/pgsql:/var/lib/postgresql/data
@@ -30,7 +32,8 @@ services:
networks:
- redfuture-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
# 健康检查只探“服务在不在”,不带 -U 指定角色,避免跟着超级用户名改来改去
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
@@ -46,8 +49,9 @@ services:
volumes:
- /data/pgsql/backup:/backup
environment:
PGUSER: postgres
PGPASSWORD: Q!P@z#M$1@686^*^..
TZ: Asia/Shanghai # 使下面的 02:00 与备份文件名时间都按北京时间计算
PGUSER: sql9f15b63fd203b36e # ← 改为你 ALTER ROLE 后的新超级用户名
PGPASSWORD: 1ec94b1acdaf57b66030242d418fad5a # ← 改为新超级用户口令
PGHOST: postgres
PGPORT: 5432
BACKUP_DIR: /backup
@@ -59,18 +63,26 @@ services:
- |
set -e
mkdir -p "/backup"
echo "[$(date '+%F %T %Z')] postgres-backup started. Will run once per day at 02:00."
while true; do
# 睡到下一个 02:00(容器 TZ=Asia/Shanghai → 即北京时间凌晨2点)
now=$(date +%s)
target=$(date -d "today 02:00" +%s)
[ "$target" -le "$now" ] && target=$(date -d "tomorrow 02:00" +%s)
echo "[$(date '+%F %T')] next backup scheduled at $(date -d "@$target" '+%F %T')"
sleep $(( target - now ))
f="backup_$(date +%Y%m%d_%H%M%S).sql.gz"
tmp="/backup/$${f}.tmp"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting backup: $${f}"
if pg_dumpall -h postgres -U postgres > "$${tmp}" && gzip -f "$${tmp}" && mv "$${tmp}.gz" "/backup/$${f}"; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup complete"
echo "[$(date '+%F %T')] Starting backup: $${f}"
# 连接身份取自上面环境变量 PGUSER/PGPASSWORD(无需在命令里再写 -U
if pg_dumpall -h postgres > "$${tmp}" && gzip -f "$${tmp}" && mv "$${tmp}.gz" "/backup/$${f}"; then
echo "[$(date '+%F %T')] Backup complete"
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup FAILED, removing partial file"
echo "[$(date '+%F %T')] Backup FAILED, removing partial file"
rm -f "$${tmp}" "$${tmp}.gz"
fi
find /backup -name "backup_*.sql.gz" -mtime +7 -delete 2>/dev/null || true
sleep 86400
done
# ---- Redis ----