cacodex commited on
Commit
7a1a481
·
verified ·
1 Parent(s): 0961600

Update hf-entrypoint.sh

Browse files
Files changed (1) hide show
  1. hf-entrypoint.sh +176 -174
hf-entrypoint.sh CHANGED
@@ -1,174 +1,176 @@
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:-sub2api}"
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
- if command -v psql >/dev/null 2>&1; then
36
- export PGHOST="${DATABASE_HOST}"
37
- export PGPORT="${DATABASE_PORT}"
38
- export PGUSER="${DATABASE_USER}"
39
- export PGPASSWORD="${DATABASE_PASSWORD}"
40
- export PGSSLMODE="${DATABASE_SSLMODE}"
41
- export PGSSLROOTCERT="${DATABASE_SSLROOTCERT}"
42
-
43
- if ! psql "dbname=postgres" -tAc "SELECT 1" >/dev/null 2>&1; then
44
- echo "[boot] 'postgres' database missing or inaccessible, trying to create it..."
45
- EXISTS_IN_TARGET=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT 1 FROM pg_database WHERE datname='postgres'" 2>/dev/null || true)
46
- if [ "${EXISTS_IN_TARGET}" != "1" ]; then
47
- if psql "dbname=${DATABASE_DBNAME}" -v ON_ERROR_STOP=1 -c "CREATE DATABASE postgres" >/dev/null 2>&1; then
48
- echo "[boot] created database: postgres"
49
- else
50
- echo "[warn] failed to create database 'postgres'. Auto setup may fail if upstream still requires dbname=postgres."
51
- fi
52
- else
53
- echo "[boot] database 'postgres' already exists"
54
- fi
55
- fi
56
- fi
57
-
58
- # sub2api AutoSetup currently uses a hard 60s migration context.
59
- # Pre-apply selected heavy migrations when needed to reduce timeout risk.
60
- is_true() {
61
- case "${1:-}" in
62
- 1|t|T|true|TRUE|yes|YES|y|Y|on|ON) return 0 ;;
63
- *) return 1 ;;
64
- esac
65
- }
66
-
67
- migration_applied() {
68
- local mig_name="$1"
69
- local out=""
70
- if ! is_true "${SCHEMA_MIGRATIONS_EXISTS:-}"; then
71
- echo "0"
72
- return 0
73
- fi
74
- out=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT 1 FROM schema_migrations WHERE filename='${mig_name}' LIMIT 1" 2>/dev/null | tr -d '[:space:]' || true)
75
- if [ "${out}" = "1" ]; then
76
- echo "1"
77
- else
78
- echo "0"
79
- fi
80
- }
81
-
82
- preapply_migration() {
83
- local mig_name="$1"
84
- local mig_url="$2"
85
- local mig_sql="/tmp/${mig_name}"
86
- if curl -fsSL "${mig_url}" -o "${mig_sql}" >/dev/null 2>&1; then
87
- echo "[boot] pre-applying migration ${mig_name} ..."
88
- if PGOPTIONS="-c statement_timeout=0 -c lock_timeout=0" psql "dbname=${DATABASE_DBNAME}" -v ON_ERROR_STOP=1 -f "${mig_sql}" >/dev/null 2>&1; then
89
- echo "[boot] pre-apply ${mig_name} done"
90
- rm -f "${mig_sql}" || true
91
- return 0
92
- fi
93
- echo "[warn] pre-apply ${mig_name} failed; AutoSetup will continue with built-in migration flow"
94
- rm -f "${mig_sql}" || true
95
- return 1
96
- fi
97
- echo "[warn] failed to download migration ${mig_name} from ${mig_url}"
98
- return 1
99
- }
100
-
101
- if command -v psql >/dev/null 2>&1 && command -v curl >/dev/null 2>&1; then
102
- SCHEMA_MIGRATIONS_EXISTS=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT to_regclass('public.schema_migrations') IS NOT NULL" 2>/dev/null | tr -d '[:space:]' || true)
103
- OPS_CORE_EXISTS=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT to_regclass('public.ops_error_logs') IS NOT NULL" 2>/dev/null | tr -d '[:space:]' || true)
104
-
105
- MIG_033_APPLIED="$(migration_applied "033_ops_monitoring_vnext.sql")"
106
- MIG_062_APPLIED="$(migration_applied "062_add_scheduler_and_usage_composite_indexes_notx.sql")"
107
- MIG_065_APPLIED="$(migration_applied "065_add_search_trgm_indexes.sql")"
108
-
109
- if [ "${MIG_033_APPLIED}" != "1" ]; then
110
- # If ops core tables already exist, avoid re-running destructive 033 pre-apply.
111
- if is_true "${OPS_CORE_EXISTS}"; then
112
- echo "[boot] skip pre-apply 033: ops schema already present"
113
- else
114
- preapply_migration \
115
- "033_ops_monitoring_vnext.sql" \
116
- "${MIG_033_URL:-https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/backend/migrations/033_ops_monitoring_vnext.sql}" || true
117
- fi
118
- fi
119
-
120
- if [ "${MIG_062_APPLIED}" != "1" ]; then
121
- preapply_migration \
122
- "062_add_scheduler_and_usage_composite_indexes_notx.sql" \
123
- "${MIG_062_URL:-https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/backend/migrations/062_add_scheduler_and_usage_composite_indexes_notx.sql}" || true
124
- fi
125
-
126
- if [ "${MIG_065_APPLIED}" != "1" ]; then
127
- preapply_migration \
128
- "065_add_search_trgm_indexes.sql" \
129
- "${MIG_065_URL:-https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/backend/migrations/065_add_search_trgm_indexes.sql}" || true
130
- fi
131
- fi
132
-
133
- DATABASE_QUERY="sslmode=${DATABASE_SSLMODE}&sslrootcert=${DATABASE_SSLROOTCERT}"
134
- if [ -n "${DATABASE_QUERY_EXTRA:-}" ]; then
135
- DATABASE_QUERY="${DATABASE_QUERY}&${DATABASE_QUERY_EXTRA}"
136
- fi
137
-
138
- export DATABASE_URL="postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBNAME}?${DATABASE_QUERY}"
139
- export POSTGRES_URL="${DATABASE_URL}"
140
- export DB_URL="${DATABASE_URL}"
141
- export REDIS_URL="${REDIS_URL:-redis://127.0.0.1:6379/0}"
142
- export PORT="${PORT:-8080}"
143
- export HOST="${HOST:-0.0.0.0}"
144
- export AUTO_SETUP="${AUTO_SETUP:-true}"
145
- export ADMIN_EMAIL="${ADMIN_EMAIL:-admin@sub2api.com}"
146
- if [ -n "${SUB2API_ADMIN_PASSWORD:-}" ] && [ -z "${ADMIN_PASSWORD:-}" ]; then
147
- export ADMIN_PASSWORD="${SUB2API_ADMIN_PASSWORD}"
148
- fi
149
- if [ -z "${ADMIN_PASSWORD:-}" ]; then
150
- echo "[error] ADMIN_PASSWORD is required. Set Space Secret ADMIN_PASSWORD (or SUB2API_ADMIN_PASSWORD)."
151
- exit 1
152
- fi
153
- export SERVER_HOST="${HOST}"
154
- export SERVER_PORT="${PORT}"
155
- export DATABASE_HOST="${DATABASE_HOST}"
156
- export DATABASE_PORT="${DATABASE_PORT}"
157
- export DATABASE_USER="${DATABASE_USER}"
158
- export DATABASE_PASSWORD="${DATABASE_PASSWORD}"
159
- export DATABASE_DBNAME="${DATABASE_DBNAME}"
160
- export DATABASE_SSLMODE="${DATABASE_SSLMODE}"
161
- export REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
162
- export REDIS_PORT="${REDIS_PORT:-6379}"
163
- export REDIS_DB="${REDIS_DB:-0}"
164
- export REDIS_PASSWORD="${REDIS_PASSWORD:-}"
165
- export REDIS_ENABLE_TLS="${REDIS_ENABLE_TLS:-false}"
166
-
167
- echo "[boot] DATABASE_URL=postgresql://${DATABASE_USER}:******@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBNAME}?sslmode=${DATABASE_SSLMODE}&sslrootcert=${DATABASE_SSLROOTCERT}"
168
- echo "[boot] REDIS_URL=${REDIS_URL}"
169
- echo "[boot] APP_PORT=${PORT}"
170
- echo "[boot] ADMIN_EMAIL=${ADMIN_EMAIL}"
171
-
172
- # Start sub2api with the original entrypoint discovered from the base image.
173
- mkdir -p /app/data
174
- exec /app/sub2api
 
 
 
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:-sub2api}"
11
+ export DATABASE_SSLMODE="${DATABASE_SSLMODE:-require}"
12
+ export DATABASE_SSLROOTCERT="${DATABASE_SSLROOTCERT:-/app/ca.pem}"
13
+
14
+ export DB_MAX_OPEN_CONNS="${DB_MAX_OPEN_CONNS:-10}"
15
+
16
+ if [ -z "${SQL_PASSWORD:-}" ]; then
17
+ echo "[error] SQL_PASSWORD is required. Set Space Secret SQL_PASSWORD."
18
+ echo "[error] You can provide either:"
19
+ echo "[error] 1) password only (recommended with DATABASE_USER), or"
20
+ echo "[error] 2) 'username:password' in SQL_PASSWORD."
21
+ exit 1
22
+ fi
23
+
24
+ if [ ! -f "${DATABASE_SSLROOTCERT}" ]; then
25
+ echo "[error] CA cert not found at ${DATABASE_SSLROOTCERT}."
26
+ echo "[error] Upload ca.pem and/or set DATABASE_SSLROOTCERT correctly."
27
+ exit 1
28
+ fi
29
+
30
+ if [[ "${SQL_PASSWORD}" == *:* ]]; then
31
+ export DATABASE_USER="${SQL_PASSWORD%%:*}"
32
+ export DATABASE_PASSWORD="${SQL_PASSWORD#*:}"
33
+ else
34
+ export DATABASE_PASSWORD="${SQL_PASSWORD}"
35
+ fi
36
+
37
+ if command -v psql >/dev/null 2>&1; then
38
+ export PGHOST="${DATABASE_HOST}"
39
+ export PGPORT="${DATABASE_PORT}"
40
+ export PGUSER="${DATABASE_USER}"
41
+ export PGPASSWORD="${DATABASE_PASSWORD}"
42
+ export PGSSLMODE="${DATABASE_SSLMODE}"
43
+ export PGSSLROOTCERT="${DATABASE_SSLROOTCERT}"
44
+
45
+ if ! psql "dbname=postgres" -tAc "SELECT 1" >/dev/null 2>&1; then
46
+ echo "[boot] 'postgres' database missing or inaccessible, trying to create it..."
47
+ EXISTS_IN_TARGET=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT 1 FROM pg_database WHERE datname='postgres'" 2>/dev/null || true)
48
+ if [ "${EXISTS_IN_TARGET}" != "1" ]; then
49
+ if psql "dbname=${DATABASE_DBNAME}" -v ON_ERROR_STOP=1 -c "CREATE DATABASE postgres" >/dev/null 2>&1; then
50
+ echo "[boot] created database: postgres"
51
+ else
52
+ echo "[warn] failed to create database 'postgres'. Auto setup may fail if upstream still requires dbname=postgres."
53
+ fi
54
+ else
55
+ echo "[boot] database 'postgres' already exists"
56
+ fi
57
+ fi
58
+ fi
59
+
60
+ # sub2api AutoSetup currently uses a hard 60s migration context.
61
+ # Pre-apply selected heavy migrations when needed to reduce timeout risk.
62
+ is_true() {
63
+ case "${1:-}" in
64
+ 1|t|T|true|TRUE|yes|YES|y|Y|on|ON) return 0 ;;
65
+ *) return 1 ;;
66
+ esac
67
+ }
68
+
69
+ migration_applied() {
70
+ local mig_name="$1"
71
+ local out=""
72
+ if ! is_true "${SCHEMA_MIGRATIONS_EXISTS:-}"; then
73
+ echo "0"
74
+ return 0
75
+ fi
76
+ out=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT 1 FROM schema_migrations WHERE filename='${mig_name}' LIMIT 1" 2>/dev/null | tr -d '[:space:]' || true)
77
+ if [ "${out}" = "1" ]; then
78
+ echo "1"
79
+ else
80
+ echo "0"
81
+ fi
82
+ }
83
+
84
+ preapply_migration() {
85
+ local mig_name="$1"
86
+ local mig_url="$2"
87
+ local mig_sql="/tmp/${mig_name}"
88
+ if curl -fsSL "${mig_url}" -o "${mig_sql}" >/dev/null 2>&1; then
89
+ echo "[boot] pre-applying migration ${mig_name} ..."
90
+ if PGOPTIONS="-c statement_timeout=0 -c lock_timeout=0" psql "dbname=${DATABASE_DBNAME}" -v ON_ERROR_STOP=1 -f "${mig_sql}" >/dev/null 2>&1; then
91
+ echo "[boot] pre-apply ${mig_name} done"
92
+ rm -f "${mig_sql}" || true
93
+ return 0
94
+ fi
95
+ echo "[warn] pre-apply ${mig_name} failed; AutoSetup will continue with built-in migration flow"
96
+ rm -f "${mig_sql}" || true
97
+ return 1
98
+ fi
99
+ echo "[warn] failed to download migration ${mig_name} from ${mig_url}"
100
+ return 1
101
+ }
102
+
103
+ if command -v psql >/dev/null 2>&1 && command -v curl >/dev/null 2>&1; then
104
+ SCHEMA_MIGRATIONS_EXISTS=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT to_regclass('public.schema_migrations') IS NOT NULL" 2>/dev/null | tr -d '[:space:]' || true)
105
+ OPS_CORE_EXISTS=$(psql "dbname=${DATABASE_DBNAME}" -tAc "SELECT to_regclass('public.ops_error_logs') IS NOT NULL" 2>/dev/null | tr -d '[:space:]' || true)
106
+
107
+ MIG_033_APPLIED="$(migration_applied "033_ops_monitoring_vnext.sql")"
108
+ MIG_062_APPLIED="$(migration_applied "062_add_scheduler_and_usage_composite_indexes_notx.sql")"
109
+ MIG_065_APPLIED="$(migration_applied "065_add_search_trgm_indexes.sql")"
110
+
111
+ if [ "${MIG_033_APPLIED}" != "1" ]; then
112
+ # If ops core tables already exist, avoid re-running destructive 033 pre-apply.
113
+ if is_true "${OPS_CORE_EXISTS}"; then
114
+ echo "[boot] skip pre-apply 033: ops schema already present"
115
+ else
116
+ preapply_migration \
117
+ "033_ops_monitoring_vnext.sql" \
118
+ "${MIG_033_URL:-https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/backend/migrations/033_ops_monitoring_vnext.sql}" || true
119
+ fi
120
+ fi
121
+
122
+ if [ "${MIG_062_APPLIED}" != "1" ]; then
123
+ preapply_migration \
124
+ "062_add_scheduler_and_usage_composite_indexes_notx.sql" \
125
+ "${MIG_062_URL:-https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/backend/migrations/062_add_scheduler_and_usage_composite_indexes_notx.sql}" || true
126
+ fi
127
+
128
+ if [ "${MIG_065_APPLIED}" != "1" ]; then
129
+ preapply_migration \
130
+ "065_add_search_trgm_indexes.sql" \
131
+ "${MIG_065_URL:-https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/backend/migrations/065_add_search_trgm_indexes.sql}" || true
132
+ fi
133
+ fi
134
+
135
+ DATABASE_QUERY="sslmode=${DATABASE_SSLMODE}&sslrootcert=${DATABASE_SSLROOTCERT}"
136
+ if [ -n "${DATABASE_QUERY_EXTRA:-}" ]; then
137
+ DATABASE_QUERY="${DATABASE_QUERY}&${DATABASE_QUERY_EXTRA}"
138
+ fi
139
+
140
+ export DATABASE_URL="postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBNAME}?${DATABASE_QUERY}"
141
+ export POSTGRES_URL="${DATABASE_URL}"
142
+ export DB_URL="${DATABASE_URL}"
143
+ export REDIS_URL="${REDIS_URL:-redis://127.0.0.1:6379/0}"
144
+ export PORT="${PORT:-8080}"
145
+ export HOST="${HOST:-0.0.0.0}"
146
+ export AUTO_SETUP="${AUTO_SETUP:-true}"
147
+ export ADMIN_EMAIL="${ADMIN_EMAIL:-admin@sub2api.com}"
148
+ if [ -n "${SUB2API_ADMIN_PASSWORD:-}" ] && [ -z "${ADMIN_PASSWORD:-}" ]; then
149
+ export ADMIN_PASSWORD="${SUB2API_ADMIN_PASSWORD}"
150
+ fi
151
+ if [ -z "${ADMIN_PASSWORD:-}" ]; then
152
+ echo "[error] ADMIN_PASSWORD is required. Set Space Secret ADMIN_PASSWORD (or SUB2API_ADMIN_PASSWORD)."
153
+ exit 1
154
+ fi
155
+ export SERVER_HOST="${HOST}"
156
+ export SERVER_PORT="${PORT}"
157
+ export DATABASE_HOST="${DATABASE_HOST}"
158
+ export DATABASE_PORT="${DATABASE_PORT}"
159
+ export DATABASE_USER="${DATABASE_USER}"
160
+ export DATABASE_PASSWORD="${DATABASE_PASSWORD}"
161
+ export DATABASE_DBNAME="${DATABASE_DBNAME}"
162
+ export DATABASE_SSLMODE="${DATABASE_SSLMODE}"
163
+ export REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
164
+ export REDIS_PORT="${REDIS_PORT:-6379}"
165
+ export REDIS_DB="${REDIS_DB:-0}"
166
+ export REDIS_PASSWORD="${REDIS_PASSWORD:-}"
167
+ export REDIS_ENABLE_TLS="${REDIS_ENABLE_TLS:-false}"
168
+
169
+ echo "[boot] DATABASE_URL=postgresql://${DATABASE_USER}:******@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBNAME}?sslmode=${DATABASE_SSLMODE}&sslrootcert=${DATABASE_SSLROOTCERT}"
170
+ echo "[boot] REDIS_URL=${REDIS_URL}"
171
+ echo "[boot] APP_PORT=${PORT}"
172
+ echo "[boot] ADMIN_EMAIL=${ADMIN_EMAIL}"
173
+
174
+ # Start sub2api with the original entrypoint discovered from the base image.
175
+ mkdir -p /app/data
176
+ exec /app/sub2api