# Chat-Room 配置管理文档 ## 📋 概述 Chat-Room采用YAML格式的配置文件系统,提供灵活的参数配置和管理。系统支持服务器端和客户端独立配置,包含网络设置、功能开关、安全参数、性能调优等各个方面的配置选项。 ## 🏗️ 配置系统架构 ### 配置管理架构图 ```mermaid graph TB subgraph "配置文件层" SERVER_CONFIG[server_config.yaml
服务器配置] CLIENT_CONFIG[client_config.yaml
客户端配置] TEMPLATES[templates/
配置模板] EXAMPLES[examples/
配置示例] end subgraph "配置管理层" CONFIG_MGR[ConfigManager
配置管理器] VALIDATOR[ConfigValidator
配置验证器] LOADER[ConfigLoader
配置加载器] end subgraph "应用层" SERVER[服务器应用] CLIENT[客户端应用] COMPONENTS[各功能组件] end SERVER_CONFIG --> CONFIG_MGR CLIENT_CONFIG --> CONFIG_MGR TEMPLATES --> CONFIG_MGR EXAMPLES --> CONFIG_MGR CONFIG_MGR --> VALIDATOR CONFIG_MGR --> LOADER VALIDATOR --> SERVER LOADER --> CLIENT CONFIG_MGR --> COMPONENTS ``` ### 配置加载流程 ```mermaid flowchart TD START([应用启动]) --> PARSE_ARGS[解析命令行参数] PARSE_ARGS --> FIND_CONFIG[查找配置文件] FIND_CONFIG --> EXISTS{配置文件存在?} EXISTS -->|是| LOAD_CONFIG[加载配置文件] EXISTS -->|否| CREATE_DEFAULT[创建默认配置] LOAD_CONFIG --> PARSE_YAML[解析YAML格式] CREATE_DEFAULT --> PARSE_YAML PARSE_YAML --> VALIDATE[验证配置格式] VALIDATE --> VALID{验证通过?} VALID -->|是| MERGE_DEFAULTS[合并默认值] VALID -->|否| SHOW_ERROR[显示错误信息] SHOW_ERROR --> USE_DEFAULTS[使用默认配置] USE_DEFAULTS --> MERGE_DEFAULTS MERGE_DEFAULTS --> APPLY_CONFIG[应用配置] APPLY_CONFIG --> INIT_COMPONENTS[初始化组件] INIT_COMPONENTS --> READY([配置完成]) ``` ## ⚙️ 服务器配置 ### 完整服务器配置 (config/server_config.yaml) ```yaml # Chat-Room 服务器配置文件 # 版本: 1.0 # 服务器基础配置 server: host: "localhost" port: 8888 max_connections: 100 timeout: 30 debug: false bind_all_interfaces: false # 数据库配置 database: path: "server/data/chatroom.db" backup_enabled: true backup_interval: 3600 # 1小时 backup_retention: 168 # 7天 max_backup_files: 10 connection_pool_size: 10 query_timeout: 30 # 用户管理配置 user_management: registration_enabled: true min_username_length: 3 max_username_length: 20 min_password_length: 6 max_password_length: 50 session_timeout: 3600 # 1小时 max_login_attempts: 5 lockout_duration: 300 # 5分钟 password_hash_rounds: 12 # 聊天功能配置 chat: max_message_length: 2000 max_chat_history: 1000 message_batch_size: 50 default_group_name: "公频" auto_join_default_group: true max_groups_per_user: 50 max_members_per_group: 100 # 文件传输配置 file_transfer: enabled: true max_file_size: 10485760 # 10MB chunk_size: 8192 # 8KB upload_dir: "server/data/files/uploads" temp_dir: "server/data/files/temp" allowed_types: - ".txt" - ".pdf" - ".doc" - ".docx" - ".jpg" - ".jpeg" - ".png" - ".zip" blocked_types: - ".exe" - ".bat" - ".cmd" max_files_per_user: 100 max_files_per_group: 1000 auto_cleanup: true cleanup_interval: 3600 # AI功能配置 ai: enabled: false api_key: "" model: "glm-4-flash" base_url: "https://open.bigmodel.cn/api/paas/v4/" max_tokens: 1000 temperature: 0.7 top_p: 0.9 context_window: 10 response_timeout: 30 max_retries: 3 triggers: at_patterns: ["@AI", "@ai"] keywords: ["AI", "ai", "人工智能"] private_chat: enabled: true group_name_pattern: "private_with_ai" rate_limit: requests_per_minute: 60 requests_per_hour: 1000 # 安全配置 security: enable_rate_limiting: true max_requests_per_minute: 100 max_requests_per_hour: 1000 enable_ip_whitelist: false ip_whitelist: [] enable_ip_blacklist: true ip_blacklist: [] enable_content_filter: true blocked_keywords: [] max_message_rate: 10 # 每分钟最大消息数 # 性能配置 performance: enable_compression: true compression_level: 6 enable_caching: true cache_size: 1000 cache_ttl: 300 # 5分钟 worker_threads: 4 max_queue_size: 1000 # 日志配置 logging: level: "INFO" file: "logs/server/server.log" max_size: 10485760 # 10MB backup_count: 5 format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" categories: database: level: "INFO" file: "logs/server/database.log" ai: level: "INFO" file: "logs/server/ai.log" performance: level: "WARNING" file: "logs/server/performance.log" security: level: "WARNING" file: "logs/server/security.log" # 监控配置 monitoring: enabled: true metrics_interval: 60 # 1分钟 health_check_interval: 30 # 30秒 alert_thresholds: cpu_usage: 80 memory_usage: 80 disk_usage: 90 connection_count: 90 webhook_url: "" # 备份配置 backup: enabled: true schedule: "0 2 * * *" # 每天凌晨2点 retention_days: 30 compress: true remote_backup: enabled: false type: "s3" # s3, ftp, sftp config: {} ``` ## 💻 客户端配置 ### 完整客户端配置 (config/client_config.yaml) ```yaml # Chat-Room 客户端配置文件 # 版本: 1.0 # 客户端基础配置 client: default_host: "localhost" default_port: 8888 auto_connect: false reconnect_enabled: true reconnect_attempts: 3 reconnect_delay: 5 connection_timeout: 10 heartbeat_interval: 30 # 用户界面配置 ui: mode: "tui" # tui 或 simple theme: "default" # default, dark, terminal language: "zh_CN" auto_scroll: true max_chat_history: 1000 show_timestamps: true show_user_status: true show_typing_indicator: true animation_enabled: true sound_enabled: false # TUI界面特定配置 tui: refresh_rate: 10 # FPS mouse_support: true focus_follows_mouse: false show_borders: true show_title: true show_footer: true layout: chat_area_ratio: 0.7 status_area_ratio: 0.3 input_area_height: 3 # 主题配置 themes: default: primary_color: "#0066cc" secondary_color: "#666666" background_color: "#ffffff" text_color: "#000000" accent_color: "#ff6600" dark: primary_color: "#4da6ff" secondary_color: "#cccccc" background_color: "#1a1a1a" text_color: "#ffffff" accent_color: "#ff8533" terminal: primary_color: "#00ff00" secondary_color: "#808080" background_color: "#000000" text_color: "#00ff00" accent_color: "#ffff00" # 文件传输配置 file_transfer: download_dir: "client/Downloads" auto_create_dirs: true overwrite_existing: false confirm_downloads: true confirm_large_files: true large_file_threshold: 5242880 # 5MB max_concurrent_downloads: 3 resume_downloads: true show_progress: true progress_update_interval: 1 # 快捷键配置 keybindings: send_message: "enter" new_line: "shift+enter" command_history_up: "up" command_history_down: "down" auto_complete: "tab" clear_input: "ctrl+u" quit: "ctrl+c" scroll_up: "page_up" scroll_down: "page_down" switch_theme: "f2" toggle_status: "f3" # 通知配置 notifications: enabled: true sound_enabled: false desktop_notifications: true mention_notifications: true private_message_notifications: true file_transfer_notifications: true system_notifications: false # 自动化配置 automation: auto_save_chat_history: true auto_save_interval: 300 # 5分钟 auto_backup_settings: true auto_update_check: true auto_reconnect: true # 隐私配置 privacy: save_chat_history: true encrypt_local_data: false clear_history_on_exit: false anonymous_mode: false hide_typing_status: false # 性能配置 performance: message_buffer_size: 1000 render_optimization: true lazy_loading: true cache_avatars: true compress_images: true max_memory_usage: 100 # MB # 日志配置 logging: level: "INFO" file: "logs/client/client.log" max_size: 5242880 # 5MB backup_count: 3 console_output: false debug_mode: false # 插件配置 plugins: enabled: false plugin_dir: "client/plugins" auto_load: [] disabled: [] # 实验性功能 experimental: enable_beta_features: false features: [] ``` ## 🔧 配置管理器实现 ### 配置管理器 (shared/config_manager.py) ```python class ConfigManager: """统一配置管理器""" def __init__(self, config_path: str, schema_path: str = None): self.config_path = config_path self.schema_path = schema_path self.config = {} self.defaults = {} self.watchers = [] self.last_modified = 0 self.load_config() def load_config(self) -> bool: """加载配置文件""" try: # 检查文件是否存在 if not os.path.exists(self.config_path): self._create_default_config() # 加载YAML配置 with open(self.config_path, 'r', encoding='utf-8') as f: self.config = yaml.safe_load(f) or {} # 验证配置 if self.schema_path: self._validate_config() # 合并默认值 self._merge_defaults() # 更新修改时间 self.last_modified = os.path.getmtime(self.config_path) return True except Exception as e: logger.error(f"配置加载失败: {e}") self._use_defaults() return False def get(self, key: str, default=None): """获取配置值(支持点号分隔的嵌套键)""" keys = key.split('.') value = self.config try: for k in keys: value = value[k] return value except (KeyError, TypeError): return default def set(self, key: str, value): """设置配置值""" keys = key.split('.') config = self.config # 创建嵌套字典结构 for k in keys[:-1]: if k not in config: config[k] = {} config = config[k] # 设置值 config[keys[-1]] = value # 通知监听器 self._notify_watchers(key, value) def save(self) -> bool: """保存配置到文件""" try: # 创建备份 if os.path.exists(self.config_path): backup_path = f"{self.config_path}.backup" shutil.copy2(self.config_path, backup_path) # 保存配置 with open(self.config_path, 'w', encoding='utf-8') as f: yaml.dump(self.config, f, default_flow_style=False, allow_unicode=True, indent=2) return True except Exception as e: logger.error(f"配置保存失败: {e}") return False def watch(self, callback): """监听配置变化""" self.watchers.append(callback) def reload_if_changed(self) -> bool: """如果文件已修改则重新加载""" if not os.path.exists(self.config_path): return False current_modified = os.path.getmtime(self.config_path) if current_modified > self.last_modified: return self.load_config() return False ``` ### 配置验证器 (shared/config_validator.py) ```python class ConfigValidator: """配置验证器""" def __init__(self, schema: dict): self.schema = schema def validate(self, config: dict) -> Tuple[bool, List[str]]: """验证配置""" errors = [] try: # 使用jsonschema验证 from jsonschema import validate, ValidationError validate(instance=config, schema=self.schema) return True, [] except ValidationError as e: errors.append(f"配置验证失败: {e.message}") return False, errors except Exception as e: errors.append(f"配置验证异常: {e}") return False, errors def validate_server_config(self, config: dict) -> Tuple[bool, List[str]]: """验证服务器配置""" errors = [] # 验证端口范围 port = config.get('server', {}).get('port', 8888) if not (1024 <= port <= 65535): errors.append("服务器端口必须在1024-65535范围内") # 验证文件大小限制 max_file_size = config.get('file_transfer', {}).get('max_file_size', 0) if max_file_size > 100 * 1024 * 1024: # 100MB errors.append("文件大小限制不能超过100MB") # 验证AI配置 ai_config = config.get('ai', {}) if ai_config.get('enabled', False) and not ai_config.get('api_key'): errors.append("AI功能已启用但未配置API密钥") return len(errors) == 0, errors ``` ## 🛠️ 配置工具 ### 配置生成工具 (tools/config_generator.py) ```python class ConfigGenerator: """配置文件生成工具""" def generate_server_config(self, output_path: str, **kwargs): """生成服务器配置文件""" config = { 'server': { 'host': kwargs.get('host', 'localhost'), 'port': kwargs.get('port', 8888), 'debug': kwargs.get('debug', False) }, 'database': { 'path': kwargs.get('db_path', 'server/data/chatroom.db') }, 'ai': { 'enabled': kwargs.get('ai_enabled', False), 'api_key': kwargs.get('ai_api_key', '') } } self._save_config(config, output_path) def generate_client_config(self, output_path: str, **kwargs): """生成客户端配置文件""" config = { 'client': { 'default_host': kwargs.get('host', 'localhost'), 'default_port': kwargs.get('port', 8888) }, 'ui': { 'theme': kwargs.get('theme', 'default'), 'mode': kwargs.get('mode', 'tui') } } self._save_config(config, output_path) ``` ### 配置迁移工具 (tools/config_migrator.py) ```python class ConfigMigrator: """配置迁移工具""" def migrate_from_env(self, output_path: str): """从环境变量迁移配置""" config = {} # 服务器配置 if os.getenv('CHATROOM_HOST'): config.setdefault('server', {})['host'] = os.getenv('CHATROOM_HOST') if os.getenv('CHATROOM_PORT'): config.setdefault('server', {})['port'] = int(os.getenv('CHATROOM_PORT')) # AI配置 if os.getenv('ZHIPU_AI_API_KEY'): config.setdefault('ai', {})['api_key'] = os.getenv('ZHIPU_AI_API_KEY') config.setdefault('ai', {})['enabled'] = True self._save_config(config, output_path) print(f"配置已从环境变量迁移到: {output_path}") ``` ## 📚 配置使用指南 ### 初始化配置 ```bash # 生成默认配置文件 python tools/config_generator.py --server python tools/config_generator.py --client # 从环境变量迁移 python tools/config_migrator.py --from-env # 验证配置文件 python tools/config_validator.py config/server_config.yaml ``` ### 常用配置场景 #### 开发环境配置 ```yaml server: debug: true host: "localhost" port: 8888 logging: level: "DEBUG" console_output: true ``` #### 生产环境配置 ```yaml server: debug: false host: "0.0.0.0" port: 8888 max_connections: 1000 security: enable_rate_limiting: true enable_ip_blacklist: true monitoring: enabled: true webhook_url: "https://your-monitoring-webhook" ``` #### AI功能配置 ```yaml ai: enabled: true api_key: "your-zhipu-ai-api-key" model: "glm-4-flash" max_tokens: 1000 temperature: 0.7 ``` 这个配置管理文档提供了完整的配置系统架构、配置文件格式、管理工具和使用指南,帮助开发者理解和管理Chat-Room的配置系统。