Murasame52 commited on
Commit
2c9fe33
·
verified ·
1 Parent(s): fbf2de9

Update start-space.sh

Browse files
Files changed (1) hide show
  1. start-space.sh +14 -14
start-space.sh CHANGED
@@ -12,7 +12,7 @@ else
12
  fi
13
 
14
  # ============================================================
15
- # 2. 自部署 PostgreSQL 初始化与启动(修正 postgres 密码认证)
16
  # ============================================================
17
  init_postgres() {
18
  echo "Initializing and starting self-deployed PostgreSQL..."
@@ -23,7 +23,7 @@ init_postgres() {
23
  mkdir -p "$PGDATA"
24
  chown postgres:postgres "$PGDATA"
25
 
26
- # 使用临时文件传递密码(该密码将同时用于 postgres 超级用户)
27
  pwfile=$(mktemp)
28
  echo "$POSTGRES_PASSWORD" > "$pwfile"
29
  chown postgres:postgres "$pwfile"
@@ -32,16 +32,16 @@ init_postgres() {
32
  rm -f "$pwfile"
33
  fi
34
 
35
- # 修改 postgresql.conf:仅监听本地,使用默认端口 5432
36
  echo "listen_addresses = 'localhost'" >> "$PGDATA/postgresql.conf"
37
  echo "port = 5432" >> "$PGDATA/postgresql.conf"
38
  echo "unix_socket_directories = '/tmp'" >> "$PGDATA/postgresql.conf"
39
 
40
- # 启动 PostgreSQL 服务
41
  echo "Starting PostgreSQL daemon..."
42
  su-exec postgres pg_ctl -D "$PGDATA" -o "-c unix_socket_directories=/tmp" start
43
 
44
- # 等待 PostgreSQL 就绪
45
  echo "Waiting for PostgreSQL to accept connections..."
46
  for i in $(seq 1 30); do
47
  if su-exec postgres pg_isready -U postgres -h localhost -p 5432 >/dev/null 2>&1; then
@@ -53,9 +53,10 @@ init_postgres() {
53
 
54
  # 创建应用用户和数据库(如果不存在)
55
  echo "Ensuring application user and database exist..."
56
- # 使用 PGPASSWORD 环境变量传递 postgres 超级用户密码
57
  export PGPASSWORD="$POSTGRES_PASSWORD"
58
- su-exec postgres psql -h localhost -p 5432 -v ON_ERROR_STOP=1 --username postgres <<-EOSQL
 
 
59
  DO \$\$
60
  BEGIN
61
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$POSTGRES_USER') THEN
@@ -66,9 +67,9 @@ init_postgres() {
66
  SELECT 'CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER'
67
  WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$POSTGRES_DB')\gexec
68
  EOSQL
69
- unset PGPASSWORD # 清除,避免影响后续使用
70
 
71
- # 设置 DATABASE_URL 及拆分变量,指向本地 PostgreSQL(不启用 SSL)
72
  export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=disable"
73
  export DATABASE_HOST=localhost
74
  export DATABASE_PORT=5432
@@ -81,7 +82,7 @@ EOSQL
81
  }
82
 
83
  # ============================================================
84
- # 3. 数据库连接解析(优先使用外部连接,若提供了 EXTERNAL_DATABASE_URL
85
  # ============================================================
86
  if [ -n "${EXTERNAL_DATABASE_URL:-}" ]; then
87
  echo "EXTERNAL_DATABASE_URL provided, using external database instead of self-deployed."
@@ -106,12 +107,11 @@ print(f'export DATABASE_SSLMODE={sslmode}')
106
  ")
107
  echo "Parsed external database: DATABASE_HOST=$DATABASE_HOST, DATABASE_DBNAME=$DATABASE_DBNAME"
108
  else
109
- # 否则启动自部署 PostgreSQL
110
  init_postgres
111
  fi
112
 
113
  # ============================================================
114
- # 4. 检查必需的数据库变量(无论来源)
115
  # ============================================================
116
  required_db_vars="DATABASE_HOST DATABASE_PORT DATABASE_USER DATABASE_DBNAME"
117
  for var in $required_db_vars; do
@@ -147,7 +147,7 @@ REDIS_PASSWORD="${REDIS_PASSWORD:-}"
147
  REDIS_DB="${REDIS_DB:-0}"
148
 
149
  # ============================================================
150
- # 7. 创建目录(包括 PostgreSQL 数据目录的父目录)
151
  # ============================================================
152
  mkdir -p "$DATA_DIR" /tmp/gateway-redis
153
  mkdir -p "$(dirname "$PGDATA")"
@@ -185,7 +185,7 @@ export PORT="${PORT:-$SERVER_PORT}"
185
  GIN_MODE="${GIN_MODE:-release}"
186
 
187
  # ============================================================
188
- # 10. 辅助函数(完全保留原始逻辑)
189
  # ============================================================
190
  migration_count() {
191
  PGPASSWORD="${DATABASE_PASSWORD:-}" psql \
 
12
  fi
13
 
14
  # ============================================================
15
+ # 2. 自部署 PostgreSQL 初始化与启动
16
  # ============================================================
17
  init_postgres() {
18
  echo "Initializing and starting self-deployed PostgreSQL..."
 
23
  mkdir -p "$PGDATA"
24
  chown postgres:postgres "$PGDATA"
25
 
26
+ # 使用临时文件传递密码
27
  pwfile=$(mktemp)
28
  echo "$POSTGRES_PASSWORD" > "$pwfile"
29
  chown postgres:postgres "$pwfile"
 
32
  rm -f "$pwfile"
33
  fi
34
 
35
+ # 配置 postgresql.conf
36
  echo "listen_addresses = 'localhost'" >> "$PGDATA/postgresql.conf"
37
  echo "port = 5432" >> "$PGDATA/postgresql.conf"
38
  echo "unix_socket_directories = '/tmp'" >> "$PGDATA/postgresql.conf"
39
 
40
+ # 启动 PostgreSQL
41
  echo "Starting PostgreSQL daemon..."
42
  su-exec postgres pg_ctl -D "$PGDATA" -o "-c unix_socket_directories=/tmp" start
43
 
44
+ # 等待就绪
45
  echo "Waiting for PostgreSQL to accept connections..."
46
  for i in $(seq 1 30); do
47
  if su-exec postgres pg_isready -U postgres -h localhost -p 5432 >/dev/null 2>&1; then
 
53
 
54
  # 创建应用用户和数据库(如果不存在)
55
  echo "Ensuring application user and database exist..."
 
56
  export PGPASSWORD="$POSTGRES_PASSWORD"
57
+ # 取消可能存在的 PGDATABASE 环境变量,并显式指定数据库为 postgres
58
+ unset PGDATABASE
59
+ su-exec postgres psql -h localhost -p 5432 -d postgres -v ON_ERROR_STOP=1 --username postgres <<-EOSQL
60
  DO \$\$
61
  BEGIN
62
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$POSTGRES_USER') THEN
 
67
  SELECT 'CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER'
68
  WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$POSTGRES_DB')\gexec
69
  EOSQL
70
+ unset PGPASSWORD
71
 
72
+ # 设置 DATABASE_URL 及拆分变量
73
  export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=disable"
74
  export DATABASE_HOST=localhost
75
  export DATABASE_PORT=5432
 
82
  }
83
 
84
  # ============================================================
85
+ # 3. 数据库连接解析(优先使用外部连接)
86
  # ============================================================
87
  if [ -n "${EXTERNAL_DATABASE_URL:-}" ]; then
88
  echo "EXTERNAL_DATABASE_URL provided, using external database instead of self-deployed."
 
107
  ")
108
  echo "Parsed external database: DATABASE_HOST=$DATABASE_HOST, DATABASE_DBNAME=$DATABASE_DBNAME"
109
  else
 
110
  init_postgres
111
  fi
112
 
113
  # ============================================================
114
+ # 4. 检查必需的数据库变量
115
  # ============================================================
116
  required_db_vars="DATABASE_HOST DATABASE_PORT DATABASE_USER DATABASE_DBNAME"
117
  for var in $required_db_vars; do
 
147
  REDIS_DB="${REDIS_DB:-0}"
148
 
149
  # ============================================================
150
+ # 7. 创建目录
151
  # ============================================================
152
  mkdir -p "$DATA_DIR" /tmp/gateway-redis
153
  mkdir -p "$(dirname "$PGDATA")"
 
185
  GIN_MODE="${GIN_MODE:-release}"
186
 
187
  # ============================================================
188
+ # 10. 辅助函数
189
  # ============================================================
190
  migration_count() {
191
  PGPASSWORD="${DATABASE_PASSWORD:-}" psql \