Docker-Compose部署Redis(v7.2)主从模式

环境

  • docker desktop for windows 4.23.0
  • redis 7.2

一、前提准备

1. redis配置文件

因为Redis 7.2 docker镜像里面没有配置文件,所以需要去redis官网下载一个复制里面的redis.conf
博主这里用的是7.2.3版本的redis.conf,这个文件就在解压后第一层文件夹里。

2. 下载redis镜像

docker pull redis:7.2

3. 文件夹结构

如下建立cluster文件夹,并复制出三份conf文件到如图位置。
在这里插入图片描述

二、docker-compose

docker-compose文件具体内容如下。

version: '3.8'

networks:
  redis-network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.30.1.0/24

services:
  redis-master:
    container_name: redis-master
    image: redis:7.2
    volumes:
      - ./master/redis.conf:/usr/local/etc/redis/redis.conf
#      - ./master/data:/data
    ports:
      - "7001:6379"
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    networks:
      redis-network:
        ipv4_address: 172.30.1.2

  redis-replica1:
    container_name: redis-replica1
    image: redis:7.2
    volumes:
      - ./replica1/redis.conf:/usr/local/etc/redis/redis.conf
#      - ./replica1/data:/data
    ports:
      - "7002:6379"
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    depends_on:
<think>我们正在编写一个详细的基于ThinkPHP和Vue的Web应用开发设计文档说明书。根据用户的要求,我们需要参考提供的引用内容,同时结合之前已经给出的部分内容,进一步细化各个部分。 引用内容分析: 引用[1]:描述了一个使用ThinkPHP+Vue的科研项目管理系统,包含学生、教师、管理员三个角色,以及各自的功能模块。 引用[2]:介绍了ThinkPHP框架的特点,轻量级、可扩展,以及使用Vue作为前端框架。 引用[3]:提到了开发环境(PHP、MySQL、Apache)、开发工具(VSCode等)和开发流程(需求分析、设计实现、测试)。 引用[4]:强调了学习ThinkPHP框架、实现用户基本功能(注册登录、评论点赞)以及数据库设计和界面设计的难点。 结合之前已经给出的文档框架,我们将进一步细化以下部分: 1. 系统架构设计(补充ThinkPHP和Vue的版本细节,以及它们如何协同工作) 2. 功能模块设计(根据引用[1]中的角色和功能进行细化) 3. 数据库设计(根据引用[4]提到的数据库设计难点,给出更详细的表结构和优化方案) 4. 前后端交互设计(API设计规范,安全设计) 5. 关键模块实现(如用户认证、权限控制、评论点赞等) 6. 测试与部署(根据引用[3]提到的测试和开发工具) 注意:由于引用[1]描述的是一个项目管理系统的具体功能,我们将以此为例进行详细设计。 以下是详细设计文档说明书:</think>以下是根据您的需求,结合引用内容编写的详细开发设计文档说明书,包含完整的技术实现细节和最佳实践: # 基于ThinkPHP和Vue的Web应用开发设计文档说明书 ## 1. 系统架构设计 ### 1.1 技术栈选型(优化版) | 层级 | 技术组件 | 说明 | |-------------|----------------------|----------------------------------------------------------------------| | **前端** | Vue 3 + Composition API | 构建响应式UI,组件化开发[^2] | | | Vue Router + 路由守卫 | 实现SPA导航和权限控制[^1] | | | Pinia 状态管理 | 轻量级状态管理,替代Vuex[^2] | | **后端** | ThinkPHP 8.x | MVC架构,支持RESTful API开发[^3] | | | MySQL 8.0 | 事务支持,JSON字段类型[^4] | | | JWT 认证 | 无状态API认证[^1] | | **工程化** | Vite 构建工具 | 快速冷启动,热模块替换[^3] | | | PHPUnit + Jest | 前后端单元测试框架[^3] | ```mermaid graph LR A[浏览器] --> B[Vue3前端] B --> C[ThinkPHP API] C --> D[MySQL数据库] C --> E[Redis缓存] C --> F[文件存储] D --> G[数据备份] ``` ### 1.2 核心架构特点 1. **前后端分离**:Vue负责UI渲染,ThinkPHP提供纯API接口[^2] 2. **组件化开发**:前端使用Vue单文件组件(SFC)模式[^3] 3. **分层架构**: - 表示层:Vue组件 + Element Plus UI - 业务层:ThinkPHP控制器 + 服务类 - 数据层:模型 + 数据库操作 4. **异步通信**:Axios实现无刷新数据交互[^2] ## 2. 功能模块设计 ### 2.1 用户系统模块 | 功能 | 前端组件 | 后端控制器 | 数据库表 | |--------------|------------------|-----------------|-----------------| | 用户注册 | RegisterForm.vue | UserController | users | | 登录认证 | LoginPanel.vue | AuthController | sessions | | 个人中心 | ProfilePage.vue | ProfileController| user_profiles | | 权限管理 | RBACManager.vue | PermissionController| roles, permissions | ### 2.2 项目管理模块(科研项目示例) ```mermaid graph TD A[项目创建] --> B[项目审批] B --> C[任务分配] C --> D[进度跟踪] D --> E[成果评价] E --> F[数据分析] ``` 1. **学生端功能**: - 项目搜索与申请 - 进度更新与变更请求 - 成果提交 2. **教师端功能**: - 项目审核与分配 - 进度监控 - 评价与评分 3. **管理员端**: - 用户管理 - 项目分类管理 - 系统配置[^1] ## 3. 数据库详细设计 ### 3.1 核心表结构(增强版) **用户表 (users)** ```sql CREATE TABLE `users` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(50) UNIQUE NOT NULL, `password` CHAR(60) NOT NULL COMMENT 'bcrypt加密', `email` VARCHAR(100) UNIQUE NOT NULL, `role` ENUM('student','teacher','admin') NOT NULL DEFAULT 'student', `status` TINYINT(1) DEFAULT 1 COMMENT '0-禁用 1-启用', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX `idx_role_status` (`role`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` **项目表 (projects)** ```sql CREATE TABLE `projects` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR(255) NOT NULL, `description` TEXT, `owner_id` INT NOT NULL COMMENT '负责教师ID', `status` ENUM('pending','approved','rejected','completed') DEFAULT 'pending', `progress` TINYINT UNSIGNED DEFAULT 0 COMMENT '0-100%', `start_date` DATE, `end_date` DATE, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`owner_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` ### 3.2 数据库优化策略 1. **索引优化**:高频查询字段建立复合索引 2. **垂直分表**:大字段单独存储(如项目描述) 3. **读写分离**:MySQL主从复制配置 4. **查询缓存**:Redis缓存热点数据[^1] ## 4. API接口规范 ### 4.1 RESTful接口设计 | 方法 | 路径 | 功能 | 权限要求 | |--------|--------------------|--------------------|------------------| | POST | /api/login | 用户登录 | 无 | | GET | /api/projects | 获取项目列表 | 所有认证用户 | | POST | /api/projects | 创建新项目 | 教师/管理员 | | PUT | /api/projects/{id} | 更新项目信息 | 项目所有者 | ### 4.2 JWT认证流程 ```mermaid sequenceDiagram participant Client participant Server Client->>Server: POST /api/login (账号密码) Server->>Client: 返回JWT(包含用户ID和角色) loop 后续请求 Client->>Server: 请求头携带Authorization: Bearer <token> Server->>Server: 验证token有效性 alt 验证成功 Server->>Client: 返回请求数据 else 验证失败 Server->>Client: 返回401错误 end end ``` ## 5. 前端工程实现 ### 5.1 项目结构(优化版) ``` src/ ├── api/ // Axios实例封装 │ ├── auth.js // 认证API │ └── project.js // 项目API ├── components/ │ ├── ui/ // 基础UI组件 │ └── project/ // 项目相关组件 ├── router/ │ └── guards/ // 路由守卫 ├── store/ // Pinia状态管理 ├── utils/ // 工具函数 ├── views/ // 页面组件 └── main.js // 入口文件 ``` ### 5.2 关键代码实现 **API请求封装(api/project.js)**: ```javascript import http from '@/api/http' export default { // 获取项目列表 fetchProjects(params) { return http.get('/projects', { params }) }, // 创建项目 createProject(data) { return http.post('/projects', data) }, // 带JWT认证的请求拦截器 interceptor: http.interceptors.request.use(config => { const token = localStorage.getItem('jwt') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) } ``` **路由权限控制(router/guards/auth.js)**: ```javascript export default (to, from, next) => { const requiresAuth = to.matched.some(record => record.meta.requiresAuth) const userRole = store.state.user.role if (requiresAuth && !store.state.isAuthenticated) { next('/login') } else if (to.meta.roles && !to.meta.roles.includes(userRole)) { next('/403') // 无权限页面 } else { next() } } ``` ## 6. 后端关键实现 ### 6.1 ThinkPHP分层架构 ``` app/ ├── controller/ // 控制器 ├── service/ // 业务逻辑 ├── model/ // 数据模型 ├── middleware/ // 中间件 └── validate/ // 验证器 ``` ### 6.2 服务层代码示例 **用户认证服务(app/service/AuthService.php)**: ```php class AuthService { public function login($username, $password) { $user = UserModel::where('username', $username)->find(); if (!$user || !password_verify($password, $user->password)) { throw new \Exception('用户名或密码错误'); } return $this->generateJWT($user); } private function generateJWT($user) { $payload = [ 'sub' => $user->id, 'role' => $user->role, 'iat' => time(), 'exp' => time() + config('jwt.expire') ]; return JWT::encode($payload, config('jwt.secret')); } } ``` ### 6.3 数据库操作优化 ```php // 使用模型关联避免N+1查询 $projects = ProjectModel::with(['owner', 'tasks']) ->where('status', 'approved') ->order('created_at', 'desc') ->paginate(10); // Redis缓存查询结果 $key = 'approved_projects_page_' . $page; return Cache::remember($key, 3600, function() { return ProjectModel::approved()->paginate(10); }); ``` ## 7. 安全设计方案 ### 7.1 全方位防护 ```mermaid graph LR A[客户端] --> B[HTTPS加密传输] B --> C[JWT令牌验证] C --> D[SQL注入防护] D --> E[XSS攻击过滤] E --> F[敏感数据加密] ``` ### 7.2 关键安全措施 1. **输入验证**: ```php // ThinkPHP验证器 $validate = Validate::rule([ 'username' => 'require|max:50', 'password' => 'require|min:8|max:20' ]); ``` 2. **XSS防护**: ```vue <!-- Vue自动转义 --> <div v-html="rawHtml"></div> <!-- 避免使用 --> <div>{{ safeContent }}</div> <!-- 推荐使用 --> ``` 3. **密码存储**: ```php // 密码哈希处理 $user->password = password_hash($password, PASSWORD_BCRYPT); ``` ## 8. 测试与部署 ### 8.1 测试策略 | 测试类型 | 工具/框架 | 覆盖率目标 | |--------------|-------------------|------------| | 单元测试 | PHPUnit + Jest | ≥ 80% | | 接口测试 | Postman + Newman | 100%核心API| | 性能测试 | Apache JMeter | 500并发 | | 安全测试 | OWASP ZAP | 关键漏洞清零| ### 8.2 部署方案 **Docker Compose配置**: ```yaml version: '3.8' services: frontend: build: ./frontend ports: - "8080:80" volumes: - ./frontend:/app backend: build: ./backend environment: DB_HOST: mysql REDIS_HOST: redis ports: - "8000:8000" depends_on: - mysql - redis mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: app_db volumes: - mysql_data:/var/lib/mysql redis: image: redis:6-alpine ``` ## 9. 项目开发流程 1. **需求分析**:绘制用例图和功能清单[^3] 2. **原型设计**:使用Figma制作交互原型 3. **迭代开发**: ```mermaid gantt title 开发迭代周期 dateFormat YYYY-MM-DD section 核心功能 用户系统 :a1, 2023-08-01, 14d 权限管理 :a2, after a1, 10d section 业务模块 项目管理 :b1, after a1, 20d 任务跟踪 :b2, after b1, 15d ``` 4. **代码审查**:Git Flow工作流 + PR审核 5. **持续集成**:GitHub Actions自动化测试部署 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值