"""
|
启动脚本 - 处理配置文件和目录初始化
|
"""
|
|
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)
|