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()
|