88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
|
|
"""自动初始化管理员账号
|
|||
|
|
|
|||
|
|
在容器启动时运行,如果管理员账号不存在则自动创建。
|
|||
|
|
"""
|
|||
|
|
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()
|