diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 00000000..1aa5a47e --- /dev/null +++ b/.cursorrules @@ -0,0 +1,159 @@ +# Nexus 6.0 — Cursor Rules + +## 项目概述 +Nexus 是一个 2000+ 服务器运维管理平台。技术栈:FastAPI + Async SQLAlchemy + Redis + WebSocket + Telegram (后端),Vue 3 + Vuetify 4 + TypeScript SPA (前端,14页面)。项目 ~99% 完成。 + +## 基本信息 +- 仓库: http://66.154.115.8:3000/admin/Nexus.git +- 本地路径: C:\Users\uzuma\Desktop\svn\Nexus +- 生产域名: https://api.synaglobal.vip +- 生产 IP: 47.254.123.106,后端端口 8600 +- 部署路径: /www/wwwroot/api.synaglobal.vip/ +- 管理员: admin / Nexus@2026 +- 数据库: MySQL nexus/Nexus@2026!@127.0.0.1:3306/nexus +- SSH 别名: ssh nexus (key: id_rsa_nexus) + +## 目录结构 +``` +Nexus/ +├── server/ ← FastAPI 后端 (Clean Architecture 4层) +│ ├── api/ ← API 路由 +│ ├── domain/ ← SQLAlchemy 模型 (14+张表) +│ ├── infrastructure/← SSH 连接池 + Redis + Telegram +│ ├── background/ ← 后台任务 +│ └── config.py ← Pydantic Settings + MySQL 覆盖 +├── frontend/ ← Vue 3 + Vuetify 4 + TypeScript SPA +│ └── src/pages/ ← 14 个页面组件 +├── web/app/ ← Vite 构建输出 (后端 StaticFiles 挂载点) +├── deploy/ ← Supervisor + Nginx + 健康检查脚本 +├── docs/ ← 设计文档/审计/changelog +└── .env ← NOT IN GIT (安装向导生成) +``` + +## 实现原则(强制) + +**所有设计和实现都必须是完美实现。** + +- ❌ 不允许为了实现而实现 — 每一行代码必须有明确的目的和质量标准 +- ❌ 不允许降级实现 — 不得以「先用着」为由降低安全、架构或代码质量标准 +- ❌ 不允许妥协实现 — 不得在发现问题后选择绕过而非根治 +- ❌ 不允许留技术债 — 发现问题必须当场修复,不得标注 TODO/FIXME 延后 +- ✅ 无法完美实现时必须停下来与用户交流后再换方案,不得擅自从权 + +## 安全铁律(强制) + +- ❌ 禁止明文密码出现在前端 JS 变量、localStorage、URL 参数中 +- ❌ 禁止静默吞错 — except 块不得空 pass 或 return None 掩盖异常 +- ❌ 禁止硬编码密钥/密码/Token — 必须走配置或环境变量 +- ❌ 禁止 f-string 拼 SQL — 必须参数化查询 +- ❌ 禁止未验证的用户输入拼入 shell 命令 — 必须用 shlex.quote() 或 subprocess 参数化 +- ✅ 敏感操作必须二次验证身份(re-auth pattern) +- ✅ API 响应不得返回密码/密钥明文 — 用 password_set 布尔标记 +- ✅ 所有 CUD 操作必须记录审计日志 + +## 文档纪律(强制) + +- 新功能/架构变更:先写 docs/design/specs/YYYY-MM-DD-*-design.md,再写代码 +- 开发前:写 docs/design/plans/ 或 docs/reports/ 技术文档 +- 项目缺文档的模块:改动时一并补全 +- 每次修改:在 docs/changelog/YYYY-MM-DD-*.md 留 changelog(行数≥10,不能空壳) + +## 强制文件修改流程(不可跳步) + +``` +实现 → WSL本地验证 → ★审计8步★ → 部署 → 健康检查 → 浏览器验证 → changelog +``` + +进度条(每次改代码必须输出): +``` +□实现 □WSL验证 □审计8步 □部署 □健康检查 □浏览器验证 □changelog +``` + +审计8步:登记→全文Read→规则扫描H→Closure表→入口表→输入→Sink→归类→DoD + +## 部署流程 + +### 后端部署 +```bash +git push origin main +ssh nexus "cd /www/wwwroot/api.synaglobal.vip && git fetch --all && git reset --hard origin/main && supervisorctl restart nexus" +ssh nexus "sleep 3 && curl -s http://127.0.0.1:8600/health" # 预期: ok +``` + +### 前端部署 +```bash +cd frontend && npx vite build && cd .. +tar czf /tmp/nexus-frontend.tar.gz -C web/app index.html assets/ +scp /tmp/nexus-frontend.tar.gz nexus:/tmp/nexus-frontend.tar.gz +ssh nexus "cd /www/wwwroot/api.synaglobal.vip/web/app && tar xzf /tmp/nexus-frontend.tar.gz && rm /tmp/nexus-frontend.tar.gz" +``` + +### 本地开发 +```bash +cd frontend && npm run dev # http://localhost:3000/app/ +``` + +## 7道门控 (deploy/pre_deploy_check.sh) + +1. Changelog门 — 文件存在且行数≥10 +2. Audit门 — 文件存在且含 Step3+Closure+DoD +3. Test门 — test_api.py 必须存在且通过 +4. Lint门 — ruff check server/ 零错误 +5. Import门 — import server.main 成功 +6. Security门 — bandit 无 HIGH/MEDIUM +7. Review门 — 审计文件包含实际改动文件清单 + +## 已确认的关键决策 + +| 不可改项 | 原因 | +|---------|------| +| API_KEY | 加密一致性 + 子服务器认证 | +| SECRET_KEY | 加密回退密钥 | +| DATABASE_URL | 启动必需 | +| ENCRYPTION_KEY | 凭据加密 | + +| 可改项 | 说明 | +|--------|------| +| system_name/title | 前端显示 | +| pool_size/overflow | 安装向导自动推荐 | +| redis_url | Redis 连接 | +| 告警阈值 | 默认 80% | +| Telegram 配置 | 告警推送 | + +## 关键文件速查 + +| 用途 | 文件路径 | +|------|----------| +| 后端入口 | server/main.py | +| 数据模型 | server/domain/models/__init__.py | +| JWT 认证 | server/api/auth_jwt.py | +| 登录 API | server/api/auth.py | +| WebSSH | server/api/webssh.py | +| WebSocket | server/api/websocket.py | +| 设置 CRUD | server/api/settings.py | +| 服务器 CRUD | server/api/servers.py | +| 快捷命令 | server/api/terminal.py | +| Agent 心跳 | server/api/agent.py | +| 同步引擎 | server/application/services/sync_engine_v2.py | +| 前端入口 | frontend/src/main.ts | +| 路由 | frontend/src/router/index.ts | +| API 客户端 | frontend/src/api/index.ts | +| Auth Store | frontend/src/stores/auth.ts | +| 登录页 | frontend/src/pages/LoginPage.vue | +| 终端页 | frontend/src/pages/TerminalPage.vue | +| Vite 配置 | frontend/vite.config.mts | + +## 已知待续事项 + +| 优先级 | 问题 | 文件 | +|--------|------|------| +| P1 | 批量操作按钮无反应 | ServersPage.vue | +| P1 | agent script-callback 无 API Key 认证 | server/api/agent.py | +| P1 | 访问令牌 30 天有效期过长 | server/config.py | +| P2 | 47.121.118.30 持续发 422 | server/api/agent.py | +| P2 | 422 调试日志是临时的 | server/main.py | +| P2 | Admin 废弃列未清理 | server/domain/models/__init__.py | +| P3 | agent.py on_event 弃用 | server/api/agent.py | +| UX | 命令输入栏高亮对齐偏差 | TerminalPage.vue | + +## 用中文回复