sub2api-dev / hf-entrypoint.sh
cacode's picture
Create hf-entrypoint.sh
20be6bc verified
raw
history blame
2.6 kB
#!/usr/bin/env bash
set -euo pipefail
echo "[boot] starting postgres + redis + sub2api"
# ========== 1) 启动 Redis ==========
redis-server --bind 127.0.0.1 --port 6379 --daemonize yes
echo "[boot] redis started on 127.0.0.1:6379"
# ========== 2) 初始化并启动 PostgreSQL ==========
PG_BIN="/usr/lib/postgresql/15/bin"
mkdir -p "${PGDATA}"
chown -R postgres:postgres "${PGDATA}"
if [ ! -s "${PGDATA}/PG_VERSION" ]; then
echo "[boot] initdb at ${PGDATA}"
gosu postgres "${PG_BIN}/initdb" -D "${PGDATA}" > /dev/null
fi
# 固定监听本地 5432
cat >> "${PGDATA}/postgresql.conf" <<EOF
listen_addresses = '127.0.0.1'
port = 5432
max_connections = 100
EOF
# 允许本地密码连接(容器内)
cat > "${PGDATA}/pg_hba.conf" <<EOF
local all all trust
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
EOF
gosu postgres "${PG_BIN}/pg_ctl" -D "${PGDATA}" -w start
# 创建用户和库(幂等)
gosu postgres psql -v ON_ERROR_STOP=1 --username 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 PASSWORD '${POSTGRES_PASSWORD}';
END IF;
END
\$\$;
SQL
gosu postgres psql -v ON_ERROR_STOP=1 --username 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
echo "[boot] postgres started on 127.0.0.1:5432"
# ========== 3) 导出给 sub2api 的连接变量 ==========
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}"
# 常见应用端口变量
export PORT="${PORT:-8080}"
export APP_PORT="${PORT}"
export HOST="${HOST:-0.0.0.0}"
echo "[boot] DATABASE_URL=${DATABASE_URL}"
echo "[boot] REDIS_URL=${REDIS_URL}"
echo "[boot] APP PORT=${PORT}"
# ========== 4) 启动 sub2api ==========
# 情况A:基础镜像有默认 CMD(最理想)
if [ "$#" -gt 0 ]; then
exec "$@"
fi
# 情况B:基础镜像没有 CMD,手动指定 SUB2API_CMD
if [ -n "${SUB2API_CMD:-}" ]; then
exec bash -lc "${SUB2API_CMD}"
fi
echo "[error] No base CMD and SUB2API_CMD not set."
echo "[hint] set Space variable SUB2API_CMD, e.g. 'python main.py' or 'node server.js'"
exit 1