00d9750662
新服务器无 .env 文件时,get_or_set_password() 自动: 1. 设置默认密码 admin123 2. 写入 .env 文件 3. 控制台打印提示 解决新服务器无法登录的问题。
67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
"""Flask 应用工厂。"""
|
|
import os
|
|
import logging
|
|
from flask import Flask
|
|
from config import Config
|
|
from database import db
|
|
from models import Instance # 触发表创建
|
|
|
|
# ── 全局服务 ───────────────────────────────────────────────────
|
|
from engine.instances import InstanceManager
|
|
from services.user_service import UserService
|
|
from services.backup_service import set_backup_dir
|
|
|
|
|
|
def create_app():
|
|
# 确保密码已设置(首次启动自动设置默认密码)
|
|
from auth import get_or_set_password
|
|
get_or_set_password()
|
|
|
|
app = Flask(__name__)
|
|
app.config.from_object(Config)
|
|
app.config["SECRET_KEY"] = os.environ.get(
|
|
"SM_SECRET_KEY", "sm-dev-key-change-in-prod"
|
|
)
|
|
app.config["SESSION_COOKIE_HTTPONLY"] = True
|
|
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"
|
|
|
|
# 日志
|
|
logging.basicConfig(
|
|
level=getattr(logging, Config.LOG_LEVEL),
|
|
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
)
|
|
|
|
# 数据库
|
|
db.init_app(app)
|
|
app.db = db
|
|
|
|
# 全局服务注册
|
|
with app.app_context():
|
|
db.create_all()
|
|
# 初始化全局 db.app
|
|
from database import db as _db
|
|
_db.app = app
|
|
|
|
# 用户服务
|
|
user_service = UserService()
|
|
user_service.set_db_app(app)
|
|
app.user_service = user_service
|
|
|
|
# 实例管理器
|
|
instance_manager = InstanceManager(user_service, flask_app=app)
|
|
app.instance_manager = instance_manager
|
|
|
|
# 备份目录
|
|
set_backup_dir(Config.BACKUP_DIR)
|
|
|
|
# 注册蓝图
|
|
from auth import bp as auth_bp
|
|
from web.routes import bp as web_bp
|
|
from api.v1 import bp as api_bp
|
|
|
|
app.register_blueprint(auth_bp)
|
|
app.register_blueprint(web_bp)
|
|
app.register_blueprint(api_bp, url_prefix="/api")
|
|
|
|
return app
|