Spaces:
Sleeping
Sleeping
File size: 2,998 Bytes
abcd0c2 a29baaf abcd0c2 | 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #!/usr/bin/env bash
# MarkItDown API - Production Startup Script
#
# Environment variable overrides:
# LOG_DIR - directory for persistent log files (default: /app/logs)
# HOST - bind address (default: 0.0.0.0)
# PORT - listen port (default: 7860)
# WORKERS - uvicorn worker count (default: 1)
# LOG_LEVEL - uvicorn log level (default: info)
set -euo pipefail
# ---------------------------------------------------------------------------
# Logging helpers
# ---------------------------------------------------------------------------
LOG_DIR="${LOG_DIR:-/app/logs}"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/startup.log"
_log() {
local level="$1"
shift
local ts
ts="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
local line="[$ts] [$level] $*"
echo "$line"
echo "$line" >> "$LOG_FILE"
}
log_info() { _log "INFO " "$@"; }
log_ok() { _log "OK " "$@"; }
log_warn() { _log "WARN " "$@"; }
log_err() { _log "ERROR" "$@"; }
log_step() { echo ""; _log "STEP " "---- $* ----"; }
# ---------------------------------------------------------------------------
# Print startup banner
# ---------------------------------------------------------------------------
python -c "from banner import print_banner; print_banner()" 2>/dev/null || true
# ---------------------------------------------------------------------------
# Step 1: Verify core Python dependencies
# ---------------------------------------------------------------------------
log_step "1/2 Verifying Python dependencies"
if python -c "import markitdown, fastapi, httpx" 2>/dev/null; then
log_ok "Core dependencies verified."
else
log_err "Missing core dependencies. Ensure requirements.txt has been installed."
exit 1
fi
# ---------------------------------------------------------------------------
# Step 2: Smoke-test imports
# ---------------------------------------------------------------------------
log_step "2/2 Running import smoke test"
python >> "$LOG_FILE" 2>&1 << PYEOF
import sys
try:
import markitdown, fastapi, httpx, pandas
print("[smoke-test] All core imports successful.")
except ImportError as exc:
print(f"[smoke-test] Import error: {exc}")
sys.exit(1)
PYEOF
if [ $? -eq 0 ]; then
log_ok "Import smoke test passed."
else
log_warn "Import smoke test failed. Check $LOG_FILE for details. Continuing startup."
fi
# ---------------------------------------------------------------------------
# Start uvicorn
# ---------------------------------------------------------------------------
log_step "Starting uvicorn"
HOST="${HOST:-0.0.0.0}"
PORT="${PORT:-7860}"
WORKERS="${WORKERS:-1}"
LOG_LEVEL="${LOG_LEVEL:-info}"
log_info "Binding to $HOST:$PORT | workers=$WORKERS | log_level=$LOG_LEVEL"
exec python -m uvicorn api.server:app \
--host "$HOST" \
--port "$PORT" \
--workers "$WORKERS" \
--log-level "$LOG_LEVEL" \
--access-log
|