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

多项目统一部署方案

目录结构设计

在云服务器上创建以下目录结构:

/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:

使用说明

  1. 创建目录结构

    chmod +x create-project-structure.sh
    ./create-project-structure.sh
    
  2. 部署项目

    • 将每个项目的源代码克隆到对应的/projects/{projectN}/source/目录
    • 为每个项目创建docker-compose.yml文件
    • 执行统一部署脚本:
      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. 备份策略

    • 定期备份数据库:
      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)实现自动化部署