"""自动初始化管理员账号 在容器启动时运行,如果管理员账号不存在则自动创建。 """ import os import sys def auto_init(): """自动初始化管理员账号。""" try: # 设置环境 sys.path.insert(0, "/app/api") os.chdir("/app/api") from app_factory import create_app from extensions.ext_database import db from sqlalchemy import text from services.account_service import AccountService, TenantService # 创建应用上下文 socketio_app, flask_app = create_app() with flask_app.app_context(): # 检查是否已有账号 result = db.session.execute(text("SELECT COUNT(*) FROM accounts")) count = result.scalar() if count > 0: print("[auto_init] 管理员账号已存在,跳过初始化") # 确保 dify_setups 表有记录(标记初始化完成) _ensure_setup_complete() return # 获取配置 email = os.environ.get("ADMIN_EMAIL", "taiyi@baodan.com") name = os.environ.get("ADMIN_NAME", "taiyi") password = os.environ.get("ADMIN_PASSWORD", "taiyi1224") workspace_name = os.environ.get("ADMIN_WORKSPACE", "Taiyi's Workspace") print(f"[auto_init] 正在创建管理员账号: {email}") # 创建账号(is_setup=True 跳过注册限制检查) account = AccountService.create_account( email=email, name=name, interface_language="zh-Hans", password=password, is_setup=True, ) # 创建工作空间(is_setup=True 跳过创建限制检查) TenantService.create_owner_tenant_if_not_exist(account, workspace_name, is_setup=True) # 标记初始化完成 _ensure_setup_complete() print(f"[auto_init] 管理员账号创建成功!") print(f"[auto_init] 邮箱: {email}") print(f"[auto_init] 密码: {password}") except Exception as e: print(f"[auto_init] 初始化失败: {e}") import traceback traceback.print_exc() def _ensure_setup_complete(): """确保 dify_setups 表有记录,标记初始化已完成。""" from extensions.ext_database import db from sqlalchemy import text from datetime import datetime result = db.session.execute(text("SELECT COUNT(*) FROM dify_setups")) count = result.scalar() if count == 0: db.session.execute( text("INSERT INTO dify_setups (version, setup_at) VALUES (:version, :setup_at)"), {"version": "1.0.0", "setup_at": datetime.utcnow()} ) db.session.commit() print("[auto_init] 已标记系统初始化完成") if __name__ == "__main__": auto_init()