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