check_config.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/usr/bin/env python3
  2. """
  3. 配置检查脚本
  4. """
  5. import os
  6. import sys
  7. from urllib.parse import urlparse
  8. def check_database_config():
  9. """检查数据库配置"""
  10. print("🔍 检查数据库配置...")
  11. # 检查.env文件是否存在
  12. if not os.path.exists('.env'):
  13. print("❌ .env文件不存在,请复制.env.example并修改配置")
  14. return False
  15. # 读取环境变量
  16. from dotenv import load_dotenv
  17. load_dotenv()
  18. database_url = os.getenv('DATABASE_URL')
  19. if not database_url:
  20. print("❌ DATABASE_URL未配置")
  21. return False
  22. # 解析数据库URL
  23. try:
  24. parsed = urlparse(database_url)
  25. print(f"✅ 数据库类型: {parsed.scheme}")
  26. print(f"✅ 数据库主机: {parsed.hostname}")
  27. print(f"✅ 数据库端口: {parsed.port}")
  28. print(f"✅ 数据库名称: {parsed.path[1:]}") # 去掉开头的/
  29. print(f"✅ 数据库用户: {parsed.username}")
  30. except Exception as e:
  31. print(f"❌ 数据库URL格式错误: {e}")
  32. return False
  33. return True
  34. def check_required_env():
  35. """检查必需的环境变量"""
  36. print("\n🔍 检查必需的环境变量...")
  37. required_vars = [
  38. 'SECRET_KEY',
  39. 'JWT_SECRET_KEY',
  40. 'DATABASE_URL'
  41. ]
  42. missing_vars = []
  43. for var in required_vars:
  44. value = os.getenv(var)
  45. if not value:
  46. missing_vars.append(var)
  47. else:
  48. print(f"✅ {var}: {'*' * min(len(value), 10)}")
  49. if missing_vars:
  50. print(f"❌ 缺少必需的环境变量: {', '.join(missing_vars)}")
  51. return False
  52. return True
  53. def test_database_connection():
  54. """测试数据库连接"""
  55. print("\n🔍 测试数据库连接...")
  56. try:
  57. import aiomysql
  58. import asyncio
  59. from urllib.parse import urlparse
  60. database_url = os.getenv('DATABASE_URL')
  61. parsed = urlparse(database_url)
  62. async def test_connection():
  63. try:
  64. conn = await aiomysql.connect(
  65. host=parsed.hostname,
  66. port=parsed.port or 3306,
  67. user=parsed.username,
  68. password=parsed.password,
  69. db=parsed.path[1:] if parsed.path else None,
  70. autocommit=True
  71. )
  72. await conn.ensure_closed()
  73. return True
  74. except Exception as e:
  75. print(f"❌ 数据库连接失败: {e}")
  76. return False
  77. result = asyncio.run(test_connection())
  78. if result:
  79. print("✅ 数据库连接成功")
  80. return True
  81. else:
  82. return False
  83. except ImportError:
  84. print("⚠️ aiomysql未安装,跳过数据库连接测试")
  85. return True
  86. except Exception as e:
  87. print(f"❌ 数据库连接测试失败: {e}")
  88. return False
  89. def main():
  90. """主函数"""
  91. print("=" * 50)
  92. print("SSO后端配置检查")
  93. print("=" * 50)
  94. # 加载环境变量
  95. try:
  96. from dotenv import load_dotenv
  97. load_dotenv()
  98. except ImportError:
  99. print("❌ python-dotenv未安装,请先运行: pip install python-dotenv")
  100. sys.exit(1)
  101. checks = [
  102. check_database_config,
  103. check_required_env,
  104. test_database_connection
  105. ]
  106. all_passed = True
  107. for check in checks:
  108. if not check():
  109. all_passed = False
  110. print("\n" + "=" * 50)
  111. if all_passed:
  112. print("🎉 所有检查通过!可以运行初始化脚本了")
  113. print("\n下一步: python scripts/init_db.py")
  114. else:
  115. print("❌ 部分检查失败,请修复配置后重试")
  116. sys.exit(1)
  117. if __name__ == "__main__":
  118. main()