cacode commited on
Commit
9f11f19
·
verified ·
1 Parent(s): 83e4cde

Update hf-entrypoint.sh

Browse files
Files changed (1) hide show
  1. hf-entrypoint.sh +27 -40
hf-entrypoint.sh CHANGED
@@ -1,53 +1,49 @@
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
4
- echo "[boot] starting postgres + redis + sub2api"
5
-
6
- # ========== 1) 启动 Redis ==========
 
 
 
 
 
 
 
 
 
 
 
 
7
  redis-server --bind 127.0.0.1 --port 6379 --daemonize yes
8
- echo "[boot] redis started on 127.0.0.1:6379"
9
-
10
- # ========== 2) 初始化并启动 PostgreSQL ==========
11
- PG_BIN="/usr/lib/postgresql/15/bin"
12
 
 
13
  mkdir -p "${PGDATA}"
14
- chown -R postgres:postgres "${PGDATA}"
 
 
15
 
16
  if [ ! -s "${PGDATA}/PG_VERSION" ]; then
17
- echo "[boot] initdb at ${PGDATA}"
18
- gosu postgres "${PG_BIN}/initdb" -D "${PGDATA}" > /dev/null
19
  fi
20
 
21
- # 固定监听本地 5432
22
- cat >> "${PGDATA}/postgresql.conf" <<EOF
23
- listen_addresses = '127.0.0.1'
24
- port = 5432
25
- max_connections = 100
26
- EOF
27
-
28
- # 允许本地密码连接(容器内)
29
- cat > "${PGDATA}/pg_hba.conf" <<EOF
30
- local all all trust
31
- host all all 127.0.0.1/32 scram-sha-256
32
- host all all ::1/128 scram-sha-256
33
- EOF
34
-
35
- gosu postgres "${PG_BIN}/pg_ctl" -D "${PGDATA}" -w start
36
 
37
  # 创建用户和库(幂等)
38
- gosu postgres psql -v ON_ERROR_STOP=1 --username postgres <<SQL
39
  DO \$\$
40
  BEGIN
41
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${POSTGRES_USER}') THEN
42
  CREATE ROLE ${POSTGRES_USER} LOGIN PASSWORD '${POSTGRES_PASSWORD}';
43
  ELSE
44
- ALTER ROLE ${POSTGRES_USER} WITH PASSWORD '${POSTGRES_PASSWORD}';
45
  END IF;
46
  END
47
  \$\$;
48
  SQL
49
 
50
- gosu postgres psql -v ON_ERROR_STOP=1 --username postgres <<SQL
51
  DO \$\$
52
  BEGIN
53
  IF NOT EXISTS (SELECT FROM pg_database WHERE datname = '${POSTGRES_DB}') THEN
@@ -57,34 +53,25 @@ END
57
  \$\$;
58
  SQL
59
 
60
- echo "[boot] postgres started on 127.0.0.1:5432"
61
-
62
- # ========== 3) 导出给 sub2api 的连接变量 ==========
63
  export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}"
64
  export POSTGRES_URL="${DATABASE_URL}"
65
  export DB_URL="${DATABASE_URL}"
66
  export REDIS_URL="${REDIS_URL}"
67
-
68
- # 常见应用端口变量
69
  export PORT="${PORT:-8080}"
70
- export APP_PORT="${PORT}"
71
  export HOST="${HOST:-0.0.0.0}"
72
 
73
  echo "[boot] DATABASE_URL=${DATABASE_URL}"
74
  echo "[boot] REDIS_URL=${REDIS_URL}"
75
- echo "[boot] APP PORT=${PORT}"
76
 
77
- # ========== 4) 启动 sub2api ==========
78
- # 情况A:基础镜像有默认 CMD(最理想)
79
  if [ "$#" -gt 0 ]; then
80
  exec "$@"
81
  fi
82
 
83
- # 情况B:基础镜像没有 CMD,手动指定 SUB2API_CMD
84
  if [ -n "${SUB2API_CMD:-}" ]; then
85
  exec bash -lc "${SUB2API_CMD}"
86
  fi
87
 
88
- echo "[error] No base CMD and SUB2API_CMD not set."
89
- echo "[hint] set Space variable SUB2API_CMD, e.g. 'python main.py' or 'node server.js'"
90
  exit 1
 
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
4
+ run_as_postgres() {
5
+ if id postgres >/dev/null 2>&1; then
6
+ if command -v gosu >/dev/null 2>&1; then
7
+ gosu postgres "$@"
8
+ elif command -v su-exec >/dev/null 2>&1; then
9
+ su-exec postgres "$@"
10
+ else
11
+ su postgres -s /bin/sh -c "$(printf '%q ' "$@")"
12
+ fi
13
+ else
14
+ "$@"
15
+ fi
16
+ }
17
+
18
+ echo "[boot] start redis"
19
  redis-server --bind 127.0.0.1 --port 6379 --daemonize yes
 
 
 
 
20
 
21
+ echo "[boot] init/start postgres"
22
  mkdir -p "${PGDATA}"
23
+ if id postgres >/dev/null 2>&1; then
24
+ chown -R postgres:postgres "${PGDATA}" || true
25
+ fi
26
 
27
  if [ ! -s "${PGDATA}/PG_VERSION" ]; then
28
+ run_as_postgres initdb -D "${PGDATA}" >/dev/null
 
29
  fi
30
 
31
+ run_as_postgres pg_ctl -D "${PGDATA}" -o "-c listen_addresses=127.0.0.1 -c port=5432" -w start
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  # 创建用户和库(幂等)
34
+ run_as_postgres psql -v ON_ERROR_STOP=1 --username postgres --dbname postgres <<SQL
35
  DO \$\$
36
  BEGIN
37
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${POSTGRES_USER}') THEN
38
  CREATE ROLE ${POSTGRES_USER} LOGIN PASSWORD '${POSTGRES_PASSWORD}';
39
  ELSE
40
+ ALTER ROLE ${POSTGRES_USER} WITH LOGIN PASSWORD '${POSTGRES_PASSWORD}';
41
  END IF;
42
  END
43
  \$\$;
44
  SQL
45
 
46
+ run_as_postgres psql -v ON_ERROR_STOP=1 --username postgres --dbname postgres <<SQL
47
  DO \$\$
48
  BEGIN
49
  IF NOT EXISTS (SELECT FROM pg_database WHERE datname = '${POSTGRES_DB}') THEN
 
53
  \$\$;
54
  SQL
55
 
 
 
 
56
  export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}"
57
  export POSTGRES_URL="${DATABASE_URL}"
58
  export DB_URL="${DATABASE_URL}"
59
  export REDIS_URL="${REDIS_URL}"
 
 
60
  export PORT="${PORT:-8080}"
 
61
  export HOST="${HOST:-0.0.0.0}"
62
 
63
  echo "[boot] DATABASE_URL=${DATABASE_URL}"
64
  echo "[boot] REDIS_URL=${REDIS_URL}"
65
+ echo "[boot] APP_PORT=${PORT}"
66
 
67
+ # 优先执行镜像原始 CMD;如无则用 SUB2API_CMD
 
68
  if [ "$#" -gt 0 ]; then
69
  exec "$@"
70
  fi
71
 
 
72
  if [ -n "${SUB2API_CMD:-}" ]; then
73
  exec bash -lc "${SUB2API_CMD}"
74
  fi
75
 
76
+ echo "[error] No CMD found. Please set Space variable SUB2API_CMD"
 
77
  exit 1