# auto-reply-agent-api-master **Repository Path**: mcxia/auto-reply-agent-api-master ## Basic Information - **Project Name**: auto-reply-agent-api-master - **Description**: AI background - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-09 - **Last Updated**: 2025-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # API Web Service - NestJS 认证系统 基于 NestJS 的认证服务,具有用户注册和登录功能、JWT 令牌管理和 Redis 会话存储。 ## 功能特点 - 用户注册时进行设备 ID 验证 - 用户登录时使用 JWT 认证 - 基于 Redis 的会话管理 - 刷新令牌机制 - 绑定设备 ID 以增强安全性 - 集成 TypeORM 进行数据库操作 - 支持 Docker 容器化部署 ## 系统要求 - Node.js (v18) - Docker 和 Docker Compose (用于本地开发环境) - PostgreSQL (通过 Docker 提供) - Redis (通过 Docker 提供) ## 安装步骤 ```bash # 安装依赖 npm install # 创建 .env 文件(或使用现有文件) # 确保根据需要更新环境变量 ``` ## 配置 根据具体配置更新 `.env` 文件: ``` # Application PORT=3000 NODE_ENV=development # JWT JWT_SECRET=your_jwt_secret_key_here JWT_EXPIRATION=1h REFRESH_TOKEN_EXPIRATION=7d # Redis REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD= # Database DB_TYPE=postgres DB_HOST=localhost DB_PORT=5432 DB_USERNAME=postgres DB_PASSWORD=postgres DB_DATABASE=api_webservice DB_SYNCHRONIZE=true ``` ## 使用 Docker Compose 进行开发环境设置 对于本地开发,我们使用 Docker Compose 设置 PostgreSQL 和 Redis 服务,同时在本地运行 NestJS 应用程序。 ### 使用开发脚本 我们提供了方便的脚本来设置您的开发环境。这些脚本只启动所需的服务(PostgreSQL 和 Redis),但不会自动启动 NestJS 应用程序。 #### Windows (PowerShell) 用户: ```bash # 启动所需的服务(PostgreSQL 和 Redis) ./scripts/dev/start-dev-env.ps1 ``` #### Linux/macOS 用户: ```bash # 启动所需的服务(PostgreSQL 和 Redis) ./scripts/dev/start-dev-env.sh ``` 运行设置脚本后,您需要手动启动 NestJS 应用程序: ```bash # 以开发模式运行应用程序 npm run start:dev ``` ### 手动设置 如果更喜欢手动设置环境: ```bash # 启动所需服务(PostgreSQL 和 Redis) docker-compose up -d # 访问 PostgreSQL 管理界面 # 在浏览器中打开 http://localhost:5050 # 使用 admin@example.com / admin 登录 # 添加一个新服务器,配置如下: # 主机: postgres # 端口: 5432 # 用户名: postgres # 密码: postgres # 访问 Redis Commander 界面 # 在浏览器中打开 http://localhost:8081 # 使用 TypeORM 迁移设置数据库 npm run setup:db # 以开发模式运行应用程序 npm run start:dev ``` ## 数据库迁移 本项目使用 TypeORM 迁移来管理数据库架构变更。迁移存储在 `src/migrations` 中,并在应用程序以生产模式启动时自动应用。 ### 使用迁移 ```bash # 初始化数据库(如果不存在则创建数据库) npm run db:init # 运行迁移以创建/更新架构 npm run migration:run # 根据实体变更生成新的迁移 npm run migration:generate -- src/migrations/MigrationName # 创建空白迁移 npm run migration:create -- src/migrations/CustomMigration # 显示已应用的迁移 npm run migration:show # 还原最后一次迁移 npm run migration:revert ``` ### 生成初始架构迁移 对于基于您的实体定义的干净数据库设置,我们提供了一个特殊脚本: ```bash # 从空数据库生成迁移 npm run migration:generate:empty -- src/migrations/SchemaName ``` 这将: 1. 创建一个全新的空数据库 2. 将您的实体定义与此空数据库进行比较 3. 生成包含所有必要 CREATE TABLE 语句的迁移 ## 生产环境部署 对于生产环境部署,我们使用 Docker Compose 和云资源: ```bash # 创建包含生产环境变量的 .env.prod 文件 # 示例: # JWT_SECRET=your_secure_jwt_secret # REDIS_HOST=your-redis-cloud-host.com # DB_HOST=your-postgres-cloud-host.com # 等等 # 部署应用程序 docker-compose -f docker-compose.yaml -f docker-compose.prod.yaml --env-file .env.prod up -d ``` ## 运行应用程序 ```bash # 开发模式 npm run start:dev # 生产模式 npm run build npm run start:prod ``` ### 使用华为云 OBS 的文件附件 本应用程序使用华为云对象存储服务(OBS)处理文件附件。实现支持: - 为直接文件上传生成预签名 URL(最大 10MB) - 为文件下载生成预签名 URL - 具有适当访问控制的安全文件存储 - 在数据库中跟踪文件元数据 #### OBS 配置 要使用 OBS 集成,请设置以下环境变量: ``` # 华为云 OBS 配置 OBS_ENDPOINT=obs.region.example.com OBS_BUCKET=your-bucket-name OBS_ACCESS_KEY=your-access-key OBS_SECRET_KEY=your-secret-key OBS_TOKEN_EXPIRATION=3600 ``` #### 文件上传流程 1. 客户端从 API 请求预签名上传 URL 2. API 使用华为 OBS SDK 生成预签名 URL 3. 客户端使用预签名 URL 直接将文件上传到 OBS 4. 客户端通过向 API 发送文件元数据确认上传 5. API 在数据库中存储文件元数据 #### 文件下载流程 1. 客户端请求特定附件的预签名下载 URL 2. API 从数据库检索文件元数据 3. API 使用华为 OBS SDK 生成预签名 URL 4. 客户端使用预签名 URL 直接从 OBS 下载文件 ## 测试 ```bash # 单元测试 npm run test ``` ## 安全考虑 - JWT 令牌使用密钥签名 - 密码使用 Argon2 进行哈希处理 - 设备 ID 绑定防止令牌被盗 - Redis 会话管理支持令牌撤销 - 对设备 ID 进行数据库验证