File size: 1,386 Bytes
c54281d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env sh
set -eu


APP_HOST=${APP_HOST:-0.0.0.0}
APP_PORT=${APP_PORT:-7860}
CHROMA_HOST=${CHROMA_HOST:-127.0.0.1}
CHROMA_PORT=${CHROMA_PORT:-8001}
DATA_DIR=${CHROMA_DATA_DIR:-/home/user/app/data}
UVICORN_LOG_LEVEL=${UVICORN_LOG_LEVEL:-info}


echo "Runtime config:"
echo " APP_HOST=$APP_HOST"
echo " APP_PORT=$APP_PORT"
echo " CHROMA_HOST=$CHROMA_HOST"
echo " CHROMA_PORT=$CHROMA_PORT"
echo " DATA_DIR=$DATA_DIR"
echo " UVICORN_LOG_LEVEL=$UVICORN_LOG_LEVEL"


mkdir -p "$DATA_DIR"


echo "Starting ChromaDB on ${CHROMA_HOST}:${CHROMA_PORT} (data: $DATA_DIR)"
chroma run --host "$CHROMA_HOST" --port "$CHROMA_PORT" --path "$DATA_DIR" &
CHROMA_PID=$!


echo "Waiting for ChromaDB..."
python - <<'PY'
import os, socket, time, sys
h = os.environ.get('CHROMA_HOST','127.0.0.1')
p = int(os.environ.get('CHROMA_PORT','8001'))
for i in range(120):
    try:
        with socket.create_connection((h,p), timeout=0.5):
            print(f"Chroma ready after {i*0.5:.1f}s")
            sys.exit(0)
    except OSError:
        time.sleep(0.5)
print('Timeout waiting for Chroma', file=sys.stderr)
sys.exit(1)
PY

trap 'echo "Stopping..."; kill -TERM "$CHROMA_PID" 2>/dev/null || true; wait "$CHROMA_PID" 2>/dev/null || true' INT TERM

echo "Starting FastAPI on ${APP_HOST}:${APP_PORT}"
exec uvicorn app:app --host "$APP_HOST" --port "$APP_PORT" --log-level "$UVICORN_LOG_LEVEL" --access-log