yj
2025-09-03 f28ac0166536a2a4b68cac685a41ea667f60f7e9
startup.py
New file
@@ -0,0 +1,128 @@
"""
启动脚本 - 处理配置文件和目录初始化
"""
import os
import sys
import json
import shutil
from pathlib import Path
def get_exe_dir():
    """获取exe文件所在目录"""
    if getattr(sys, "frozen", False):
        # 如果是打包后的exe文件
        return os.path.dirname(sys.executable)
    else:
        # 如果是开发环境
        return os.path.dirname(os.path.abspath(__file__))
def ensure_directories():
    """确保必要的目录存在"""
    exe_dir = get_exe_dir()
    # 创建日志目录
    logs_dir = os.path.join(exe_dir, "logs")
    if not os.path.exists(logs_dir):
        os.makedirs(logs_dir)
        print(f"创建日志目录: {logs_dir}")
    return exe_dir
def ensure_config_file():
    """确保配置文件存在"""
    exe_dir = get_exe_dir()
    config_file = os.path.join(exe_dir, "config.json")
    if not os.path.exists(config_file):
        # 如果config.json不存在,尝试复制生产配置模板
        production_config = os.path.join(exe_dir, "config.production.json")
        example_config = os.path.join(exe_dir, "config.example.json")
        if os.path.exists(production_config):
            shutil.copy2(production_config, config_file)
            print(f"复制生产配置文件: {production_config} -> {config_file}")
        elif os.path.exists(example_config):
            shutil.copy2(example_config, config_file)
            print(f"复制示例配置文件: {example_config} -> {config_file}")
        else:
            # 创建默认配置文件
            default_config = {
                "database": {
                    "url": "mysql+pymysql://root:password@localhost:3306/ecloud_dify"
                },
                "redis": {"url": "redis://localhost:6379/0"},
                "ecloud": {
                    "base_url": "http://125.122.152.142:9899",
                    "authorization": "your_ecloud_authorization_token",
                    "w_id": "your_ecloud_w_id",
                },
                "dify": {
                    "base_url": "https://api.dify.ai/v1",
                    "api_key": "your_dify_api_key",
                },
                "server": {"host": "0.0.0.0", "port": 7979, "debug": False},
                "logging": {"level": "INFO", "file": "logs/app.log"},
                "message_processing": {
                    "max_retry_count": 3,
                    "retry_delay": 5,
                    "queue_timeout": 300,
                },
                "customer_service": {"names": ["客服1", "客服2"]},
            }
            with open(config_file, "w", encoding="utf-8") as f:
                json.dump(default_config, f, indent=2, ensure_ascii=False)
            print(f"创建默认配置文件: {config_file}")
    return config_file
def setup_environment():
    """设置运行环境"""
    exe_dir = ensure_directories()
    config_file = ensure_config_file()
    # 设置工作目录为exe所在目录
    os.chdir(exe_dir)
    print(f"设置工作目录: {exe_dir}")
    return exe_dir, config_file
if __name__ == "__main__":
    setup_environment()
    # 导入并启动主应用
    try:
        from main import app
        import uvicorn
        from config import settings
        from loguru import logger
        # 配置日志
        logger.add(
            settings.log_file,
            rotation="1 day",
            retention="7 days",
            level=settings.log_level,
            format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name}:{function}:{line} - {message}",
        )
        logger.info("启动E云管家-DifyAI对接服务")
        # 启动服务
        uvicorn.run(
            app,
            host=settings.server_host,
            port=settings.server_port,
            log_level=settings.log_level.lower(),
        )
    except Exception as e:
        print(f"启动失败: {e}")
        input("按任意键退出...")
        sys.exit(1)