baodan/scripts/setup/auto_init.py
2026-07-23 08:52:59 +08:00

88 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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