quick_start.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/usr/bin/env python3
  2. """
  3. 快速启动脚本 - 自动检测可用端口并启动服务器
  4. """
  5. import sys
  6. import os
  7. import socket
  8. # 添加src目录到Python路径
  9. sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
  10. # 加载环境变量
  11. from dotenv import load_dotenv
  12. load_dotenv()
  13. from fastapi import FastAPI
  14. from fastapi.middleware.cors import CORSMiddleware
  15. def check_port(port):
  16. """检查端口是否可用"""
  17. with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  18. try:
  19. s.bind(('localhost', port))
  20. return True
  21. except OSError:
  22. return False
  23. def find_available_port(start_port=8000, max_port=8010):
  24. """查找可用端口"""
  25. for port in range(start_port, max_port + 1):
  26. if check_port(port):
  27. return port
  28. return None
  29. # 创建FastAPI应用
  30. app = FastAPI(
  31. title="SSO认证中心",
  32. version="1.0.0",
  33. description="OAuth2单点登录认证中心",
  34. docs_url="/docs",
  35. redoc_url="/redoc"
  36. )
  37. # 配置CORS
  38. app.add_middleware(
  39. CORSMiddleware,
  40. allow_origins=["*"],
  41. allow_credentials=True,
  42. allow_methods=["*"],
  43. allow_headers=["*"],
  44. )
  45. @app.get("/")
  46. async def root():
  47. """根路径"""
  48. return {
  49. "message": "SSO认证中心",
  50. "version": "1.0.0",
  51. "status": "running",
  52. "docs": "/docs",
  53. "health": "/health"
  54. }
  55. @app.get("/health")
  56. async def health_check():
  57. """健康检查"""
  58. return {
  59. "status": "healthy",
  60. "message": "服务正常运行"
  61. }
  62. @app.get("/test")
  63. async def test_endpoint():
  64. """测试端点"""
  65. return {
  66. "message": "测试成功",
  67. "data": {
  68. "server": "FastAPI",
  69. "python_version": sys.version,
  70. "working_directory": os.getcwd()
  71. }
  72. }
  73. if __name__ == "__main__":
  74. import uvicorn
  75. # 查找可用端口
  76. port = find_available_port()
  77. if port is None:
  78. print("❌ 无法找到可用端口 (8000-8010)")
  79. print("请手动停止占用这些端口的进程")
  80. sys.exit(1)
  81. print("=" * 50)
  82. print("🚀 SSO认证中心测试服务器")
  83. print("=" * 50)
  84. print(f"✅ 找到可用端口: {port}")
  85. print(f"🌐 访问地址: http://localhost:{port}")
  86. print(f"📚 API文档: http://localhost:{port}/docs")
  87. print(f"❤️ 健康检查: http://localhost:{port}/health")
  88. print("=" * 50)
  89. print("按 Ctrl+C 停止服务器")
  90. print()
  91. try:
  92. uvicorn.run(
  93. app,
  94. host="0.0.0.0",
  95. port=port,
  96. log_level="info"
  97. )
  98. except KeyboardInterrupt:
  99. print("\n👋 服务器已停止")
  100. except Exception as e:
  101. print(f"❌ 启动失败: {e}")
  102. sys.exit(1)