254 lines
5.7 KiB
Markdown
254 lines
5.7 KiB
Markdown
# Identity Service 部署和测试指南
|
||
|
||
## 项目架构验证
|
||
|
||
本项目采用DDD(领域驱动设计)四层架构:
|
||
|
||
### 1. 表现层(API Layer)
|
||
- 位置:`src/api/`
|
||
- 职责:处理HTTP请求,参数验证,响应格式化
|
||
- 主要组件:Controllers, DTOs, Validators
|
||
|
||
### 2. 应用层(Application Layer)
|
||
- 位置:`src/application/`
|
||
- 职责:编排业务流程,事务管理,命令查询分离
|
||
- 主要组件:Commands, Queries, Application Services
|
||
|
||
### 3. 领域层(Domain Layer)
|
||
- 位置:`src/domain/`
|
||
- 职责:业务逻辑,领域模型,业务规则
|
||
- 主要组件:Aggregates, Entities, Value Objects, Domain Services, Events
|
||
|
||
### 4. 基础设施层(Infrastructure Layer)
|
||
- 位置:`src/infrastructure/`
|
||
- 职责:技术实现细节,外部服务集成
|
||
- 主要组件:Repositories, Redis, Kafka, External Services
|
||
|
||
## 构建和部署
|
||
|
||
### 环境准备
|
||
|
||
1. **Node.js**: 需要 Node.js 20.x 或更高版本
|
||
2. **Docker**: 用于容器化部署
|
||
3. **PostgreSQL**: 数据库(可通过Docker运行)
|
||
4. **Redis**: 缓存服务(可通过Docker运行)
|
||
5. **Kafka**: 消息队列(可通过Docker运行)
|
||
|
||
### 本地开发
|
||
|
||
1. **克隆项目并安装依赖**
|
||
```bash
|
||
cd identity-service
|
||
npm install
|
||
```
|
||
|
||
2. **配置环境变量**
|
||
```bash
|
||
cp .env.example .env
|
||
# 编辑 .env 文件,配置数据库连接等信息
|
||
```
|
||
|
||
3. **启动依赖服务(使用Docker)**
|
||
```bash
|
||
docker compose up -d postgres redis kafka
|
||
```
|
||
|
||
4. **初始化数据库**
|
||
```bash
|
||
# 生成Prisma Client
|
||
npm run prisma:generate
|
||
|
||
# 运行数据库迁移
|
||
npm run prisma:migrate
|
||
```
|
||
|
||
5. **启动服务**
|
||
```bash
|
||
# 开发模式(支持热重载)
|
||
npm run start:dev
|
||
|
||
# 生产模式
|
||
npm run build
|
||
npm run start:prod
|
||
```
|
||
|
||
### Docker部署
|
||
|
||
1. **使用Docker Compose一键部署**
|
||
```bash
|
||
# 构建并启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 查看日志
|
||
docker-compose logs -f identity-service
|
||
|
||
# 停止服务
|
||
docker-compose down
|
||
```
|
||
|
||
2. **单独构建Docker镜像**
|
||
```bash
|
||
# 构建镜像
|
||
docker build -t identity-service:latest .
|
||
|
||
# 运行容器
|
||
docker run -d \
|
||
-p 3000:3000 \
|
||
-e DATABASE_URL="postgresql://user:pass@host:5432/db" \
|
||
-e REDIS_HOST="redis-host" \
|
||
-e KAFKA_BROKERS="kafka:9092" \
|
||
--name identity-service \
|
||
identity-service:latest
|
||
```
|
||
|
||
## API测试
|
||
|
||
### 1. 访问Swagger文档
|
||
启动服务后访问:http://localhost:3000/api/docs
|
||
|
||
### 2. 主要API端点
|
||
|
||
#### 自动创建账户(首次使用)
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/v1/user/auto-create \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"deviceId": "device-123-456",
|
||
"deviceName": "iPhone 15 Pro",
|
||
"inviterReferralCode": "ABCD1234",
|
||
"provinceCode": "GD",
|
||
"cityCode": "GZ"
|
||
}'
|
||
```
|
||
|
||
#### 用助记词恢复账户
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/v1/user/recover-by-mnemonic \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"accountSequence": 1000001,
|
||
"mnemonic": "your twelve word mnemonic phrase here",
|
||
"newDeviceId": "device-789",
|
||
"deviceName": "New Device"
|
||
}'
|
||
```
|
||
|
||
#### 自动登录(Token刷新)
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/v1/user/auto-login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"refreshToken": "your-refresh-token",
|
||
"deviceId": "device-123-456"
|
||
}'
|
||
```
|
||
|
||
#### 获取个人资料(需要认证)
|
||
```bash
|
||
curl -X GET http://localhost:3000/api/v1/user/my-profile \
|
||
-H "Authorization: Bearer your-access-token"
|
||
```
|
||
|
||
#### 绑定手机号
|
||
```bash
|
||
# 1. 发送验证码
|
||
curl -X POST http://localhost:3000/api/v1/user/send-sms-code \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"phoneNumber": "+8613812345678",
|
||
"type": "BIND_PHONE"
|
||
}'
|
||
|
||
# 2. 绑定手机号
|
||
curl -X POST http://localhost:3000/api/v1/user/bind-phone \
|
||
-H "Authorization: Bearer your-access-token" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"phoneNumber": "+8613812345678",
|
||
"smsCode": "123456"
|
||
}'
|
||
```
|
||
|
||
## 生产环境部署建议
|
||
|
||
### 1. 数据库优化
|
||
- 使用连接池
|
||
- 设置合适的索引
|
||
- 定期备份
|
||
|
||
### 2. Redis配置
|
||
- 启用持久化(RDB或AOF)
|
||
- 设置合适的内存限制
|
||
- 配置密码认证
|
||
|
||
### 3. Kafka配置
|
||
- 设置合适的分区数
|
||
- 配置副本因子
|
||
- 监控消费者滞后
|
||
|
||
### 4. 安全建议
|
||
- 使用强密码的JWT密钥
|
||
- 启用HTTPS
|
||
- 配置CORS白名单
|
||
- 使用环境变量管理敏感信息
|
||
|
||
### 5. 监控和日志
|
||
- 集成监控工具(Prometheus、Grafana)
|
||
- 配置结构化日志
|
||
- 设置告警规则
|
||
|
||
## 故障排查
|
||
|
||
### 常见问题
|
||
|
||
1. **数据库连接失败**
|
||
- 检查DATABASE_URL配置
|
||
- 确认PostgreSQL服务正在运行
|
||
- 检查网络连接
|
||
|
||
2. **Redis连接失败**
|
||
- 检查REDIS_HOST和REDIS_PORT
|
||
- 确认Redis服务正在运行
|
||
- 检查防火墙设置
|
||
|
||
3. **Kafka连接失败**
|
||
- 检查KAFKA_BROKERS配置
|
||
- 确认Kafka和Zookeeper正在运行
|
||
- 检查网络连接
|
||
|
||
4. **Prisma错误**
|
||
- 运行 `npm run prisma:generate`
|
||
- 检查数据库模式是否最新
|
||
- 运行 `npm run prisma:migrate`
|
||
|
||
### 日志查看
|
||
```bash
|
||
# Docker日志
|
||
docker-compose logs -f identity-service
|
||
|
||
# 本地开发日志
|
||
npm run start:dev
|
||
```
|
||
|
||
## 性能优化
|
||
|
||
1. **启用查询优化**
|
||
- 使用Prisma的`select`和`include`优化查询
|
||
- 实现分页
|
||
- 使用Redis缓存热数据
|
||
|
||
2. **并发处理**
|
||
- 使用NestJS的异步特性
|
||
- 合理配置线程池
|
||
- 使用消息队列处理耗时任务
|
||
|
||
3. **监控指标**
|
||
- API响应时间
|
||
- 数据库查询性能
|
||
- Redis命中率
|
||
- Kafka消费延迟
|
||
|
||
## 联系支持
|
||
|
||
如有问题,请查看项目文档或联系开发团队。
|