sub2api-dev / hf-entrypoint.sh
cacode's picture
Update hf-entrypoint.sh
e85994b verified
raw
history blame
3.19 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
# Place Unix socket under /tmp to avoid missing /run/postgresql in HF runtime.
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
# Upsert DB role.
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
# CREATE DATABASE cannot run inside DO block. Check first, then createdb.
DB_EXISTS=$(run_as_postgres psql -h 127.0.0.1 -p 5432 -U postgres -d postgres -tAc \
"SELECT 1 FROM pg_database WHERE datname='${POSTGRES_DB}'")
if [ "${DB_EXISTS}" != "1" ]; then
run_as_postgres createdb -h 127.0.0.1 -p 5432 -U postgres -O "${POSTGRES_USER}" "${POSTGRES_DB}"
fi
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}"
export AUTO_SETUP="${AUTO_SETUP:-true}"
export ADMIN_EMAIL="${ADMIN_EMAIL:-admin@sub2api.com}"
if [ -n "${SUB2API_ADMIN_PASSWORD:-}" ] && [ -z "${ADMIN_PASSWORD:-}" ]; then
export ADMIN_PASSWORD="${SUB2API_ADMIN_PASSWORD}"
fi
if [ -z "${ADMIN_PASSWORD:-}" ]; then
echo "[error] ADMIN_PASSWORD is required. Set Space Secret ADMIN_PASSWORD (or SUB2API_ADMIN_PASSWORD)."
exit 1
fi
export SERVER_HOST="${HOST}"
export SERVER_PORT="${PORT}"
export DATABASE_HOST="${DATABASE_HOST:-127.0.0.1}"
export DATABASE_PORT="${DATABASE_PORT:-5432}"
export DATABASE_USER="${POSTGRES_USER}"
export DATABASE_PASSWORD="${POSTGRES_PASSWORD}"
export DATABASE_DBNAME="${POSTGRES_DB}"
export DATABASE_SSLMODE="${DATABASE_SSLMODE:-disable}"
export REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
export REDIS_PORT="${REDIS_PORT:-6379}"
export REDIS_DB="${REDIS_DB:-0}"
export REDIS_PASSWORD="${REDIS_PASSWORD:-}"
export REDIS_ENABLE_TLS="${REDIS_ENABLE_TLS:-false}"
echo "[boot] DATABASE_URL=postgresql://${POSTGRES_USER}:******@127.0.0.1:5432/${POSTGRES_DB}"
echo "[boot] REDIS_URL=${REDIS_URL}"
echo "[boot] APP_PORT=${PORT}"
echo "[boot] ADMIN_EMAIL=${ADMIN_EMAIL}"
# Start sub2api with the original entrypoint discovered from the base image.
mkdir -p /app/data
exec /app/sub2api