本仓库完整保留 Git 提交历史,并特别致谢以下核心贡献者:
yuanziwen:重点参与分析、调优与后端核心能力演进Sinifinal:重点参与文档、演示与部分前端展示完善
迁移到 GitHub 后,以上贡献仍会通过提交历史与 Contributors 统计继续保留。
DeepLens 采用 C/S 分离架构,旨在提供类似 Docker 的使用体验:
作为系统守护进程(Daemon)运行在目标 Linux 服务器上:
- 角色: API 服务器 + 数据采集引擎
- 部署方式: Systemd 服务
- 监听端口: 3000 (RESTful/WebSocket)
- 功能:
- eBPF 内核观测(系统调用、网络、内存、调度)
- A-Tune 智能调优策略执行
- NUMA 拓扑分析
- 实时数据聚合与持久化 (SQLite)
- JWT 认证与 CORS 支持
可选的可视化管理控制台(类似 Portainer):
- 角色: Web 可视化控制台
- 部署方式: Docker 容器(推荐)或 Nginx
- 访问端口: 80 (可配置)
- 功能:
- 实时系统监控面板
- 性能瓶颈可视化分析
- 调优策略执行与历史记录
- 多服务器管理(连接多个 Backend)
适用场景: 无需 Web UI,通过 API/命令行使用
# 1. 安装 DeepLens Core (API Daemon)并启动
cd target/release
sudo deeplens install
systemctl start deeplens# 2. 验证服务状态
systemctl status deeplens
# 3. 测试 API 访问
curl http://localhost:3000/healthz
# 输出: ok
# 4.cli 方式运行
deeplens --help适用场景: 需要 Web UI 可视化管理
# 1. 安装 DeepLens Core (API Daemon) 并运行
cd target/release
sudo deeplens install
systemctl start deeplens
# 2.前端编译
cd frontend
pnpm build
# 3. 启动 DeepLens UI 容器(资源为前端编译的dist文件夹)
docker run -d --name
deeplens-ui
--restart always
-p 80:80
-v /home/docker/nginx/html:/usr/share/nginx/html #前端资源
-v /home/docker/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf #配置文件
-v /home/docker/nginx/logs:/var/log/nginx
-v /etc/localtime:/etc/localtime:ro
nginx:latest
# 3. 访问 Web UI
open http://localhost:80适用场景: 本地开发调试
# 终端 1: 启动后端
cd backend
cargo run
# 终端 2: 启动前端(Vite 开发服务器)
cd frontend
pnpm install
pnpm dev
# 访问: http://localhost:5173- 操作系统: Linux (推荐 openEuler 24.03 LTS)
- 内核版本: >= 5.10 (支持 BTF)
- 权限: root 或 sudo
- 依赖:
- Rust 工具链 >= 1.75
- eBPF 工具链 (libbpf, clang, llvm)
- A-Tune 服务 (可选)
# 1. 克隆仓库
git clone https://github.com/HardZionL/DeepLens.git
cd DeepLens
# 2. 编译后端
cd backend
cargo build --release #自动编译ebpf
# 产物位置:
# - backend/target/release/deeplens
# 执行安装向导
cd backend/target/release
sudo deeplens install
# 安装完成后,服务将自动启动
# 安装目录: /opt/deeplens/
# ├── deeplens # 二进制文件
# ├── conf/
# │ └── config.toml # 配置文件
# ├── resources/
# │ └── ebpf/
# │ └── probe.bpf.o
# └── data/ # SQLite 数据库# 启动服务
sudo systemctl start deeplens
# 停止服务
sudo systemctl stop deeplens
# 重启服务
sudo systemctl restart deeplens
# 查看状态
sudo systemctl status deeplens
# 查看日志
journalctl -u deeplens -f# 构建镜像
cd frontend
pnpm build #构建前端,将构建好的资源放入下面的数据卷中
# 运行容器
docker run -d --name
deeplens-ui
--restart always
-p 80:80
-v /home/docker/nginx/html:/usr/share/nginx/html #前端资源
-v /home/docker/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf #配置文件
-v /home/docker/nginx/logs:/var/log/nginx
-v /etc/localtime:/etc/localtime:ro
nginx:latest
# 访问 Web UI
open http://localhost:80# 1. 构建前端
cd frontend
pnpm install
pnpm build
# 2. 部署到 Nginx
sudo mkdir -p /var/www/deeplens
sudo cp -r dist/* /var/www/deeplens/
# 3. 配置 Nginx
sudo tee /etc/nginx/sites-available/deeplens > /dev/null <<'EOF'
server {
listen 8080;
server_name _;
root /var/www/deeplens;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/deeplens /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx编辑 /opt/deeplens/conf/config.toml:
# DeepLens 核心配置文件
# [server] 服务器核心配置
[server]
# 监听端口
port = 3000
# [app] 应用基础信息
[app]
# 环境: development / production
env = "development"
# 日志级别: info / debug / warn / error
log_level = "info"
# Token 有效时长,格式: 数值-单位 (S=秒, M=分, H=时, D=日)
token_expiry = "365-D"
# [database] 数据库配置
[database]
url = "sqlite://./data/euler_insight.db?mode=rwc"
# [ebpf] eBPF 观测配置
[ebpf]
enabled = true
probe_path = "./resources/ebpf/probe.bpf.o"
# [atune] 智能调优配置
[atune]
enabled = true
cooldown_seconds = 60
# [websocket] 实时推送配置
[websocket]
enabled = true
# [notification] 告警通知配置
[notification]
enabled = true
# SMTP 邮件配置 (QQ 邮箱 SSL 465)
smtp_host = "smtp.qq.com"
smtp_user = "[email protected]"
smtp_pass = "xxxxxxxxxx"
from_address = "[email protected]"# 覆盖端口配置
export DEEPLENS__SERVER__PORT=9090
# 覆盖日志级别
export DEEPLENS__APP__LOG_LEVEL=debug
# 禁用 eBPF
export DEEPLENS__EBPF__ENABLED=falseGET /healthz
# 响应: "ok"# 登录
POST /api/v1/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123"
}
# 响应:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"username": "admin",
"role": "Administrator"
}
}# 获取实时快照
GET /api/v1/monitor/snapshot
Authorization: Bearer <token>
# 响应:
{
"cpu_usage": 45.2,
"memory_usage": 68.5,
"disk_io": {...},
"network_io": {...}
}const ws = new WebSocket('ws://localhost:3000/api/v1/ws/monitor');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('实时指标:', data);
};完整 API 文档: docs/api/API接口文档.md
- 系统调用追踪: 捕获高延迟系统调用,定位性能瓶颈
- 网络流量分析: TCP 连接状态、吞吐量、丢包率
- 内存访问模式: NUMA 跨节点访问检测
- 调度器分析: CPU 调度延迟、上下文切换
- 自动 Profile 推荐: 根据工作负载特征推荐最佳配置
- 一键应用调优: Web UI 一键执行调优策略
- 调优历史记录: 跟踪调优效果与性能改进
- 拓扑可视化: D3.js 渲染 NUMA 节点、CPU、内存拓扑
- 跨节点访问热力图: 识别 NUMA 不当访问
- 进程亲和性优化建议: 推荐最佳 CPU 绑定策略
DeepLens/
├── backend/ # Rust 后端 (API Daemon)
│ ├── src/
│ │ ├── api/ # REST/WebSocket API 路由
│ │ ├── bin/ # 可执行文件入口
│ │ ├── cli/ # 命令行接口
│ │ ├── collector/ # eBPF 数据采集
│ │ ├── config/ # 配置管理
│ │ ├── db/ # 数据库操作
│ │ ├── logic/ # 业务逻辑层
│ │ ├── model/ # 数据模型
│ │ ├── service/ # 服务层
│ │ │ ├── analyzer.rs # NUMA 拓扑分析
│ │ │ ├── cache.rs # 缓存服务
│ │ │ ├── env_check.rs # 环境检查
│ │ │ ├── installer.rs # 系统安装
│ │ │ ├── notify.rs # 通知服务
│ │ │ ├── optimizer.rs # A-Tune 调优
│ │ │ └── scheduler.rs # 调度器
│ │ ├── utils/ # 工具函数
│ │ ├── error.rs # 错误处理
│ │ ├── lib.rs # 库入口
│ │ ├── main.rs # 主入口文件
│ │ └── state.rs # 状态管理
│ ├── resources/
│ │ └── ebpf/ # eBPF 字节码
│ └── Cargo.toml
│
├── ebpf/ # eBPF 探针 (C/Rust)
│ ├── include/ # 头文件
│ ├── probes/ # 探针定义
│ ├── src/ # 源代码
│ └── xtask/ # 编译工具链
│
├── frontend/ # Vue 3 前端 (可选)
│ ├── src/
│ │ ├── api/ # API 客户端
│ │ ├── assets/ # 静态资源
│ │ ├── components/ # 可复用组件
│ │ ├── layout/ # 布局组件
│ │ ├── mock/ # Mock 数据
│ │ ├── router/ # 路由配置
│ │ ├── store/ # 状态管理
│ │ ├── types/ # TypeScript 类型
│ │ ├── utils/ # 工具函数
│ │ ├── views/ # 页面组件
│ │ ├── App.vue # 根组件
│ │ └── main.ts # 入口文件
│ └── package.json
│
├── docker/ # Docker 配置
│ ├── nginx/ # Nginx 配置
│ └── portainer/ # Portainer 配置
│
├── docs/ # 文档
│ ├── api/ # API 文档
│ ├── deployment/ # 部署指南
│ ├── design/ # 设计文档
│ ├── final/ # 最终文档
│ └── test/ # 测试文档
│
├── scripts/ # 脚本工具
│ ├── build.sh # 构建脚本
│ ├── deploy.sh # 部署脚本
│ ├── dev.sh # 开发脚本
│ ├── test.sh # 测试脚本
│ └── stress_test/ # 压力测试
│
├── mapping/ # 映射配置
├── Cargo.toml # Rust 工作空间配置
├── Cargo.lock # 依赖锁定文件
├── LICENSE # 许可证
└── README.md # 本文件
Backend (Core):
- Rust 1.75+ (异步运行时: Tokio)
- Axum (Web 框架)
- SQLx + SQLite (数据持久化)
- eBPF (aya-rs)
- Serde + config-rs (配置管理)
Frontend (UI):
- Vue 3 + TypeScript
- Vite (构建工具)
- Element Plus (UI 组件库)
- D3.js (数据可视化)
- Axios + WebSocket (通信)
Infrastructure:
- Systemd (服务管理)
- Docker (前端容器化)
- Nginx (可选反向代理)
cd frontend
pnpm install
pnpm build
# 开发模式
pnpm dev# 后端单元测试
cd backend
cargo test
# 前端测试
cd frontend
pnpm test| 提交日期 | 提交哈希 | 提交者 | 提交内容 |
|---|---|---|---|
| 2026-01-02 | e2a28d4 | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2026-01-02 | 4acedf0 | Sinifinal | 完善了readme中演示视频部分 |
| 2026-01-02 | 6b0025d | yuanziwen | refactor(analyze): 优化平均改善评分计算逻辑 |
| 2026-01-01 | 75546fc | yuanziwen | feat(optimizer): 优化场景检测和性能评分算法 |
| 2025-12-31 | e5be7a7 | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 4682f8e | yuanziwen | docs(readme): 更新文档中的端口配置和部署说明 |
| 2025-12-31 | 664376a | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 207a624 | Sinifinal | 修复了异构调度页面显示问题 |
| 2025-12-31 | f65c071 | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 43e57c2 | yuanziwen | feat(cli): 添加 Shell 命令补全功能并移除火焰图相关功能 |
| 2025-12-31 | 5f551de | Sinifinal | 更新了项目文档 |
| 2025-12-31 | f2f5c89 | Sinifinal | 更新了项目文档 |
| 2025-12-31 | 02820f2 | Sinifinal | 更新了项目文档 |
| 2025-12-31 | 5e51e2d | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 3cb7124 | Sinifinal | 更新了项目文档 |
| 2025-12-31 | fff3bca | yuanziwen | feat(cli): 改进日志查看和工作目录切换功能 |
| 2025-12-31 | 5f04f4d | yuanziwen | docs(deeplens): 更新部署命令和移除测试总结章节 |
| 2025-12-31 | b7beb1b | Sinifinal | 更新了项目文档 |
| 2025-12-31 | f54e771 | Sinifinal | 解决了异构调度显示不匹配问题 |
| 2025-12-31 | 4e62f26 | Sinifinal | 更新了文档材料1 |
| 2025-12-31 | b4bb33d | yuanziwen | Revert "docs: 删除多个文档文件" |
| 2025-12-31 | 5d4dbd7 | yuanziwen | docs: 删除多个文档文件 |
| 2025-12-31 | 4e1202a | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 32a6c65 | yuanziwen | 格式优化 |
| 2025-12-31 | f0e6489 | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 15297be | Sinifinal | 更新了文档材料 |
| 2025-12-31 | 679eded | Helen_Z | Merge remote-tracking branch 'origin/main' |
| 2025-12-31 | 777d69c | yuanziwen | feat(analyze): 添加系统内存优化功能 |
| 2025-12-30 | 1a57abf | yuanziwen | test_API |
| 2025-12-30 | 63df90a | yuanziwen | feat(cli): 添加 NUMA 管理、系统诊断和 API 查询命令 |
| 2025-12-30 | fb39892 | yuanziwen | feat(analyze): 添加NUMA拓扑分析和进程亲和性优化功能 |
| 2025-12-30 | 06c829d | Sinifinal | 修复了火焰图问题 |
| 2025-12-30 | 83112a6 | Sinifinal | 修复了火焰图问题 |
| 2025-12-30 | 926ea1f | yuanziwen | refactor(monitor): 移除未使用的 CPU 统计方法和前端导入 |
| 2025-12-30 | 0cbde7d | yuanziwen | feat(api): 添加AI助手和安装器API接口并实现CLI客户端 |
| 2025-12-30 | c5ab701 | yuanziwen | feat(monitor): 添加eBPF监控和优化系统性能指标 |
| 2025-12-29 | dcac824 | yuanziwen | feat(config): 更新配置文件和认证机制 |
| 2025-12-29 | bd3347d | Sinifinal | 修复了火焰图问题 |
| 2025-12-29 | d71d082 | Sinifinal | 修复了磁盘监控模块无更新动态或滞后 |
| 2025-12-29 | 8080e80 | Helen_Z | test_frontend_v2 |
| 2025-12-29 | 7f7d699 | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-29 | 4ce0884 | Sinifinal | 更改了项目文档 |
| 2025-12-27 | 9641c60 | yuanziwen | fix(monitor): 解决系统资源监控中的CPU 100%尖峰和图表显示问题 |
| 2025-12-27 | 076bc24 | yuanziwen | feat(auth): 添加用户密码修改功能和通知配置管理 |
| 2025-12-26 | 017e5a7 | yuanziwen | feat(auth): 添加修改密码功能 |
| 2025-12-26 | 7404f16 | yuanziwen | refactor(config): 重构配置管理与场景检测逻辑 |
| 2025-12-26 | 1d4b7f1 | yuanziwen | docs: 添加 DeepLens 系统性能监控与智能优化平台设计文档 |
| 2025-12-26 | f1f1adb | yuanziwen | feat(collector): 添加内存监控和网络追踪功能 |
| 2025-12-26 | b157d69 | yuanziwen | fix(auth): 修复登录和退出功能的样式与逻辑问题 |
| 2025-12-22 | 8427282 | yuanziwen | refactor(backend): 优化配置与资源文件处理逻辑 |
| 2025-12-22 | a866ed2 | Sinifinal | 添加了邮箱绑定功能 |
| 2025-12-22 | 47f16a3 | yuanziwen | feat(auth): 增强认证机制与 Token 管理 |
| 2025-12-21 | 0814d73 | Sinifinal | 优化了登录逻辑 |
| 2025-12-21 | 7231895 | Sinifinal | 优化了numa页面逻辑 |
| 2025-12-21 | a60afa7 | Sinifinal | 完善了登录逻辑 |
| 2025-12-19 | 860fe35 | Helen_Z | Merge remote-tracking branch 'origin/main' |
| 2025-12-19 | 2ca426a | Helen_Z | install |
| 2025-12-19 | 0acb3e4 | yuanziwen | feat(observability): 修复火焰图生成全链路问题 |
| 2025-12-19 | 6c9aad1 | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-19 | 4c78819 | yuanziwen | feat(ebpf): 实现 eBPF 火焰图与 TCP 统计分析 API |
| 2025-12-18 | 90d983d | Sinifinal | 优化了智能助手的消息显示 |
| 2025-12-18 | 25d740c | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-18 | e51dbdb | Sinifinal | 增加了智能助手功能 |
| 2025-12-18 | 1fe2177 | yuanziwen | feat(backend): 实现分级日志系统与性能优化 |
| 2025-12-18 | 1cd551b | Sinifinal | 优化了数字显示细节 |
| 2025-12-18 | 94ae37f | Sinifinal | 优化了数字显示细节 |
| 2025-12-18 | eb0be59 | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-18 | 74bb126 | Sinifinal | 优化了numa界面 |
| 2025-12-17 | 6979ce3 | yuanziwen | docs(global): 文档更新 |
| 2025-12-17 | b2d96cb | yuanziwen | feat(scheduler): 实现任务调度与节点状态管理功能 |
| 2025-12-17 | 20f50ee | Sinifinal | 优化了实时监控页面 |
| 2025-12-17 | 3a8352d | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-17 | eb8a4a9 | Sinifinal | 优化了实时监控页面 |
| 2025-12-17 | 40f6613 | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-17 | 302daca | yuanziwen | feat(backend): 增强系统分析与优化功能 |
| 2025-12-17 | f7de39e | Sinifinal | 优化了实时监控页面 |
| 2025-12-17 | f6cf336 | Sinifinal | 美化了登录页面 |
| 2025-12-17 | 1672e99 | Sinifinal | 增加了登录功能 |
| 2025-12-17 | 81e3b7d | yuanziwen | fixed(frontend): 组件补充 |
| 2025-12-17 | d90ceaf | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-17 | 09a0a45 | Sinifinal | 增加了折叠侧边栏功能 |
| 2025-12-17 | 572d080 | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-17 | 53a38f4 | yuanziwen | feat(frontend): 前端组件复用、更改进程名称 |
| 2025-12-17 | 62c0471 | Sinifinal | 修改了分析报告中的报错 |
| 2025-12-17 | cc7e703 | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-16 | 5ea9212 | yuanziwen | feat(analyze): 优化分析页面数据展示逻辑和趋势图 |
| 2025-12-16 | 3767771 | yuanziwen | feat(backend): 实现进程CPU核心绑定与优化反馈功能 |
| 2025-12-16 | 3b8c3a8 | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-16 | 4fef903 | yuanziwen | fix(formatter): 修复相对时间格式化负数问题 |
| 2025-12-16 | 272b4c5 | Sinifinal | 修改了显示效果 |
| 2025-12-16 | 041684b | yuanziwen | Merge remote-tracking branch 'origin/main' |
| 2025-12-16 | 56c8cc4 | yuanziwen | feat(monitor): 增强系统监控功能,支持磁盘与进程指标采集 |
| 2025-12-16 | 04ce53b | Sinifinal | 对前端组件显示效果进行了优化 |
| 2025-12-16 | 0c82ae2 | Sinifinal | Merge branch 'main' |
| 2025-12-16 | 1c31d52 | Sinifinal | 保存本地修改以便进行合并 |
| 2025-12-16 | 442e5d2 | yuanziwen | feat(frontend): 重构布局系统并增强拓扑图功能 |
| 2025-12-16 | 17c6088 | yuanziwen | fixed(backend): 解决内存数据解析问题 |
| 2025-12-16 | da5a394 | yuanziwen | feature(fontend&backend): 前后端初步联调、新增异构调度功能 |
| 2025-12-16 | 7b5ccfb | yuanziwen | feat(backend): 完成异构调度模块与后端最终收尾 |
| 2025-12-15 | f885d7c | Sinifinal | Merge remote-tracking branch 'origin/main' |
| 2025-12-15 | b99cd3f | Sinifinal | 提交前端初始代码 |
| 2025-12-15 | 6c85959 | yuanziwen | fixed(frontend): 提交环境变量文件 |
| 2025-12-15 | 47e84f3 | yuanziwen | refactor(frontend): 封装 Axios 为 Request 类并统一 API 调用方式 |
| 2025-12-15 | a15cc01 | Sinifinal | 提交前端初始代码 |
| 2025-12-15 | 6ce0921 | Sinifinal | 初步实现了框架 |
| 2025-12-15 | 331ba3d | yuanziwen | style(global): 文件清理 |
| 2025-12-15 | f505d73 | yuanziwen | docs(api): 添加后端接口文档与模块开发测试指南 |
| 2025-12-15 | 5d0c035 | yuanziwen | fix(backend): 修复数据库健康检查逻辑 |
| 2025-12-15 | 20d2a9a | yuanziwen | docs(global): 文档更新 |
| 2025-12-15 | ef1636a | yuanziwen | feat(backend): 完成 A-Tune 智能优化模块 |
| 2025-12-15 | 8dfa847 | yuanziwen | feat(backend): 新增 NUMA 拓扑分析接口 |
| 2025-12-15 | 0ca9f7e | yuanziwen | fix(backend): 修复ebpf日志失常的问题 |
| 2025-12-15 | c0e0288 | yuanziwen | feat(backend): 完成系统监控全套 API |
| 2025-12-15 | 76300a8 | yuanziwen | feat(backend): 完成 WebSocket 实时数据流对接 |
| 2025-12-15 | bb12ebd | yuanziwen | fix(backend): 修复 eBPF 探针生命周期问题 |
| 2025-12-14 | 7567b92 | yuanziwen | docs(ebpf): 新增ebpf 模块开发与测试指南 |
| 2025-12-14 | be0a0b0 | yuanziwen | feat(ebpf): 修复内核探针编译并添加独立测试工具 |
| 2025-12-13 | aa5867f | yuanziwen | refactor(sql): 调整时间范围检查约束 |
| 2025-12-13 | fb5d32c | yuanziwen | feat(init): 初始化 DeepLens 项目全栈脚手架 |
| 2025-12-13 | 1b65b7a | yuanziwen | style(git): 修改.gitignore |
| 2025-12-13 | 7830b7e | yuanziwen | docs(开发实施手册): 提交开发实施手册_详细版.md |
| 2025-12-12 | 2be0d9d | Sinifinal | Merge branch 'main' |
| 2025-12-12 | 1b43619 | yuanziwen | test |
| 2025-12-12 | 92ae656 | yuanziwen | init |
欢迎贡献代码、报告问题或提出改进建议!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- 贡献者: Ziwen Yuan (架构设计/后端核心开发)
- 贡献者: Sinifinal (架构设计/前端UI开发设计)
- 贡献者: Helen-Z (架构设计/测试运维/文档撰写)
- 项目主页: https://gitlab.eduxiji.net/T202510423998025/project3035747-357282
- 问题反馈: [email protected]
- 邮件: [email protected]
⭐ 如果这个项目对您有帮助,请给我们一个 Star!
Made with ❤️ by DeepLens Team

