Spaces:
Sleeping
Sleeping
| # 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 | |