统一时间格式和时区

This commit is contained in:
yml2213
2026-07-31 12:57:17 +08:00
parent 667bfbde06
commit 949a0eb8f7
24 changed files with 342 additions and 49 deletions
+30 -5
View File
@@ -26,8 +26,10 @@ POSTGRES_DB="${POSTGRES_DB:-affiliate_dash}"
POSTGRES_PORT="${POSTGRES_PORT:-5432}"
POSTGRES_IMAGE="${POSTGRES_IMAGE:-docker.m.daocloud.io/library/postgres:16-alpine}"
DEV_DB_CONTAINER="${DEV_DB_CONTAINER:-affiliate_dash_postgres_dev}"
DATABASE_URL="${DATABASE_URL:-postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable}"
TZ="${TZ:-Asia/Shanghai}"
DATABASE_URL="${DATABASE_URL:-postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable&TimeZone=${TZ}}"
export DATABASE_URL
export TZ
# 结束指定端口上的进程(避免残留占用)
free_port() {
@@ -47,8 +49,28 @@ free_port() {
fi
}
postgres_container_exists() {
docker ps -a --format '{{.Names}}' | grep -qx "$DEV_DB_CONTAINER"
}
postgres_container_running() {
docker ps --format '{{.Names}}' | grep -qx "$DEV_DB_CONTAINER"
}
postgres_container_timezone_ready() {
local env cmd
env="$(docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' "$DEV_DB_CONTAINER" 2>/dev/null || true)"
cmd="$(docker inspect -f '{{json .Config.Cmd}}' "$DEV_DB_CONTAINER" 2>/dev/null || true)"
grep -qx "TZ=${TZ}" <<<"$env" && grep -qx "PGTZ=${TZ}" <<<"$env" && [[ "$cmd" == *"timezone=${TZ}"* ]]
}
ensure_postgres() {
if (echo >"/dev/tcp/127.0.0.1/${POSTGRES_PORT}") >/dev/null 2>&1; then
if command -v docker >/dev/null 2>&1 && postgres_container_exists; then
if ! postgres_container_timezone_ready; then
log "检测到旧 PostgreSQL 开发容器缺少时区配置,重建容器并保留数据卷: ${DEV_DB_CONTAINER}"
docker rm -f "$DEV_DB_CONTAINER" >/dev/null
fi
elif (echo >"/dev/tcp/127.0.0.1/${POSTGRES_PORT}") >/dev/null 2>&1; then
log "检测到本机 PostgreSQL 端口已可访问: ${POSTGRES_PORT}"
return 0
fi
@@ -56,9 +78,9 @@ ensure_postgres() {
log "未找到 Docker,请确认本机 PostgreSQL 已可通过 DATABASE_URL 访问"
return 0
fi
if docker ps --format '{{.Names}}' | grep -qx "$DEV_DB_CONTAINER"; then
if postgres_container_running; then
log "PostgreSQL 开发容器已运行: ${DEV_DB_CONTAINER}"
elif docker ps -a --format '{{.Names}}' | grep -qx "$DEV_DB_CONTAINER"; then
elif postgres_container_exists; then
log "启动 PostgreSQL 开发容器: ${DEV_DB_CONTAINER}"
docker start "$DEV_DB_CONTAINER" >/dev/null
else
@@ -69,8 +91,11 @@ ensure_postgres() {
-e POSTGRES_USER="$POSTGRES_USER" \
-e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
-e POSTGRES_DB="$POSTGRES_DB" \
-e TZ="$TZ" \
-e PGTZ="$TZ" \
-v "${DEV_DB_CONTAINER}-data:/var/lib/postgresql/data" \
"$POSTGRES_IMAGE" >/dev/null
"$POSTGRES_IMAGE" \
-c timezone="$TZ" >/dev/null
fi
for i in $(seq 1 40); do