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