""" API服务器启动脚本 自动从 db_config.json 和 api_config.json 读取配置并启动服务器 """ import os import sys import json def load_config(): """加载配置文件""" print("=" * 60) print("加载配置文件...") print("=" * 60) # 读取数据库配置 if os.path.exists('db_config.json'): with open('db_config.json', 'r', encoding='utf-8') as f: db_config = json.load(f) print("✓ 数据库配置:") print(f" - 主机: {db_config.get('host', 'localhost')}") print(f" - 数据库: {db_config.get('database', 'exeprotector')}") print(f" - 用户: {db_config.get('user', 'root')}") # 设置环境变量 os.environ['DB_HOST'] = db_config.get('host', 'localhost') os.environ['DB_USER'] = db_config.get('user', 'root') os.environ['DB_PASSWORD'] = db_config.get('password', 'taiyi1224') os.environ['DB_NAME'] = db_config.get('database', 'exeprotector') else: print("⚠️ 未找到 db_config.json,使用默认配置") # 读取API配置 if os.path.exists('api_config.json'): with open('api_config.json', 'r', encoding='utf-8') as f: api_config = json.load(f) api_key = api_config.get('api_key', '') if api_key: print("✓ API密钥已加载") os.environ['API_KEY'] = api_key else: print("⚠️ API密钥为空") else: print("⚠️ 未找到 api_config.json") print("=" * 60) print() def test_db_connection(): """测试数据库连接""" print("测试数据库连接...") try: import mysql.connector db_config = { 'host': os.environ.get('DB_HOST', 'localhost'), 'user': os.environ.get('DB_USER', 'root'), 'password': os.environ.get('DB_PASSWORD', 'taiyi1224'), 'database': os.environ.get('DB_NAME', 'exeprotector'), 'connect_timeout': 10 } conn = mysql.connector.connect(**db_config) cursor = conn.cursor() # 检查表 cursor.execute("SHOW TABLES LIKE 'software_products'") if cursor.fetchone(): print("✓ 数据库连接正常") # 显示软件产品 cursor.execute("SELECT id, name FROM software_products") products = cursor.fetchall() if products: print(f"✓ 找到 {len(products)} 个软件产品:") for pid, name in products: print(f" - {name} (ID:{pid})") else: print("⚠️ 数据库中没有软件产品,请先注册") else: print("✗ 数据库表不存在,请先初始化数据库") cursor.close() conn.close() return False cursor.close() conn.close() print() return True except mysql.connector.Error as e: print(f"✗ 数据库连接失败: {e}") print() print("请检查:") print(" 1. MySQL服务是否运行") print(" 2. db_config.json 中的配置是否正确") print(" 3. 数据库是否已创建") return False except ImportError: print("✗ 未安装 mysql-connector-python") print(" 安装: pip install mysql-connector-python") return False def start_server(): """启动API服务器""" print("=" * 60) print("启动API服务器...") print("=" * 60) print() print("监听地址: 0.0.0.0:5100") print("健康检查: http://localhost:5100/api/health") print("验证接口: http://localhost:5100/api/validate") print() print("按 Ctrl+C 停止服务器") print("=" * 60) print() # 导入并运行服务器 from api_server_lite import app app.run(host='0.0.0.0', port=5100, debug=False) if __name__ == '__main__': # 设置UTF-8编码 if sys.platform == 'win32': try: sys.stdout.reconfigure(encoding='utf-8') except: pass print("\n" + "=" * 60) print("API服务器启动工具") print("=" * 60) print() # 加载配置 load_config() # 测试数据库 if not test_db_connection(): print("=" * 60) print("数据库连接失败,无法启动服务器") print("=" * 60) sys.exit(1) # 启动服务器 try: start_server() except KeyboardInterrupt: print("\n\n服务器已停止") except Exception as e: print(f"\n✗ 启动失败: {e}") import traceback traceback.print_exc() sys.exit(1)