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



./start.sh
# 终端 1: 启动后端
cd backend/src/AccountBox.Api
dotnet run
# 终端 2: 启动前端
cd frontend
pnpm install # 首次需要
pnpm dev
# 单镜像部署(推荐)
docker-compose -f docker-compose.yml up -d
# 或分离镜像部署
docker-compose up -d
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 需要在请求头中包含 JWT Token:
Authorization: Bearer <your-jwt-token>
主要端点:
GET /api/websites - 获取网站列表GET /api/accounts - 获取账号列表GET /api/search - 全文搜索GET /api/api-keys - 获取 API 密钥列表外部 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-compose.yml(单镜像/SQLite): 本机 5095 → 容器 5093;卷 accountbox-data:/app/datadocker-compose.mysql.yml(MySQL 栈): MySQL 3306、phpMyAdmin 8080、应用 5095docker-compose.postgres.yml(PostgreSQL 栈): PostgreSQL 5432、pgAdmin 5050、应用 5095docker-compose.prod.yml(生产一体化): 后端 + 数据库,使用根 Dockerfiledocker-compose -f docker-compose.yml up -d
docker-compose up -d
访问:
使用公共镜像 docker.cnb.cool/rich/public/accountbox 进行部署。
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
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
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
dotnet formatpnpm format<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 # 测试
⚠️ 重要: 本项目采用明文存储模式,仅适用于个人自托管环境。
MIT License - 详见 LICENSE
欢迎提交 Issue 和 Pull Request!
最后更新: 2025-10-18 | 版本: 2.0 | 状态: 生产就绪