Spaces:
Paused
Paused
Update start-space.sh
Browse files- start-space.sh +14 -14
start-space.sh
CHANGED
|
@@ -12,7 +12,7 @@ else
|
|
| 12 |
fi
|
| 13 |
|
| 14 |
# ============================================================
|
| 15 |
-
# 2. 自部署 PostgreSQL 初始化与启动
|
| 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 |
-
# 使用临时文件传递密码
|
| 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 |
-
#
|
| 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,9 +53,10 @@ init_postgres() {
|
|
| 53 |
|
| 54 |
# 创建应用用户和数据库(如果不存在)
|
| 55 |
echo "Ensuring application user and database exist..."
|
| 56 |
-
# 使用 PGPASSWORD 环境变量传递 postgres 超级用户密码
|
| 57 |
export PGPASSWORD="$POSTGRES_PASSWORD"
|
| 58 |
-
|
|
|
|
|
|
|
| 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 及拆分变量
|
| 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. 数据库连接解析(优先使用外部连接
|
| 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. 创建目录
|
| 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 \
|