cacode commited on
Commit
20be6bc
·
verified ·
1 Parent(s): 3e4c77e

Create hf-entrypoint.sh

Browse files
Files changed (1) hide show
  1. hf-entrypoint.sh +90 -0
hf-entrypoint.sh ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
54
+ CREATE DATABASE ${POSTGRES_DB} OWNER ${POSTGRES_USER};
55
+ END IF;
56
+ 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