File size: 2,201 Bytes
20be6bc
 
 
9f11f19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20be6bc
 
9f11f19
4cdf901
9f11f19
 
 
20be6bc
 
9f11f19
20be6bc
 
4cdf901
 
 
 
20be6bc
4cdf901
 
20be6bc
 
 
 
 
9f11f19
20be6bc
 
 
 
 
4cdf901
20be6bc
 
 
 
 
 
 
 
 
 
 
 
4cdf901
20be6bc
 
 
 
 
9f11f19
20be6bc
 
 
 
 
 
 
 
 
9f11f19
20be6bc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env bash
set -euo pipefail

run_as_postgres() {
  if id postgres >/dev/null 2>&1; then
    if command -v gosu >/dev/null 2>&1; then
      gosu postgres "$@"
    elif command -v su-exec >/dev/null 2>&1; then
      su-exec postgres "$@"
    else
      su postgres -s /bin/sh -c "$(printf '%q ' "$@")"
    fi
  else
    "$@"
  fi
}

echo "[boot] start redis"
redis-server --bind 127.0.0.1 --port 6379 --daemonize yes

echo "[boot] init/start postgres"
mkdir -p "${PGDATA}" /tmp
if id postgres >/dev/null 2>&1; then
  chown -R postgres:postgres "${PGDATA}" || true
fi

if [ ! -s "${PGDATA}/PG_VERSION" ]; then
  run_as_postgres initdb -D "${PGDATA}" >/dev/null
fi

# 关键:把 unix socket 放到 /tmp,避免 /run/postgresql 不存在导致启动失败
run_as_postgres pg_ctl -D "${PGDATA}" \
  -o "-c listen_addresses=127.0.0.1 -c port=5432 -c unix_socket_directories=/tmp" \
  -w start

# 创建用户和库(幂等)——强制走 TCP
run_as_postgres psql -h 127.0.0.1 -p 5432 -v ON_ERROR_STOP=1 --username postgres --dbname postgres <<SQL
DO \$\$
BEGIN
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${POSTGRES_USER}') THEN
    CREATE ROLE ${POSTGRES_USER} LOGIN PASSWORD '${POSTGRES_PASSWORD}';
  ELSE
    ALTER ROLE ${POSTGRES_USER} WITH LOGIN PASSWORD '${POSTGRES_PASSWORD}';
  END IF;
END
\$\$;
SQL

run_as_postgres psql -h 127.0.0.1 -p 5432 -v ON_ERROR_STOP=1 --username postgres --dbname postgres <<SQL
DO \$\$
BEGIN
  IF NOT EXISTS (SELECT FROM pg_database WHERE datname = '${POSTGRES_DB}') THEN
    CREATE DATABASE ${POSTGRES_DB} OWNER ${POSTGRES_USER};
  END IF;
END
\$\$;
SQL

export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}"
export POSTGRES_URL="${DATABASE_URL}"
export DB_URL="${DATABASE_URL}"
export REDIS_URL="${REDIS_URL:-redis://127.0.0.1:6379/0}"
export PORT="${PORT:-8080}"
export HOST="${HOST:-0.0.0.0}"

echo "[boot] DATABASE_URL=${DATABASE_URL}"
echo "[boot] REDIS_URL=${REDIS_URL}"
echo "[boot] APP_PORT=${PORT}"

if [ "$#" -gt 0 ]; then
  exec "$@"
fi

if [ -n "${SUB2API_CMD:-}" ]; then
  exec bash -lc "${SUB2API_CMD}"
fi

echo "[error] No CMD found. Please set Space variable SUB2API_CMD"
exit 1