#!/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