#!/usr/bin/env python3 """ 快速启动脚本 - 自动检测可用端口并启动服务器 """ import sys import os import socket # 添加src目录到Python路径 sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) # 加载环境变量 from dotenv import load_dotenv load_dotenv() from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware def check_port(port): """检查端口是否可用""" with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: try: s.bind(('localhost', port)) return True except OSError: return False def find_available_port(start_port=8000, max_port=8010): """查找可用端口""" for port in range(start_port, max_port + 1): if check_port(port): return port return None # 创建FastAPI应用 app = FastAPI( title="SSO认证中心", version="1.0.0", description="OAuth2单点登录认证中心", docs_url="/docs", redoc_url="/redoc" ) # 配置CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/") async def root(): """根路径""" return { "message": "SSO认证中心", "version": "1.0.0", "status": "running", "docs": "/docs", "health": "/health" } @app.get("/health") async def health_check(): """健康检查""" return { "status": "healthy", "message": "服务正常运行" } @app.get("/test") async def test_endpoint(): """测试端点""" return { "message": "测试成功", "data": { "server": "FastAPI", "python_version": sys.version, "working_directory": os.getcwd() } } if __name__ == "__main__": import uvicorn # 查找可用端口 port = find_available_port() if port is None: print("❌ 无法找到可用端口 (8000-8010)") print("请手动停止占用这些端口的进程") sys.exit(1) print("=" * 50) print("🚀 SSO认证中心测试服务器") print("=" * 50) print(f"✅ 找到可用端口: {port}") print(f"🌐 访问地址: http://localhost:{port}") print(f"📚 API文档: http://localhost:{port}/docs") print(f"❤️ 健康检查: http://localhost:{port}/health") print("=" * 50) print("按 Ctrl+C 停止服务器") print() try: uvicorn.run( app, host="0.0.0.0", port=port, log_level="info" ) except KeyboardInterrupt: print("\n👋 服务器已停止") except Exception as e: print(f"❌ 启动失败: {e}") sys.exit(1)