#!/usr/bin/env bash # 备份生产 Postgres 数据 # 用法:./deploy/scripts/backup-db.sh [输出目录] set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" cd "$ROOT_DIR" ENV_FILE="deploy/.env.prod" OUT_DIR="${1:-./backups}" COMPOSE_FILE="docker-compose.prod.yml" if [[ ! -f "$ENV_FILE" ]]; then echo "缺少 $ENV_FILE" >&2 exit 1 fi # shellcheck disable=SC1090 set -a source <(sed 's/\r$//' "$ENV_FILE" | grep -v '^\s*#' | grep -v '^\s*$' || true) set +a mkdir -p "$OUT_DIR" STAMP="$(date +%Y%m%d_%H%M%S)" FILE="${OUT_DIR}/kefu_cloud_pg_${STAMP}.sql.gz" echo "备份到 $FILE …" docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T postgres \ pg_dump -U "${DB_USER:-kefu}" "${DB_NAME:-kefu_cloud}" | gzip > "$FILE" echo "完成: $FILE ($(du -h "$FILE" | awk '{print $1}'))"