cacode commited on
Commit
90976d4
·
verified ·
1 Parent(s): 8bbe652

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +15 -20
  2. ca.pem +25 -0
  3. hf-entrypoint.sh +34 -51
Dockerfile CHANGED
@@ -2,7 +2,7 @@ FROM weishaw/sub2api:latest
2
 
3
  USER root
4
 
5
- # Install local Redis + PostgreSQL for all-in-one runtime in HF Space.
6
  RUN set -eux; \
7
  if command -v apk >/dev/null 2>&1; then \
8
  apk add --no-cache \
@@ -10,8 +10,6 @@ RUN set -eux; \
10
  ca-certificates \
11
  netcat-openbsd \
12
  redis \
13
- postgresql15 \
14
- postgresql15-client \
15
  su-exec; \
16
  elif command -v apt-get >/dev/null 2>&1; then \
17
  apt-get update && apt-get install -y --no-install-recommends \
@@ -19,40 +17,37 @@ RUN set -eux; \
19
  ca-certificates \
20
  netcat-openbsd \
21
  redis-server \
22
- postgresql \
23
- postgresql-client \
24
  gosu \
25
  && rm -rf /var/lib/apt/lists/*; \
26
  else \
27
  echo "No supported package manager found in base image"; \
28
  exit 1; \
29
- fi
30
-
31
- ENV PORT=8080 \
32
- HOST=0.0.0.0 \
33
  AUTO_SETUP=true \
34
  ADMIN_EMAIL=admin@sub2api.com \
35
  SERVER_HOST=0.0.0.0 \
36
  SERVER_PORT=8080 \
37
- DATABASE_HOST=127.0.0.1 \
38
- DATABASE_PORT=5432 \
39
- DATABASE_USER=sub2api \
40
- DATABASE_PASSWORD=sub2api_pass \
41
- DATABASE_DBNAME=sub2api \
42
- DATABASE_SSLMODE=disable \
 
43
  REDIS_HOST=127.0.0.1 \
44
  REDIS_PORT=6379 \
45
  REDIS_DB=0 \
46
  REDIS_PASSWORD="" \
47
  REDIS_ENABLE_TLS=false \
48
- PGDATA=/tmp/pgdata \
49
- POSTGRES_DB=sub2api \
50
- POSTGRES_USER=sub2api \
51
- POSTGRES_PASSWORD=sub2api_pass \
52
  REDIS_URL=redis://127.0.0.1:6379/0
53
 
54
  COPY hf-entrypoint.sh /usr/local/bin/hf-entrypoint.sh
55
- RUN chmod +x /usr/local/bin/hf-entrypoint.sh
 
 
56
 
57
  EXPOSE 8080
58
  ENTRYPOINT ["/usr/local/bin/hf-entrypoint.sh"]
 
2
 
3
  USER root
4
 
5
+ # Install local Redis runtime dependencies.
6
  RUN set -eux; \
7
  if command -v apk >/dev/null 2>&1; then \
8
  apk add --no-cache \
 
10
  ca-certificates \
11
  netcat-openbsd \
12
  redis \
 
 
13
  su-exec; \
14
  elif command -v apt-get >/dev/null 2>&1; then \
15
  apt-get update && apt-get install -y --no-install-recommends \
 
17
  ca-certificates \
18
  netcat-openbsd \
19
  redis-server \
 
 
20
  gosu \
21
  && rm -rf /var/lib/apt/lists/*; \
22
  else \
23
  echo "No supported package manager found in base image"; \
24
  exit 1; \
25
+ fi
26
+
27
+ ENV PORT=8080 \
28
+ HOST=0.0.0.0 \
29
  AUTO_SETUP=true \
30
  ADMIN_EMAIL=admin@sub2api.com \
31
  SERVER_HOST=0.0.0.0 \
32
  SERVER_PORT=8080 \
33
+ DATABASE_HOST=pg-newapi-codeatlantis666.f.aivencloud.com \
34
+ DATABASE_PORT=22503 \
35
+ DATABASE_USER=avnadmin \
36
+ DATABASE_PASSWORD= \
37
+ DATABASE_DBNAME=defaultdb \
38
+ DATABASE_SSLMODE=require \
39
+ DATABASE_SSLROOTCERT=/app/ca.pem \
40
  REDIS_HOST=127.0.0.1 \
41
  REDIS_PORT=6379 \
42
  REDIS_DB=0 \
43
  REDIS_PASSWORD="" \
44
  REDIS_ENABLE_TLS=false \
 
 
 
 
45
  REDIS_URL=redis://127.0.0.1:6379/0
46
 
47
  COPY hf-entrypoint.sh /usr/local/bin/hf-entrypoint.sh
48
+ COPY ca.pem /app/ca.pem
49
+ RUN sed -i 's/\r$//' /usr/local/bin/hf-entrypoint.sh \
50
+ && chmod +x /usr/local/bin/hf-entrypoint.sh
51
 
52
  EXPOSE 8080
53
  ENTRYPOINT ["/usr/local/bin/hf-entrypoint.sh"]
ca.pem ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEQTCCAqmgAwIBAgIUUIvalUEGuCbKWGhDPHK8kH+ZX5MwDQYJKoZIhvcNAQEM
3
+ BQAwOjE4MDYGA1UEAwwvNDBlZGM0ZWEtY2Q5ZS00MDhmLTk1NWQtNzk5Y2Y5ZmU5
4
+ Yzk2IFByb2plY3QgQ0EwHhcNMjQwNDIwMDY0ODA0WhcNMzQwNDE4MDY0ODA0WjA6
5
+ MTgwNgYDVQQDDC80MGVkYzRlYS1jZDllLTQwOGYtOTU1ZC03OTljZjlmZTljOTYg
6
+ UHJvamVjdCBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALbeRvoT
7
+ xSFMyOWzNPL8W7S8rUy/GRI/TERJPQafcgYT2Fn4J5fql+OFPLa0uT7fZ0HeDjkM
8
+ LeAqMNBJIF4O1IErzEbj/CEGoaeLKN3TRDENAhXSbG3ZsFGRR9YboCU0l9Z3qTL0
9
+ nXRIJ/lMnhbDC10KXILRrESSrvVBWasgx86y+ZQr2nIdJeX1EC/hUYGp0AG89Goi
10
+ 2YxfzdxLVlyLOy9FUX1hm4KlWOKnJ5DWJDmngYsQBBI0SKZoujB/ReerB1bCJ6o/
11
+ k2gHPy08qwtns5huz9pgC2BL7vTtGiHtHg6EXRsRcQciDhwIP1TkxROzvTWXuFg3
12
+ 4HjX3zZ/R/Yc+lXH0It0umsKYfphzQyB204oPbSoIKpUFoy0U2dALmtscrR7kt/5
13
+ 2o6sn2gP46fgFJLdDaButVDeSH504uEl0PXGohFwMV6MVIiiJWLsRvoVXaO0Ho5w
14
+ ULlzK9FgfFnhy0YIMdcBfealdMsi2mUkruROMI6MnFh2Tw2ZihyekreONQIDAQAB
15
+ oz8wPTAdBgNVHQ4EFgQU0mmAUizQPzYlq2vxup8aSHxeuKswDwYDVR0TBAgwBgEB
16
+ /wIBADALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQEMBQADggGBACVcnSou40huAkm+
17
+ t/Hz2lQHlMfjsGs57lx4IIJTa8Tf5jbn+G5Us3IVFGQZSnu9EoFy1UiEryQ733u9
18
+ Gbsbjau6nLJzk3DZUb2pQUxBQsZBU4NLlpikTwTvJvbOxuQEq1FTEjFp25Tr52G4
19
+ u83szTo+dD9/+mRwrHt8KjyUF9/I+LMR7YhWGZfS2WFzKhC/qkGshAAAk3xoV7wW
20
+ cHEmaXR9ume//c6uybQ0NvHXbTk30dEwfhbUpvy91XN2KpkdCBjQhohJGf5Eb2qY
21
+ QJJzXmHfJWIfC5beHreYQdJY7wwbdCR8trmxUT8NsXTmYJzcGtwIvQmdhsPXehk7
22
+ goBeVzZs1jv+F1ZIRII58NXRMHxzQpzh5xMKSESFE1KwaBCVWF7k/cSE+QvGBcKx
23
+ 2gw+2CRJ5DS3M9P16iPMUcdBec2MXTSuhBIXUgQGTakO73VskJUSTlukH3O7RfXs
24
+ 2PQq4Dgu3/cKEVMKpdz5Jb42n5M2PaX65c64aaOkCN0D32YKKw==
25
+ -----END CERTIFICATE-----
hf-entrypoint.sh CHANGED
@@ -1,60 +1,43 @@
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
4
- run_as_postgres() {
5
- if id postgres >/dev/null 2>&1; then
6
- if command -v gosu >/dev/null 2>&1; then
7
- gosu postgres "$@"
8
- elif command -v su-exec >/dev/null 2>&1; then
9
- su-exec postgres "$@"
10
- else
11
- su postgres -s /bin/sh -c "$(printf '%q ' "$@")"
12
- fi
13
- else
14
- "$@"
15
- fi
16
- }
17
-
18
  echo "[boot] start redis"
19
  redis-server --bind 127.0.0.1 --port 6379 --daemonize yes
20
 
21
- echo "[boot] init/start postgres"
22
- mkdir -p "${PGDATA}" /tmp
23
- if id postgres >/dev/null 2>&1; then
24
- chown -R postgres:postgres "${PGDATA}" || true
25
- fi
 
26
 
27
- if [ ! -s "${PGDATA}/PG_VERSION" ]; then
28
- run_as_postgres initdb -D "${PGDATA}" >/dev/null
 
 
 
 
29
  fi
30
 
31
- # Place Unix socket under /tmp to avoid missing /run/postgresql in HF runtime.
32
- run_as_postgres pg_ctl -D "${PGDATA}" \
33
- -o "-c listen_addresses=127.0.0.1 -c port=5432 -c unix_socket_directories=/tmp" \
34
- -w start
35
-
36
- # Upsert DB role.
37
- run_as_postgres psql -h 127.0.0.1 -p 5432 -v ON_ERROR_STOP=1 --username postgres --dbname postgres <<SQL
38
- DO \$\$
39
- BEGIN
40
- IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${POSTGRES_USER}') THEN
41
- CREATE ROLE ${POSTGRES_USER} LOGIN PASSWORD '${POSTGRES_PASSWORD}';
42
- ELSE
43
- ALTER ROLE ${POSTGRES_USER} WITH LOGIN PASSWORD '${POSTGRES_PASSWORD}';
44
- END IF;
45
- END
46
- \$\$;
47
- SQL
48
 
49
- # CREATE DATABASE cannot run inside DO block. Check first, then createdb.
50
- DB_EXISTS=$(run_as_postgres psql -h 127.0.0.1 -p 5432 -U postgres -d postgres -tAc \
51
- "SELECT 1 FROM pg_database WHERE datname='${POSTGRES_DB}'")
 
 
 
52
 
53
- if [ "${DB_EXISTS}" != "1" ]; then
54
- run_as_postgres createdb -h 127.0.0.1 -p 5432 -U postgres -O "${POSTGRES_USER}" "${POSTGRES_DB}"
 
55
  fi
56
 
57
- export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}"
58
  export POSTGRES_URL="${DATABASE_URL}"
59
  export DB_URL="${DATABASE_URL}"
60
  export REDIS_URL="${REDIS_URL:-redis://127.0.0.1:6379/0}"
@@ -71,19 +54,19 @@ if [ -z "${ADMIN_PASSWORD:-}" ]; then
71
  fi
72
  export SERVER_HOST="${HOST}"
73
  export SERVER_PORT="${PORT}"
74
- export DATABASE_HOST="${DATABASE_HOST:-127.0.0.1}"
75
- export DATABASE_PORT="${DATABASE_PORT:-5432}"
76
- export DATABASE_USER="${POSTGRES_USER}"
77
- export DATABASE_PASSWORD="${POSTGRES_PASSWORD}"
78
- export DATABASE_DBNAME="${POSTGRES_DB}"
79
- export DATABASE_SSLMODE="${DATABASE_SSLMODE:-disable}"
80
  export REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
81
  export REDIS_PORT="${REDIS_PORT:-6379}"
82
  export REDIS_DB="${REDIS_DB:-0}"
83
  export REDIS_PASSWORD="${REDIS_PASSWORD:-}"
84
  export REDIS_ENABLE_TLS="${REDIS_ENABLE_TLS:-false}"
85
 
86
- echo "[boot] DATABASE_URL=postgresql://${POSTGRES_USER}:******@127.0.0.1:5432/${POSTGRES_DB}"
87
  echo "[boot] REDIS_URL=${REDIS_URL}"
88
  echo "[boot] APP_PORT=${PORT}"
89
  echo "[boot] ADMIN_EMAIL=${ADMIN_EMAIL}"
 
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  echo "[boot] start redis"
5
  redis-server --bind 127.0.0.1 --port 6379 --daemonize yes
6
 
7
+ export DATABASE_HOST="${DATABASE_HOST:-pg-newapi-codeatlantis666.f.aivencloud.com}"
8
+ export DATABASE_PORT="${DATABASE_PORT:-22503}"
9
+ export DATABASE_USER="${DATABASE_USER:-avnadmin}"
10
+ export DATABASE_DBNAME="${DATABASE_DBNAME:-defaultdb}"
11
+ export DATABASE_SSLMODE="${DATABASE_SSLMODE:-require}"
12
+ export DATABASE_SSLROOTCERT="${DATABASE_SSLROOTCERT:-/app/ca.pem}"
13
 
14
+ if [ -z "${SQL_PASSWORD:-}" ]; then
15
+ echo "[error] SQL_PASSWORD is required. Set Space Secret SQL_PASSWORD."
16
+ echo "[error] You can provide either:"
17
+ echo "[error] 1) password only (recommended with DATABASE_USER), or"
18
+ echo "[error] 2) 'username:password' in SQL_PASSWORD."
19
+ exit 1
20
  fi
21
 
22
+ if [ ! -f "${DATABASE_SSLROOTCERT}" ]; then
23
+ echo "[error] CA cert not found at ${DATABASE_SSLROOTCERT}."
24
+ echo "[error] Upload ca.pem and/or set DATABASE_SSLROOTCERT correctly."
25
+ exit 1
26
+ fi
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
+ if [[ "${SQL_PASSWORD}" == *:* ]]; then
29
+ export DATABASE_USER="${SQL_PASSWORD%%:*}"
30
+ export DATABASE_PASSWORD="${SQL_PASSWORD#*:}"
31
+ else
32
+ export DATABASE_PASSWORD="${SQL_PASSWORD}"
33
+ fi
34
 
35
+ DATABASE_QUERY="sslmode=${DATABASE_SSLMODE}&sslrootcert=${DATABASE_SSLROOTCERT}"
36
+ if [ -n "${DATABASE_QUERY_EXTRA:-}" ]; then
37
+ DATABASE_QUERY="${DATABASE_QUERY}&${DATABASE_QUERY_EXTRA}"
38
  fi
39
 
40
+ export DATABASE_URL="postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBNAME}?${DATABASE_QUERY}"
41
  export POSTGRES_URL="${DATABASE_URL}"
42
  export DB_URL="${DATABASE_URL}"
43
  export REDIS_URL="${REDIS_URL:-redis://127.0.0.1:6379/0}"
 
54
  fi
55
  export SERVER_HOST="${HOST}"
56
  export SERVER_PORT="${PORT}"
57
+ export DATABASE_HOST="${DATABASE_HOST}"
58
+ export DATABASE_PORT="${DATABASE_PORT}"
59
+ export DATABASE_USER="${DATABASE_USER}"
60
+ export DATABASE_PASSWORD="${DATABASE_PASSWORD}"
61
+ export DATABASE_DBNAME="${DATABASE_DBNAME}"
62
+ export DATABASE_SSLMODE="${DATABASE_SSLMODE}"
63
  export REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
64
  export REDIS_PORT="${REDIS_PORT:-6379}"
65
  export REDIS_DB="${REDIS_DB:-0}"
66
  export REDIS_PASSWORD="${REDIS_PASSWORD:-}"
67
  export REDIS_ENABLE_TLS="${REDIS_ENABLE_TLS:-false}"
68
 
69
+ echo "[boot] DATABASE_URL=postgresql://${DATABASE_USER}:******@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBNAME}?sslmode=${DATABASE_SSLMODE}&sslrootcert=${DATABASE_SSLROOTCERT}"
70
  echo "[boot] REDIS_URL=${REDIS_URL}"
71
  echo "[boot] APP_PORT=${PORT}"
72
  echo "[boot] ADMIN_EMAIL=${ADMIN_EMAIL}"