| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/usr/bin/env bash
- set -euo pipefail
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
- cd "$SCRIPT_DIR"
- # Colors
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[0;33m'
- NC='\033[0m'
- log() { echo -e "${GREEN}[bx-backend]${NC} $*"; }
- warn() { echo -e "${YELLOW}[bx-backend]${NC} $*"; }
- err() { echo -e "${RED}[bx-backend]${NC} $*" >&2; }
- # ---- Virtual Env ----
- if [ -d ".venv" ]; then
- log "Activating .venv"
- source .venv/bin/activate
- elif [ -d "venv" ]; then
- log "Activating venv"
- source venv/bin/activate
- else
- warn "No virtual environment found, using system Python"
- fi
- # Resolve python command (prefer python, fallback to python3)
- PYTHON_BIN="$(command -v python 2>/dev/null || true)"
- if [ -z "$PYTHON_BIN" ]; then
- PYTHON_BIN="$(command -v python3 2>/dev/null || true)"
- fi
- if [ -z "$PYTHON_BIN" ]; then
- err "Neither 'python' nor 'python3' command found. Install Python 3.11+ or activate a venv."
- exit 1
- fi
- PYTHON_MAJOR="$("$PYTHON_BIN" -c 'import sys; print(sys.version_info.major)' 2>/dev/null || echo 0)"
- PYTHON_MINOR="$("$PYTHON_BIN" -c 'import sys; print(sys.version_info.minor)' 2>/dev/null || echo 0)"
- if [ "$PYTHON_MAJOR" -lt 3 ] || { [ "$PYTHON_MAJOR" -eq 3 ] && [ "$PYTHON_MINOR" -lt 11 ]; }; then
- err "Python 3.11+ is required, but got: $("$PYTHON_BIN" --version 2>&1)"
- err "Please make sure 'python' or 'python3' points to a compatible version."
- exit 1
- fi
- PYTHON="$PYTHON_BIN"
- log "Using Python: $PYTHON ($($PYTHON --version 2>&1))"
- # ---- Load .env ----
- if [ -f ".env" ]; then
- log "Loading .env"
- set -a
- while IFS='=' read -r key value; do
- [[ -z "$key" || "$key" =~ ^# ]] && continue
- value="${value%\"}"
- value="${value#\"}"
- value="${value%\'}"
- value="${value#\'}"
- export "$key=$value"
- done < .env
- set +a
- fi
- HOST="${APP_HOST:-0.0.0.0}"
- PORT="${APP_PORT:-8011}"
- DEBUG="${DEBUG:-false}"
- log "Starting 报销系统后端服务 on ${HOST}:${PORT} (debug=${DEBUG})"
- # ---- Start Server ----
- if [ "$DEBUG" = "true" ]; then
- $PYTHON -m uvicorn app.main:app --host "$HOST" --port "$PORT" --reload
- else
- $PYTHON -m uvicorn app.main:app --host "$HOST" --port "$PORT"
- fi
|