| #!/bin/sh |
| set -e |
|
|
| if [ -z "$MIDDLEWARE_ZIP_URL" ]; then |
| echo "error: MIDDLEWARE_ZIP_URL is required" >&2 |
| exit 1 |
| fi |
|
|
| EXTRACT_ROOT="${MIDDLEWARE_EXTRACT_DIR:-/opt/middleware}" |
| TMP_ZIP="/tmp/middleware-bundle.zip" |
|
|
| rm -rf "${EXTRACT_ROOT:?}" |
| mkdir -p "$EXTRACT_ROOT" |
|
|
| echo "downloading middleware zip..." |
| curl -fsSL "$MIDDLEWARE_ZIP_URL" -o "$TMP_ZIP" |
|
|
| echo "extracting..." |
| unzip -oq "$TMP_ZIP" -d "$EXTRACT_ROOT" |
| rm -f "$TMP_ZIP" |
|
|
| find_app_root() { |
| base="$1" |
| if [ -f "$base/requirements.txt" ] && [ -d "$base/app" ]; then |
| echo "$base" |
| return 0 |
| fi |
| |
| mw="$base/middleware" |
| if [ -d "$mw" ] && [ -f "$mw/requirements.txt" ] && [ -d "$mw/app" ]; then |
| echo "$mw" |
| return 0 |
| fi |
| count=0 |
| child="" |
| for d in "$base"/*; do |
| [ -d "$d" ] || continue |
| count=$((count + 1)) |
| child="$d" |
| done |
| if [ "$count" -eq 1 ] && [ -f "$child/requirements.txt" ] && [ -d "$child/app" ]; then |
| echo "$child" |
| return 0 |
| fi |
| echo "error: could not locate app/ and requirements.txt under $base" >&2 |
| exit 1 |
| } |
|
|
| APP_ROOT=$(find_app_root "$EXTRACT_ROOT") |
| export PYTHONPATH="$APP_ROOT" |
| cd "$APP_ROOT" |
|
|
| echo "installing dependencies..." |
| pip install --no-cache-dir -r requirements.txt |
|
|
| echo "starting uvicorn..." |
| exec uvicorn app.main:app --host 0.0.0.0 --port "${PORT}" |
|
|