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