Exeprotector/start_api_server.py
2025-10-25 17:49:09 +08:00

156 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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)