Spaces:
Paused
Paused
| 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 | |