data-extract / start.sh
validops-east-1's picture
small changes
a29baaf
Raw
History Blame Contribute Delete
3 kB
#!/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