6 changed files with 154 additions and 358 deletions
@ -1,254 +0,0 @@ |
|||||
# 多项目统一部署方案 |
|
||||
|
|
||||
## 目录结构设计 |
|
||||
|
|
||||
在云服务器上创建以下目录结构: |
|
||||
|
|
||||
``` |
|
||||
/projects/ |
|
||||
├── project1/ |
|
||||
│ ├── source/ # 项目源代码 |
|
||||
│ ├── logs/ # 项目日志 |
|
||||
│ ├── docker/ # Docker相关文件 |
|
||||
│ └── docker-compose.yml |
|
||||
├── project2/ |
|
||||
│ ├── source/ |
|
||||
│ ├── logs/ |
|
||||
│ ├── docker/ |
|
||||
│ └── docker-compose.yml |
|
||||
├── project3/ |
|
||||
│ ├── source/ |
|
||||
│ ├── logs/ |
|
||||
│ ├── docker/ |
|
||||
│ └── docker-compose.yml |
|
||||
├── project4/ |
|
||||
│ ├── source/ |
|
||||
│ ├── logs/ |
|
||||
│ ├── docker/ |
|
||||
│ └── docker-compose.yml |
|
||||
└── scripts/ # 统一管理脚本 |
|
||||
├── deploy-all.sh # 一键部署所有项目 |
|
||||
├── update-all.sh # 一键更新所有项目 |
|
||||
├── restart-all.sh # 一键重启所有项目 |
|
||||
└── status-all.sh # 查看所有项目状态 |
|
||||
``` |
|
||||
|
|
||||
## 部署脚本 |
|
||||
|
|
||||
### 1. 创建目录结构脚本 |
|
||||
|
|
||||
```bash |
|
||||
#!/bin/bash |
|
||||
# create-project-structure.sh |
|
||||
|
|
||||
echo "创建多项目统一部署目录结构..." |
|
||||
|
|
||||
# 创建主目录 |
|
||||
mkdir -p /projects/{project1,project2,project3,project4}/{source,logs,docker} |
|
||||
mkdir -p /projects/scripts |
|
||||
|
|
||||
echo "目录结构创建完成!" |
|
||||
echo "目录结构:" |
|
||||
find /projects -type d | sort |
|
||||
``` |
|
||||
|
|
||||
### 2. 统一部署脚本 |
|
||||
|
|
||||
```bash |
|
||||
#!/bin/bash |
|
||||
# /projects/scripts/deploy-all.sh |
|
||||
|
|
||||
echo "开始部署所有项目..." |
|
||||
|
|
||||
# 项目列表 |
|
||||
projects=("project1" "project2" "project3" "project4") |
|
||||
|
|
||||
for project in "${projects[@]}"; do |
|
||||
echo "\n=== 部署 $project ===" |
|
||||
cd /projects/$project |
|
||||
|
|
||||
# 拉取最新代码 |
|
||||
echo "拉取最新代码..." |
|
||||
cd source |
|
||||
git pull origin BOSS |
|
||||
cd .. |
|
||||
|
|
||||
# 构建并启动容器 |
|
||||
echo "构建并启动容器..." |
|
||||
docker-compose down |
|
||||
docker-compose up -d --build |
|
||||
|
|
||||
echo "$project 部署完成!" |
|
||||
done |
|
||||
|
|
||||
echo "\n所有项目部署完成!" |
|
||||
``` |
|
||||
|
|
||||
### 3. 统一更新脚本 |
|
||||
|
|
||||
```bash |
|
||||
#!/bin/bash |
|
||||
# /projects/scripts/update-all.sh |
|
||||
|
|
||||
echo "开始更新所有项目..." |
|
||||
|
|
||||
# 项目列表 |
|
||||
projects=("project1" "project2" "project3" "project4") |
|
||||
|
|
||||
for project in "${projects[@]}"; do |
|
||||
echo "\n=== 更新 $project ===" |
|
||||
cd /projects/$project |
|
||||
|
|
||||
# 拉取最新代码 |
|
||||
echo "拉取最新代码..." |
|
||||
cd source |
|
||||
git pull origin BOSS |
|
||||
cd .. |
|
||||
|
|
||||
# 重新构建并启动容器 |
|
||||
echo "重新构建并启动容器..." |
|
||||
docker-compose down |
|
||||
docker-compose up -d --build |
|
||||
|
|
||||
echo "$project 更新完成!" |
|
||||
done |
|
||||
|
|
||||
echo "\n所有项目更新完成!" |
|
||||
``` |
|
||||
|
|
||||
### 4. 统一状态查看脚本 |
|
||||
|
|
||||
```bash |
|
||||
#!/bin/bash |
|
||||
# /projects/scripts/status-all.sh |
|
||||
|
|
||||
echo "查看所有项目状态..." |
|
||||
|
|
||||
# 项目列表 |
|
||||
projects=("project1" "project2" "project3" "project4") |
|
||||
|
|
||||
for project in "${projects[@]}"; do |
|
||||
echo "\n=== $project 状态 ===" |
|
||||
cd /projects/$project |
|
||||
docker-compose ps |
|
||||
|
|
||||
echo "\n$project 日志(最近10行):" |
|
||||
docker-compose logs --tail=10 |
|
||||
done |
|
||||
|
|
||||
echo "\n所有项目状态查看完成!" |
|
||||
``` |
|
||||
|
|
||||
### 5. 统一重启脚本 |
|
||||
|
|
||||
```bash |
|
||||
#!/bin/bash |
|
||||
# /projects/scripts/restart-all.sh |
|
||||
|
|
||||
echo "开始重启所有项目..." |
|
||||
|
|
||||
# 项目列表 |
|
||||
projects=("project1" "project2" "project3" "project4") |
|
||||
|
|
||||
for project in "${projects[@]}"; do |
|
||||
echo "\n=== 重启 $project ===" |
|
||||
cd /projects/$project |
|
||||
docker-compose restart |
|
||||
echo "$project 重启完成!" |
|
||||
done |
|
||||
|
|
||||
echo "\n所有项目重启完成!" |
|
||||
``` |
|
||||
|
|
||||
## 项目配置示例 |
|
||||
|
|
||||
### 以当前项目为例,创建docker-compose.yml |
|
||||
|
|
||||
```yaml |
|
||||
# /projects/project1/docker-compose.yml |
|
||||
version: '3.8' |
|
||||
|
|
||||
services: |
|
||||
app: |
|
||||
build: ./source/server-example |
|
||||
container_name: project1-server |
|
||||
restart: always |
|
||||
ports: |
|
||||
- "3000:3000" |
|
||||
environment: |
|
||||
- NODE_ENV=production |
|
||||
volumes: |
|
||||
- ./logs:/app/logs |
|
||||
- ./source/server-example/uploads:/app/uploads |
|
||||
depends_on: |
|
||||
- db |
|
||||
|
|
||||
db: |
|
||||
image: mysql:8.0 |
|
||||
container_name: project1-db |
|
||||
restart: always |
|
||||
ports: |
|
||||
- "3306:3306" |
|
||||
environment: |
|
||||
- MYSQL_ROOT_PASSWORD=rootpassword |
|
||||
- MYSQL_DATABASE=wechat_miniprogram |
|
||||
- MYSQL_USER=wechat_user |
|
||||
- MYSQL_PASSWORD=wechat_password |
|
||||
volumes: |
|
||||
- db_data:/var/lib/mysql |
|
||||
|
|
||||
volumes: |
|
||||
db_data: |
|
||||
``` |
|
||||
|
|
||||
## 使用说明 |
|
||||
|
|
||||
1. **创建目录结构**: |
|
||||
```bash |
|
||||
chmod +x create-project-structure.sh |
|
||||
./create-project-structure.sh |
|
||||
``` |
|
||||
|
|
||||
2. **部署项目**: |
|
||||
- 将每个项目的源代码克隆到对应的`/projects/{projectN}/source/`目录 |
|
||||
- 为每个项目创建docker-compose.yml文件 |
|
||||
- 执行统一部署脚本: |
|
||||
```bash |
|
||||
chmod +x /projects/scripts/*.sh |
|
||||
/projects/scripts/deploy-all.sh |
|
||||
``` |
|
||||
|
|
||||
3. **管理项目**: |
|
||||
- 更新所有项目:`/projects/scripts/update-all.sh` |
|
||||
- 查看所有项目状态:`/projects/scripts/status-all.sh` |
|
||||
- 重启所有项目:`/projects/scripts/restart-all.sh` |
|
||||
|
|
||||
## 运维最佳实践 |
|
||||
|
|
||||
1. **日志管理**: |
|
||||
- 所有项目的日志统一存储在`/projects/{projectN}/logs/`目录 |
|
||||
- 可以使用ELK等工具进行统一日志收集和分析 |
|
||||
|
|
||||
2. **备份策略**: |
|
||||
- 定期备份数据库: |
|
||||
```bash |
|
||||
docker exec -t project1-db mysqldump -u wechat_user -p wechat_miniprogram > /projects/backups/project1_db_$(date +%Y%m%d_%H%M%S).sql |
|
||||
``` |
|
||||
- 定期备份源代码和配置文件 |
|
||||
|
|
||||
3. **监控告警**: |
|
||||
- 使用Prometheus和Grafana监控容器和应用状态 |
|
||||
- 设置告警规则,及时发现问题 |
|
||||
|
|
||||
4. **安全措施**: |
|
||||
- 定期更新容器镜像和依赖 |
|
||||
- 配置防火墙,只开放必要的端口 |
|
||||
- 定期检查系统安全漏洞 |
|
||||
|
|
||||
## 注意事项 |
|
||||
|
|
||||
1. 确保每个项目使用不同的端口,避免端口冲突 |
|
||||
2. 为每个项目的数据库设置强密码 |
|
||||
3. 定期清理无用的容器和镜像:`docker system prune -f` |
|
||||
4. 监控磁盘空间使用情况,及时清理日志文件 |
|
||||
5. 考虑使用CI/CD工具(如Jenkins、GitLab CI)实现自动化部署 |
|
||||
@ -1,103 +0,0 @@ |
|||||
# 修复功能测试计划 |
|
||||
|
|
||||
## 1. 测试默认排序规则 |
|
||||
|
|
||||
**测试目的**:验证商品是否按照要求的默认排序规则显示 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 打开小程序首页 |
|
||||
2. 观察商品列表顺序 |
|
||||
3. 确认排序规则: |
|
||||
- 已发布商品(published)在已售罄商品(sold_out)之前 |
|
||||
- 同一状态内,预订数量(reservedCount)高的在前 |
|
||||
- 预订数量相同时,价格低的在前 |
|
||||
- 价格相同时,创建时间晚的在前 |
|
||||
|
|
||||
**预期结果**:商品按照上述规则正确排序 |
|
||||
|
|
||||
## 2. 测试sold_out商品加载逻辑 |
|
||||
|
|
||||
**测试目的**:验证只有当数据库中找不到published商品时才加载sold_out商品 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 打开小程序首页 |
|
||||
2. 检查初始加载的商品是否都是published状态 |
|
||||
3. 向下滑动页面,直到加载更多商品 |
|
||||
4. 确认在所有published商品加载完毕后,才开始加载sold_out商品 |
|
||||
|
|
||||
**预期结果**: |
|
||||
- 初始加载的商品都是published状态 |
|
||||
- 当published商品加载完毕后,自动开始加载sold_out商品 |
|
||||
|
|
||||
## 3. 测试sold_out商品加载功能 |
|
||||
|
|
||||
**测试目的**:验证sold_out商品能够正常加载 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 打开小程序首页 |
|
||||
2. 向下滑动页面,直到加载sold_out商品 |
|
||||
3. 检查是否有sold_out状态的商品显示 |
|
||||
|
|
||||
**预期结果**:sold_out商品能够正常显示在列表中 |
|
||||
|
|
||||
## 4. 测试下滑到底部加载功能 |
|
||||
|
|
||||
**测试目的**:验证下滑到底部能够加载更多商品,包括sold_out商品 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 打开小程序首页 |
|
||||
2. 连续向下滑动页面,直到到达列表底部 |
|
||||
3. 观察是否自动加载更多商品 |
|
||||
4. 继续滑动,直到加载sold_out商品 |
|
||||
|
|
||||
**预期结果**: |
|
||||
- 下滑到底部时自动加载更多商品 |
|
||||
- published商品加载完毕后,自动加载sold_out商品 |
|
||||
|
|
||||
## 5. 测试下拉刷新功能 |
|
||||
|
|
||||
**测试目的**:验证下拉刷新不会改变已加载商品的顺序 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 打开小程序首页 |
|
||||
2. 观察初始商品顺序,记住前几个商品 |
|
||||
3. 下拉页面进行刷新 |
|
||||
4. 刷新完成后,观察商品顺序是否变化 |
|
||||
|
|
||||
**预期结果**:下拉刷新后,已加载商品的顺序保持不变,新商品添加在列表底部 |
|
||||
|
|
||||
## 6. 测试分类和搜索功能 |
|
||||
|
|
||||
**测试目的**:验证分类和搜索功能下,排序和加载逻辑依然正常 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 选择一个分类(如"粉壳") |
|
||||
2. 观察商品排序是否正确 |
|
||||
3. 向下滑动加载更多商品,验证是否正常加载sold_out商品 |
|
||||
4. 进行搜索,重复步骤2和3 |
|
||||
|
|
||||
**预期结果**:分类和搜索功能下,所有排序和加载逻辑都正常工作 |
|
||||
|
|
||||
## 7. 测试缓存功能 |
|
||||
|
|
||||
**测试目的**:验证缓存机制不会影响排序和加载逻辑 |
|
||||
|
|
||||
**测试步骤**: |
|
||||
1. 打开小程序首页,加载商品 |
|
||||
2. 关闭小程序 |
|
||||
3. 重新打开小程序 |
|
||||
4. 观察商品是否从缓存加载,排序是否正确 |
|
||||
|
|
||||
**预期结果**:缓存加载的商品保持正确的排序顺序 |
|
||||
|
|
||||
## 测试环境要求 |
|
||||
|
|
||||
- WeChat Developer Tools最新版本 |
|
||||
- 测试用手机(推荐)或模拟器 |
|
||||
- 稳定的网络连接 |
|
||||
|
|
||||
## 测试注意事项 |
|
||||
|
|
||||
1. 记录测试过程中的任何异常情况 |
|
||||
2. 如果发现问题,尝试重现并记录详细步骤 |
|
||||
3. 测试完成后,汇总测试结果 |
|
||||
Loading…
Reference in new issue