logo
0
0
Login

AccountBox - 本地账号密码管理系统

License .NET React TypeScript

一个功能完整的本地账号密码管理系统,采用前后端分离架构。支持 JWT 认证、API 密钥管理、全文搜索、密码生成等功能。

✨ 主要特性

  • 🔐 JWT 认证系统 - 主密码登录,Token 有效期 24 小时
  • 🌐 账号管理 - 创建、编辑、删除、搜索账号和网站
  • 🗑️ 软删除与回收站 - 支持恢复或永久删除
  • 🔑 API 密钥管理 - 生成、管理、撤销 API 密钥,支持作用域控制
  • 🔍 全文搜索 - 快速搜索账号和网站
  • 🎲 密码生成器 - 生成强密码,支持自定义规则
  • 📊 表格视图 - 网站和账号列表支持表格布局
  • 🐳 Docker 支持 - 单镜像或分离镜像部署

📸 界面预览

网站管理

网站管理

账号列表

账号列表

API密钥管理

API密钥管理

🚀 快速开始

前置要求

  • 后端: .NET 8.0 SDK
  • 前端: Node.js >= 20.19.0, pnpm
  • 数据库: SQLite (开发) / PostgreSQL (生产)

方式 1: 本地使用启动脚本(推荐)

./start.sh

方式 2: 手动启动

# 终端 1: 启动后端 cd backend/src/AccountBox.Api dotnet run # 终端 2: 启动前端 cd frontend pnpm install # 首次需要 pnpm dev

方式 3: Docker 启动

# 单镜像部署(推荐) docker-compose -f docker-compose.yml up -d # 或分离镜像部署 docker-compose up -d

访问应用

📋 技术栈

后端

  • 框架: ASP.NET Core 8.0
  • ORM: Entity Framework Core 9.0
  • 认证: JWT Bearer (Microsoft.AspNetCore.Authentication.JwtBearer)
  • 密钥哈希: BCrypt.Net-Next 4.0.3
  • 数据库: SQLite / PostgreSQL
  • 测试: xUnit, Moq, FluentAssertions

前端

  • 框架: React 19.2.0
  • 语言: TypeScript 5.9.3 (严格模式)
  • 构建工具: Vite 7.1.7
  • UI 库: shadcn/ui + Radix UI
  • 样式: Tailwind CSS 4.1.14
  • HTTP 客户端: axios 1.12.2
  • 路由: react-router-dom 7.9.4
  • 测试: Vitest 3.2.4, @testing-library/react, Playwright

📁 项目结构

AccountBox/ ├── backend/ # 后端项目 │ ├── src/ │ │ ├── AccountBox.Api/ # Web API 项目 │ │ ├── AccountBox.Core/ # 核心业务逻辑 │ │ ├── AccountBox.Data/ # 数据访问层 │ │ └── AccountBox.Security/# 安全模块(已废弃) │ └── tests/ # 单元测试 ├── frontend/ # 前端项目 │ ├── src/ │ │ ├── components/ # React 组件 │ │ ├── pages/ # 页面组件 │ │ ├── services/ # API 服务 │ │ ├── hooks/ # 自定义 Hooks │ │ ├── types/ # TypeScript 类型 │ │ └── utils/ # 工具函数 │ └── tests/ # 测试文件 ├── specs/ # 功能规范 │ ├── 001-mvp/ # MVP 功能 │ ├── 006-api-management/ # API 密钥管理 │ └── 007-accountbox-web-jwt/ # JWT 认证 ├── docker-compose.yml # 单镜像部署(SQLite) ├── docker-compose.mysql.yml # MySQL 部署 ├── docker-compose.postgres.yml # PostgreSQL 部署 ├── Dockerfile # 单镜像构建配置(前端+后端) └── start.sh # 启动脚本

📚 API 文档

内部 API (需要 JWT Token)

所有内部 API 需要在请求头中包含 JWT Token:

Authorization: Bearer <your-jwt-token>

主要端点:

  • GET /api/websites - 获取网站列表
  • GET /api/accounts - 获取账号列表
  • GET /api/search - 全文搜索
  • GET /api/api-keys - 获取 API 密钥列表

外部 API (需要 API Key)

外部 API 需要在请求头中包含 API Key:

X-API-Key: sk_your_api_key_here

主要端点:

  • GET /api/external/websites/{websiteId}/accounts/random - 获取随机账号
  • GET /api/external/websites - 获取可访问的网站列表

详细 API 文档请访问: http://localhost:5093/swagger

🐳 Docker 部署

部署总览(快速对照)

  • docker-compose.yml(单镜像/SQLite): 本机 5095 → 容器 5093;卷 accountbox-data:/app/data
  • docker-compose.mysql.yml(MySQL 栈): MySQL 3306、phpMyAdmin 8080、应用 5095
  • docker-compose.postgres.yml(PostgreSQL 栈): PostgreSQL 5432、pgAdmin 5050、应用 5095
  • docker-compose.prod.yml(生产一体化): 后端 + 数据库,使用根 Dockerfile

本地部署

单镜像部署(推荐)

docker-compose -f docker-compose.yml up -d

访问: http://localhost:5093

分离镜像部署

docker-compose up -d

访问:

线上部署

使用公共镜像 docker.cnb.cool/rich/public/accountbox 进行部署。

SQLite 版本

docker run -d \ --name accountbox \ -p 5093:8080 \ -v accountbox_data:/app/data \ -e ASPNETCORE_ENVIRONMENT=Production \ -e ASPNETCORE_URLS=http://+:8080 \ -e MASTER_PASSWORD=your_master_password \ docker.cnb.cool/rich/public/accountbox:latest

PostgreSQL 版本

docker run -d \ --name accountbox \ -p 5093:8080 \ -e ASPNETCORE_ENVIRONMENT=Production \ -e ASPNETCORE_URLS=http://+:8080 \ -e MASTER_PASSWORD=your_master_password \ -e ConnectionStrings__DefaultConnection="Host=postgres;Port=5432;Database=accountbox;Username=postgres;Password=your_password" \ --link postgres:postgres \ docker.cnb.cool/rich/public/accountbox:latest

Docker Compose 部署(推荐)

SQLite 单镜像 (docker-compose.yml):

services: accountbox: build: context: . dockerfile: Dockerfile container_name: accountbox-all-in-one ports: - "5095:5093" volumes: - accountbox-data:/app/data environment: - ASPNETCORE_ENVIRONMENT=Production - DATABASE_PATH=/app/data/accountbox.db - ASPNETCORE_URLS=http://+:5093 - MASTER_PASSWORD=${MASTER_PASSWORD:-admin123} restart: unless-stopped volumes: accountbox-data:

启动:

docker compose -f docker-compose.yml up -d

⚠️ 重要: 请将 your_master_password 替换为强密码

PostgreSQL 栈 (docker-compose.postgres.yml):

services: postgres: image: postgres:16-alpine container_name: accountbox-postgres environment: - POSTGRES_DB=accountbox - POSTGRES_USER=accountbox - POSTGRES_PASSWORD=accountbox123 volumes: - postgres-data:/var/lib/postgresql/data restart: unless-stopped accountbox: build: context: . dockerfile: Dockerfile container_name: accountbox-app ports: - "5095:5093" environment: - ASPNETCORE_ENVIRONMENT=Production - DB_PROVIDER=postgresql - CONNECTION_STRING=Host=postgres;Port=5432;Database=accountbox;Username=accountbox;Password=accountbox123 - ASPNETCORE_URLS=http://+:5093 - MASTER_PASSWORD=${MASTER_PASSWORD:-admin123} depends_on: - postgres restart: unless-stopped volumes: postgres-data:

启动:

docker compose -f docker-compose.postgres.yml up -d

MySQL 栈 (docker-compose.mysql.yml):

services: mysql: image: mysql:8.0 container_name: accountbox-mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: accountbox MYSQL_USER: accountbox MYSQL_PASSWORD: accountbox123 volumes: - mysql-data:/var/lib/mysql restart: unless-stopped accountbox: build: context: . dockerfile: Dockerfile container_name: accountbox-app ports: - "5095:5093" environment: - ASPNETCORE_ENVIRONMENT=Production - DB_PROVIDER=mysql - CONNECTION_STRING=Server=mysql;Port=3306;Database=accountbox;User=accountbox;Password=accountbox123 - ASPNETCORE_URLS=http://+:5093 - MASTER_PASSWORD=${MASTER_PASSWORD:-admin123} depends_on: - mysql restart: unless-stopped volumes: mysql-data:

启动:

docker compose -f docker-compose.mysql.yml up -d

⚠️ 重要: 请将以下参数替换为强密码:

  • your_master_password - 应用主密码
  • your_db_password - PostgreSQL 数据库密码

详细 Docker 部署指南请参考 DOCKER.md

📖 开发指南

代码风格

  • 后端: C# 标准命名规范,使用 dotnet format
  • 前端: TypeScript + React,使用 pnpm format

Git 提交规范

<type>[scope]: <description> 类型: feat, fix, docs, style, refactor, test, chore 语言: 中文 示例: feat(auth): 添加 JWT 认证系统

常用命令

# 后端 cd backend/src/AccountBox.Api dotnet run # 运行 dotnet format # 格式化 dotnet test # 测试 dotnet ef migrations add Name # 创建迁移 dotnet ef database update # 应用迁移 # 前端 cd frontend pnpm dev # 开发 pnpm build # 构建 pnpm format # 格式化 pnpm lint # 检查 pnpm test # 测试

🔐 安全建议

⚠️ 重要: 本项目采用明文存储模式,仅适用于个人自托管环境。

  • 仅在 localhost 或 VPN 环境访问
  • 启用防火墙保护
  • 使用磁盘加密保护数据库文件
  • 定期加密备份数据库
  • 主密码应设置为强密码

📝 许可证

MIT License - 详见 LICENSE

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📞 支持

🎯 路线图

  • 数据导入/导出功能
  • 账号分享功能
  • 浏览器扩展
  • 移动应用
  • 端到端加密支持

最后更新: 2025-10-18 | 版本: 2.0 | 状态: 生产就绪

About

No description, topics, or website provided.
Language
C#47.3%
TypeScript37%
Shell13.2%
Dockerfile0.9%
Others1.6%