import os from .base import Config class ProductionConfig(Config): """ 生产环境配置 """ DEBUG = False TESTING = False def __init__(self): super().__init__() # 生产环境必须设置的关键配置检查 required_configs = [ ('SECRET_KEY', self.SECRET_KEY), ('LLM_API_KEY', self.LLM_API_KEY), ('WX_APPID', self.WX_APPID), ('WX_SECRET', self.WX_SECRET), ('SQLALCHEMY_DATABASE_URI', self.SQLALCHEMY_DATABASE_URI) ] for name, value in required_configs: if not value: raise ValueError(f"生产环境必须设置{name}环境变量") # 生产环境CORS配置检查(在父类中已经设置) if not self.CORS_ORIGINS or self.CORS_ORIGINS == ['']: raise ValueError("生产环境必须设置CORS_ORIGINS环境变量,指定允许的域名") # 生产环境日志配置 LOG_LEVEL = 'WARNING' LOG_FILE = 'logs/production.log' # 生产环境缓存配置 CACHE_TYPE = 'redis' CACHE_REDIS_URL = os.environ.get('REDIS_URL') CACHE_DEFAULT_TIMEOUT = 3600 # 1小时 # 生产环境安全配置 WTF_CSRF_ENABLED = True WTF_CSRF_TIME_LIMIT = 3600 # 生产环境会话配置 SESSION_LIFETIME_HOURS = 168 # 7天 # 生产环境文件上传配置 MAX_CONTENT_LENGTH = 8 * 1024 * 1024 # 8MB UPLOAD_FOLDER = 'uploads/production' # 生产环境跨域配置(需要设置具体的域名) CORS_ORIGINS = os.environ.get('CORS_ORIGINS', '').split(',') if not CORS_ORIGINS or CORS_ORIGINS == ['']: # 生产环境必须设置CORS域名 raise ValueError("生产环境必须设置CORS_ORIGINS环境变量,指定允许的域名") # 生产环境性能配置 SQLALCHEMY_ENGINE_OPTIONS = { 'pool_pre_ping': True, 'pool_recycle': 300, 'pool_size': 20, 'max_overflow': 30, } @staticmethod def init_app(app): Config.init_app(app) # 生产环境特定初始化 import logging app.logger.setLevel(logging.WARNING) # 生产环境错误处理 if not app.debug and not app.testing: import logging from logging.handlers import SMTPHandler # 邮件错误报告(如果配置了邮件服务器) mail_handler = SMTPHandler( mailhost=(os.environ.get('MAIL_SERVER', 'localhost'), int(os.environ.get('MAIL_PORT', 25))), fromaddr=os.environ.get('MAIL_FROM', 'noreply@example.com'), toaddrs=os.environ.get('ADMIN_EMAIL', '').split(','), subject='应用错误报告' ) mail_handler.setLevel(logging.ERROR) app.logger.addHandler(mail_handler) # 获取版本信息 try: from src.flask_prompt_master import __version__ version_info = f"版本: {__version__}" except ImportError: version_info = "版本: 未知" app.logger.info(f'生产环境启动 - {version_info}')