fix(deploy): 更新 PostgreSQL 备份配置与凭据
- 更换超级用户名及口令为占位值,健康检查不再指定用户 - 备份任务改为按北京时间每天 02:00 执行,并增加调度日志 - 备份命令改用环境变量连接,移除硬编码 `-U postgres`
This commit is contained in:
@@ -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 ----
|
||||
|
||||
Reference in New Issue
Block a user