8.7 KiB
8.7 KiB
Nexus 项目说明文档(2026-07-08)
1. 项目定位
Nexus 是一个服务器资产管理、远程运维、宝塔面板管理和自动化发布平台。当前重点能力包括:
- 服务器资产管理;
- SSH / WebSSH / 文件管理;
- 批量脚本执行;
- 宝塔面板一键登录;
- 宝塔 Session TTL 自动检测与修复;
- 审计日志与安全巡检;
- 旧后台
/app/与新后台/app-v2/双后台并行; - 发布包制品化与 Gitea / Act Runner 自动发布方向。
2. 当前项目路径
源码快照目录:
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\work\nexus_code_context\snapshots\nexus-source-20260707-112042
发布文档目录:
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs
最新发布包:
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz
SHA256:
46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b
3. 技术栈概览
后端
- Python / FastAPI 风格 API;
- SQLAlchemy;
- Redis;
- SSH / Paramiko 相关远程能力;
- Docker / 1Panel 部署脚本;
- 宝塔 API + SSH bootstrap 混合修复链路。
前端
旧后台:
web/app/
新后台:
frontend-v2/
web/app-v2/
新后台技术栈:
- React;
- TypeScript;
- Vite;
- Tailwind / shadcn 风格组件;
- TanStack Query;
- TanStack Table;
- Zustand。
部署/发布
- Docker / 1Panel;
deploy/apply-release-bundle.sh;deploy/preflight-release-host.sh;scripts/prepare_release_artifact.py;scripts/publish_release_bundle.py。
4. 重要目录说明
server/ 后端 API、服务、基础设施代码
server/api/ FastAPI 路由层
server/application/services/ 业务服务层
server/infrastructure/ Redis、SSH、宝塔等基础设施封装
frontend-v2/ 新后台源码
web/app/ 旧后台静态产物
web/app-v2/ 新后台静态产物
deploy/ 部署、升级、回滚、1Panel 脚本
scripts/ 本地 gate、打包、发布辅助脚本
tests/ 后端和发布辅助脚本测试
outputs/ 本轮审查、发布、说明文档
5. 当前核心改动
5.1 宝塔长期不掉线修复
问题根因:部分宝塔版本 task.py 中硬编码 3600 秒清理 tmp_login session,导致 Nexus 一键登录后 1~2 小时刷新掉线。
当前修复方向:
- 登录前自动检测/修复宝塔 hardcoded
3600; - 改为基于
public.get_session_timeout()或默认86400; - 新增 Redis 分布式锁,避免同一宝塔并发签发 login URL 时 tmp_token 互相覆盖;
- SSH bootstrap 增加远端 flock / mktemp / atomic replace;
- 新增测试覆盖宝塔登录、TTL、bootstrap、并发锁等场景。
关键文件:
server/application/services/btpanel_service.py
server/infrastructure/btpanel/login_url_lock.py
server/infrastructure/btpanel/bootstrap_lock.py
server/infrastructure/btpanel/ssh_bootstrap.py
server/api/btpanel.py
5.2 /app-v2 第二后台
新增第二后台 /app-v2/,与旧后台 /app/ 并行,方便逐步替换旧后台。
关键特性:
- 更现代的 UI;
- 响应更快;
- 保留原功能入口;
- 敏感信息不展示;
- 全局 API Key 只显示“已配置/未配置”,不显示真实值;
- 前端构建产物有敏感扫描。
关键文件:
frontend-v2/
web/app-v2/
frontend-v2/scripts/scan-app-v2-sensitive.mjs
server/main.py
Dockerfile
Dockerfile.prod
5.3 发布制品化
当前发布不再只靠零散文件复制,而是生成完整 tar.gz 发布包。
关键脚本:
scripts/prepare_release_artifact.py 一键本地 gate + manifest + tar.gz + scan + metadata + validate-only
scripts/generate_release_bundle.py 生成干净发布包
scripts/scan_release_bundle.py 扫描发布包是否含敏感/脏文件
scripts/write_release_metadata.py 写 metadata 和 .sha256
scripts/publish_release_bundle.py Python 版上传 + preflight + 可选 apply
scripts/check_text_integrity.py 检查 UTF-8 / 控制字符 / Markdown fence
服务器侧脚本:
deploy/preflight-release-host.sh 服务器发布前检查
deploy/apply-release-bundle.sh 校验、备份、应用发布包、重建、验证
deploy/sync_webapp_to_container.sh 同步 /app 与 /app-v2 静态资源到容器
6. 当前验证状态
本地 release gate 已通过:
- Python 编译检查;
- deploy shell
bash -n; - deploy excludes 检查;
- 文本完整性检查;
/app-v2 build:safe;- app-v2 敏感扫描;
- 宝塔专项测试 60 个;
- 发布辅助脚本测试 5 个。
合计 Python 测试:
65 passed
发布包验证:
- tarball scan 通过;
apply-release-bundle.sh --validate-only通过;- metadata /
.sha256/ tar 实际 SHA 一致; - 不包含
tmp/pytest-publish-release; - 不包含高置信真实敏感信息。
7. 发布方式
7.1 当前推荐:发布包方式
发布包:
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz
SHA256:
46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b
只上传并执行 preflight:
cd /d C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\work\nexus_code_context\snapshots\nexus-source-20260707-112042
.venv-py312-codex\Scripts\python.exe scripts\publish_release_bundle.py ^
--remote nexus ^
--tarball C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs
exus-release-20260708.tar.gz ^
--sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b
确认 preflight 没问题后正式发布:
.venv-py312-codex\Scripts\python.exe scripts\publish_release_bundle.py ^
--remote nexus ^
--tarball C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs
exus-release-20260708.tar.gz ^
--sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b ^
--apply
7.2 Gitea 发布方向
已有远端 Gitea 仓库:
http://66.154.115.8:3000/admin/Nexus.git
如果要用局域网机器 192.168.124.219 做新的代码托管平台,建议安装:
Gitea + Act Runner
含义:
- Gitea:代码仓库、分支、Web 管理;
- Act Runner:执行 Gitea Actions / CI/CD / 自动发布。
推荐最终流程:
开发机 / Codex
-> git push 到 Gitea
-> Gitea Actions 触发
-> Act Runner 跑 gate / 打包
-> SSH 到正式服务器
-> apply-release-bundle.sh 发布
-> 验证 /health /app/ /app-v2/
第一次建议先做手动触发或 release 分支触发,不要一 push 就直接发布生产。
8. 测试部署机说明
局域网测试部署机:
192.168.124.219
已知用途:
- Nexus 测试部署机;
- Web 入口曾记录为:
http://192.168.124.219:18600/app/; - 本地 Git 工作树:
/opt/nexus-dev-current; - 曾用于 pytest、代码上下文索引、Zvec 部署等。
当前记录显示:它有本地 Git 仓库/工作树,但没有明确证据表明已安装 Gitea 服务。
9. 安全注意事项
- 不要提交
.env、私钥、真实 token、宝塔 key、数据库密码; - 发布包已排除
.env、docker/.env.prod、web/data、venv、node_modules、缓存等; /app-v2不显示全局 API Key;- 宝塔一键登录必须走后端接口,不在前端生成 tmp token;
script_service是管理员远程执行命令功能,属于产品能力,不按普通漏洞处理;- Gitea Actions 如要生产发布,必须先配置好 Secrets 和最小权限 SSH Key。
10. 重要文档索引
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-release-index-20260708.md
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-release-ready-checklist-20260708.md
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-manual-deploy-commands-20260708.md
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-release-python-publisher-20260708.md
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-release-publisher-tests-20260708.md
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-app-v2-双后台实施说明-20260707.md
C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\Nexus-API服务数据库调用链索引报告-20260707.md
11. 当前未完成事项
- 线上
https://api.synaglobal.vip尚未由 Codex 亲自完成 SSH 发布验证; - 原因是本线程仍使用
auto_review审批,当前 CC Switch 不支持codex-auto-review; - 用户可手动执行发布命令,或改用 Gitea/Act Runner 发布。