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.
5.8 KiB
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. 创建目录结构脚本
#!/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. 统一部署脚本
#!/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. 统一更新脚本
#!/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. 统一状态查看脚本
#!/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. 统一重启脚本
#!/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
# /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:
使用说明
-
创建目录结构:
chmod +x create-project-structure.sh ./create-project-structure.sh -
部署项目:
- 将每个项目的源代码克隆到对应的
/projects/{projectN}/source/目录 - 为每个项目创建docker-compose.yml文件
- 执行统一部署脚本:
chmod +x /projects/scripts/*.sh /projects/scripts/deploy-all.sh
- 将每个项目的源代码克隆到对应的
-
管理项目:
- 更新所有项目:
/projects/scripts/update-all.sh - 查看所有项目状态:
/projects/scripts/status-all.sh - 重启所有项目:
/projects/scripts/restart-all.sh
- 更新所有项目:
运维最佳实践
-
日志管理:
- 所有项目的日志统一存储在
/projects/{projectN}/logs/目录 - 可以使用ELK等工具进行统一日志收集和分析
- 所有项目的日志统一存储在
-
备份策略:
- 定期备份数据库:
docker exec -t project1-db mysqldump -u wechat_user -p wechat_miniprogram > /projects/backups/project1_db_$(date +%Y%m%d_%H%M%S).sql - 定期备份源代码和配置文件
- 定期备份数据库:
-
监控告警:
- 使用Prometheus和Grafana监控容器和应用状态
- 设置告警规则,及时发现问题
-
安全措施:
- 定期更新容器镜像和依赖
- 配置防火墙,只开放必要的端口
- 定期检查系统安全漏洞
注意事项
- 确保每个项目使用不同的端口,避免端口冲突
- 为每个项目的数据库设置强密码
- 定期清理无用的容器和镜像:
docker system prune -f - 监控磁盘空间使用情况,及时清理日志文件
- 考虑使用CI/CD工具(如Jenkins、GitLab CI)实现自动化部署