# ops-asset-manager **Repository Path**: bestmem/ops-asset-manager ## Basic Information - **Project Name**: ops-asset-manager - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-01 - **Last Updated**: 2026-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 运维资产管理平台 (Operations Asset Manager) 统一管理云平台、服务器、中间件、账户密码和项目文档的团队协作平台。密码管理参考 KeePass 交互风格,支持 AES-256-GCM 加密存储和团队共享。 ## 技术栈 | 层 | 组件 | 版本 | |---|---|---| | 运行时 | Python | 3.12 | | Web 框架 | Django | 5.1.8 | | REST API | Django REST Framework | 3.15.2 | | 认证 | simplejwt (JWT) | 5.4.0 | | 加密 | cryptography (AES-256-GCM) | 44.0.2 | | 前端 | Vue 3 + TypeScript | 3.5 | | 构建 | Vite | 6.x | | UI | Element Plus | 2.9.7 | | 数据库 | PostgreSQL (生产) / SQLite (开发) | 16 / 3 | | 缓存 | Redis | 7.x | | 反向代理 | Nginx | 1.27 | ## 功能模块 - **用户认证** — JWT 登录/注册,访问令牌 30 分钟自动刷新,自定义头像 - **资产管理** — 服务器、中间件、VPN/堡垒机、域名证书统一管理,在线状态监控,凭据关联 - **项目管理** — 项目创建、文件夹层级、文件上传管理,支持 ZIP 打包下载,团队共享(管理员/编辑者/只读) - **密码保险库** — KeePass 风格密码展示,AES-256-GCM 加密,点击查看/一键复制,支持共享权限(只读/读写/管理) - **文档管理** — Markdown 文档归档,分类标签,全文搜索 - **团队协作** — 4 级角色(拥有者/管理员/成员/只读),成员邀请和权限控制 - **RBAC 权限** — 基于角色的访问控制,自定义角色和权限分配 - **管理中心** — 管理员后台:用户管理、角色管理、项目管理 - **审计日志** — 密码查看/复制/共享等敏感操作全记录 ## 项目结构 ``` asset-manager/ ├── docker-compose.yml # 生产部署编排 ├── Dockerfile # 后端 Gunicorn 镜像 ├── nginx.conf # Nginx 反向代理 ├── README.md ├── .gitignore ├── backend/ # Django 项目 │ ├── manage.py │ ├── requirements.txt │ ├── .env # 环境变量(不提交到 Git) │ ├── .env.example # 环境变量模板 │ ├── config/ │ │ ├── urls.py │ │ ├── wsgi.py │ │ └── settings/ │ │ ├── base.py # 公共配置 │ │ ├── dev.py # 开发环境 │ │ └── production.py # 生产环境 │ └── apps/ │ ├── users/ # 用户 + JWT + 审计日志 + 权限类 + 头像 │ ├── rbac/ # RBAC 角色权限管理 │ ├── teams/ # 团队 + 成员管理 │ ├── assets/ # 资产管理 │ ├── vaults/ # 密码保险库 + crypto.py │ ├── documents/ # 文档管理 │ └── projects/ # 项目管理 + 文件夹 + 文件上传/ZIP下载 └── frontend/ # Vue 3 + TypeScript ├── Dockerfile # 前端 Nginx 镜像 ├── vite.config.ts ├── tsconfig.json └── src/ ├── main.ts ├── App.vue ├── router/ # 路由 + 导航守卫 ├── stores/ # Pinia 状态管理 ├── api/ # Axios 封装 + 拦截器 ├── types/ # TypeScript 类型定义 ├── components/ │ ├── layout/ # 布局(侧边栏 + 顶栏) │ ├── common/ # UserAvatar, AvatarPicker, CredentialPicker │ └── vault/ # UnlockDialog └── views/ # dashboard, projects, admin, vaults, teams, settings ``` ## 快速开始(开发环境) ### 前置条件 - Python 3.12 - Node.js 22+ - npm 10+ ### 1. 后端 ```bash cd backend # 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS / Linux: source venv/bin/activate # 安装依赖 pip install -r requirements.txt # 数据库迁移 python manage.py migrate # 启动开发服务器 python manage.py runserver ``` ### 2. 前端 ```bash cd frontend # 安装依赖 npm install # 启动开发服务器 npm run dev ``` 浏览器访问 `http://localhost:5173`,API 请求自动代理到后端 `localhost:8000`。 ### 3. 创建管理员账号 ```bash cd backend python manage.py createsuperuser ``` 访问 `http://localhost:8000/admin/` 可管理后台数据。 ## 密码保险库使用流程 1. **创建密码库** — 设置名称和主密码(主密码用于派生 AES 加密密钥,不会存储在服务器) 2. **解锁密码库** — 每次打开密码库需输入主密码,获得 30 分钟会话 3. **添加条目** — 保存用户名、密码、网址、备注(密码和备注明文经 AES-256-GCM 加密后存储) 4. **查看密码** — 密码默认显示为 `●●●●●●●●`,点击 👁 解密显示 5 秒后自动遮盖 5. **复制密码** — 点击 📋 复制到剪贴板,10 秒后自动清除 6. **共享密码库** — 可将密码库共享给特定用户或整个团队(只读/读写/管理三种权限) > **安全说明**: 主密码不存储在服务器端。服务端只保存 PBKDF2 哈希,用于验证主密码是否正解。每个密码库使用独立的随机 256 位主密钥,主密钥由用户主密码派生的密钥加密保护。 ## API 端点 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/auth/register/` | 注册 | | POST | `/api/auth/login/` | 登录(获取 JWT) | | POST | `/api/auth/refresh/` | 刷新令牌 | | GET | `/api/auth/profile/` | 个人信息 | | POST | `/api/auth/change-password/` | 修改密码 | | GET/POST | `/api/teams/` | 团队列表/创建 | | GET/PUT/DELETE | `/api/teams/{id}/` | 团队详情/编辑/删除 | | GET | `/api/teams/{id}/members/` | 成员列表 | | POST | `/api/teams/{id}/invite/` | 邀请成员 | | PUT/DELETE | `/api/teams/{id}/members/{mid}/` | 更新/移除成员 | | GET/POST | `/api/assets/` | 资产列表/创建 | | GET/PUT/DELETE | `/api/assets/{id}/` | 资产详情/编辑/删除 | | GET/POST | `/api/vaults/` | 密码库列表/创建 | | DELETE | `/api/vaults/{id}/` | 删除密码库 | | POST | `/api/vaults/{id}/unlock/` | 解锁密码库 | | GET/POST | `/api/vaults/{id}/entries/` | 条目列表/创建 | | PUT/DELETE | `/api/vaults/{id}/entries/{eid}/` | 编辑/删除条目 | | POST | `/api/vaults/{id}/entries/{eid}/reveal/` | 解密密码 | | POST/GET | `/api/vaults/{id}/shares/` | 共享管理 | | GET/POST | `/api/documents/` | 文档列表/创建 | | GET/PUT/DELETE | `/api/documents/{id}/` | 文档详情/编辑/删除 | | GET | `/api/documents/categories/` | 文档分类 | | GET/POST | `/api/projects/` | 项目列表/创建 | | GET/PATCH/DELETE | `/api/projects/{id}/` | 项目详情/编辑/删除 | | GET | `/api/projects/{id}/members/` | 项目成员列表 | | POST | `/api/projects/{id}/share/` | 邀请项目成员 | | GET/POST | `/api/projects/{id}/folders/` | 文件夹列表/创建 | | PUT/PATCH/DELETE | `/api/projects/{id}/folders/{fid}/` | 文件夹编辑/删除 | | GET/POST | `/api/projects/{id}/files/` | 文件列表/上传 | | PATCH/DELETE | `/api/projects/{id}/files/{fid}/` | 文件移动/删除 | | GET | `/api/projects/{id}/files/download/` | ZIP 打包下载 | | GET/POST | `/api/rbac/roles/` | 角色列表/创建 | | GET/PUT/DELETE | `/api/rbac/roles/{id}/` | 角色详情/编辑/删除 | | GET | `/api/rbac/permissions/` | 权限定义列表 | ## 生产部署 ### Docker Compose(推荐) ```bash # 1. 复制并修改环境变量 cp backend/.env.example backend/.env # 编辑 .env,修改 SECRET_KEY、DB_PASSWORD、ALLOWED_HOSTS 等 # 2. 构建并启动 docker-compose up -d --build # 3. 运行数据库迁移 docker-compose exec backend python manage.py migrate # 4. 创建管理员 docker-compose exec backend python manage.py createsuperuser # 5. 查看日志 docker-compose logs -f ``` 服务端口: - Nginx(前端 + API 代理): `80` - PostgreSQL: `5432`(内部) - Redis: `6379`(内部) ### 部署前安全检查 - [ ] 修改 `SECRET_KEY` 为随机长字符串(至少 50 字符) - [ ] 修改数据库密码 `DB_PASSWORD` - [ ] 修改 `ALLOWED_HOSTS` 为实际域名 - [ ] 修改 `CORS_ALLOWED_ORIGINS` 为实际前端域名 - [ ] 修改 `VAULT_KEY_WRAP_SALT` 为随机值 - [ ] 确认 `DEBUG=False` - [ ] 配置 HTTPS 证书(建议通过 Nginx 反向代理或 CDN 终止 TLS) ## 安全特性 - 密码 AES-256-GCM 认证加密(防篡改) - PBKDF2-HMAC-SHA256 密钥派生(100,000 次迭代) - JWT 短期令牌(30 分钟)+ 自动刷新 - 密码明文不在前端持久化存储 - 密码复制 10 秒后自动清除剪贴板 - 密码解密操作记录审计日志 - 登录频率限制(5 次/分钟) - 密码揭示频率限制(10 次/分钟) - CSRF / XSS / Clickjacking 防护头 - 生产环境强制 HTTPS + HSTS