sub2api-dev / hf-entrypoint.sh
cacode's picture
Update hf-entrypoint.sh
4cdf901 verified
raw
history blame
2.2 kB
#!/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