You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

255 lines
5.8 KiB

# 多项目统一部署方案
## 目录结构设计
在云服务器上创建以下目录结构:
```
/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)实现自动化部署