Spaces:
Paused
Paused
File size: 3,189 Bytes
20be6bc 9f11f19 20be6bc 9f11f19 4cdf901 9f11f19 20be6bc 9f11f19 20be6bc 636310b 4cdf901 20be6bc 636310b 4cdf901 20be6bc 9f11f19 20be6bc 636310b d8d83be 20be6bc 4cdf901 20be6bc 636310b e85994b 636310b 20be6bc 636310b 20be6bc 9f11f19 e85994b 20be6bc 636310b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #!/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
|