Exeprotector/start_api_server.py

156 lines
4.7 KiB
Python
Raw Normal View History

2025-10-25 17:49:09 +08:00
"""
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)