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