import os import logging basedir = os.path.abspath(os.path.dirname(__file__)) class Config: SECRET_KEY = os.environ.get("SM_SECRET_KEY", "change-me-in-production") SQLALCHEMY_DATABASE_URI = os.environ.get( "SM_DB_URI", f"sqlite:///{os.path.join(basedir, 'socks_manager.db')}" ) SQLALCHEMY_TRACK_MODIFICATIONS = False # 管理后台认证(在 create_app 时读取,确保 env var 生效) @staticmethod def admin_user(): return os.environ.get("SM_ADMIN_USER", "admin") @staticmethod def admin_password(): return os.environ.get("SM_ADMIN_PASSWORD", "") # 健康检测 HEALTH_CHECK_TIMEOUT = int(os.environ.get("SM_HEALTH_TIMEOUT", "10")) HEALTH_CHECK_INTERVAL = int(os.environ.get("SM_HEALTH_INTERVAL", "300")) # 秒 LOG_LEVEL = os.environ.get("SM_LOG_LEVEL", "INFO") def create_app(config_class=Config): from flask import Flask app = Flask(__name__) app.config.from_object(config_class) # 日志 logging.basicConfig( level=getattr(logging, app.config["LOG_LEVEL"]), format="%(asctime)s [%(levelname)s] %(message)s", ) from extensions import db db.init_app(app) from models import db as _db with app.app_context(): _db.create_all() # Blueprint 注册 from routes import main from routes import api from auth import bp as auth_bp app.register_blueprint(auth_bp) app.register_blueprint(main.bp) app.register_blueprint(api.bp, url_prefix="/api") return app