c9a99f4fb3
代码修复: - web/agent/agent.py: datetime.utcnow() → datetime.now(timezone.utc) - requirements.txt: 移除 paramiko==3.5.0 (已无活跃引用) - 删除 server/infrastructure/ssh/pool.py (DEPRECATED, 无引用) 连接池三层对齐 (config.py/.env.example/session.py): - DB_POOL_SIZE 100→160, DB_MAX_OVERFLOW 100→120 - 基于 MySQL max_connections=400, install.php 公式 文档修复 (21项): - P0: 硬编码域名/IP替换为配置变量占位符 - P1: 10个过时设计文档加归档标注 (引用旧文件结构) - P2: step-3-webssh报告 paramiko引用修正 - 6份审查报告连接池参数勘误 100/100→160/120 - ECC安全报告 EC5 datetime.utcnow 标记已修复 - docs/README.md 文档索引重写 - docs/memory/mem_nexus_overview.md 移除硬编码凭证 - docs/project/tech-stack-inventory.md paramiko标记已移除 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
架构优化 — 配置分发与部署设计报告
更新: 2026-05-22 — 反映 PHP→API 迁移进度
一、优化目标
- 配置源统一 — MySQL settings 表为唯一动态配置源,.env 仅启动必需
- 主服务器 IP 变更自动化 — Agent config.json 推送 + 热重载
- 全量可配置化 — 无硬编码路径/域名/IP,环境变量驱动部署
二、配置架构
【当前架构 — 已实现】
install.php (部署阶段)
→ 写入 config.php (PHP 前端)
→ 写入 .env (NEXUS_ 前缀, Python 启动必需)
→ 写入 MySQL settings 表 (动态配置)
Python 启动
→ 读 .env (SECRET_KEY, DATABASE_URL, API_KEY — 不可改)
→ load_settings_from_db() → MySQL settings 覆盖可改项
前端运行
→ api.js → JWT 认证 → FastAPI API
→ 不再依赖 PHP Session
配置变更
→ settings.html → POST /api/settings → MySQL
→ Python 重启后 load_settings_from_db() 自动生效
三、已实现改动
3.1 配置统一
| 组件 | 实现 |
|---|---|
server/config.py |
load_settings_from_db() — 启动时从 MySQL settings 表读取 |
server/api/settings.py |
GET/POST /api/settings — 前端读写配置 |
| MySQL settings 表 | key-value 存储: api_key, telegram, thresholds, pool_size |
.env |
NEXUS_ 前缀,启动必需项 (SECRET_KEY, DATABASE_URL) |
不可改配置 (.env only):
- SECRET_KEY, API_KEY, ENCRYPTION_KEY, DATABASE_URL
可改配置 (MySQL 可覆盖):
- system_name/title, pool_size/overflow, redis_url, 告警阈值, Telegram
3.2 配置分发到子服务器
| 组件 | 实现 |
|---|---|
web/agent/config.example.json |
统一 JSON 格式,替代 YAML |
web/agent/install.sh |
Agent 安装脚本 |
3.3 全量可配置化
| 组件 | 实现 |
|---|---|
NEXUS_DEPLOY_PATH |
部署路径,所有脚本读取此变量 |
NEXUS_CORS_ORIGINS |
CORS 域名,逗号分隔 |
deploy/nexus.conf |
模板化 Supervisor 配置 ({{DEPLOY_DIR}}) |
deploy/nginx_*.conf |
模板化 Nginx 配置 ({{SERVER_NAME}}) |
deploy/health_monitor.sh |
从 .env 读取 NEXUS_DEPLOY_DIR |
四、待实现建议
4.1 推送前预览 (rsync dry-run)
设计: 推送对话框点「预览」→ rsync -avzn --stats dry-run → 显示预计传输文件数和大小
4.2 settings 页 tab 化
设计: 当前所有设置堆在一个长页面
[TOTP] [修改密码] [密码预设] [导入导出] [系统配置] [推送配置]
4.3 Agent 自动化安装增强
设计: install.sh 配合 config.json:
- 读取 config.example.json → 提示用户填入 central.url → 生成 config.json
- 不再依赖环境变量
4.4 install.php → install.html 迁移
设计: install.php 是最后残留的 PHP 页面,迁移到纯静态 HTML + FastAPI API 后可移除 PHP-FPM 依赖