cacodex commited on
Commit
5e86ca8
·
verified ·
1 Parent(s): 1effbe7

Upload 5 files

Browse files
Files changed (5) hide show
  1. .gitattributes +35 -35
  2. Dockerfile +55 -0
  3. README.md +11 -10
  4. ca.pem +25 -0
  5. hf-entrypoint.sh +174 -0
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
Dockerfile ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM weishaw/sub2api:latest
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 \
9
+ bash \
10
+ ca-certificates \
11
+ netcat-openbsd \
12
+ redis \
13
+ postgresql15-client \
14
+ su-exec; \
15
+ elif command -v apt-get >/dev/null 2>&1; then \
16
+ apt-get update && apt-get install -y --no-install-recommends \
17
+ bash \
18
+ ca-certificates \
19
+ netcat-openbsd \
20
+ redis-server \
21
+ postgresql-client \
22
+ gosu \
23
+ && rm -rf /var/lib/apt/lists/*; \
24
+ else \
25
+ echo "No supported package manager found in base image"; \
26
+ exit 1; \
27
+ fi
28
+
29
+ ENV PORT=8080 \
30
+ HOST=0.0.0.0 \
31
+ AUTO_SETUP=true \
32
+ ADMIN_EMAIL=admin@sub2api.com \
33
+ SERVER_HOST=0.0.0.0 \
34
+ SERVER_PORT=8080 \
35
+ DATABASE_HOST=pg-newapi-codeatlantis666.f.aivencloud.com \
36
+ DATABASE_PORT=22503 \
37
+ DATABASE_USER=avnadmin \
38
+ DATABASE_PASSWORD= \
39
+ DATABASE_DBNAME=sub2api \
40
+ DATABASE_SSLMODE=require \
41
+ DATABASE_SSLROOTCERT=/app/ca.pem \
42
+ REDIS_HOST=127.0.0.1 \
43
+ REDIS_PORT=6379 \
44
+ REDIS_DB=0 \
45
+ REDIS_PASSWORD="" \
46
+ REDIS_ENABLE_TLS=false \
47
+ REDIS_URL=redis://127.0.0.1:6379/0
48
+
49
+ COPY hf-entrypoint.sh /usr/local/bin/hf-entrypoint.sh
50
+ COPY ca.pem /app/ca.pem
51
+ RUN sed -i 's/\r$//' /usr/local/bin/hf-entrypoint.sh \
52
+ && chmod +x /usr/local/bin/hf-entrypoint.sh
53
+
54
+ EXPOSE 8080
55
+ ENTRYPOINT ["/usr/local/bin/hf-entrypoint.sh"]
README.md CHANGED
@@ -1,10 +1,11 @@
1
- ---
2
- title: Sub2api
3
- emoji: 👁
4
- colorFrom: gray
5
- colorTo: green
6
- sdk: docker
7
- pinned: false
8
- ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
+ ---
2
+ title: Sub2api
3
+ emoji: 🚀
4
+ colorFrom: red
5
+ colorTo: green
6
+ sdk: docker
7
+ pinned: false
8
+ app_port: 8080
9
+ ---
10
+
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
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 ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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