52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # 检查参数
 | |
| if [ "$#" -lt 1 ]; then
 | |
|     echo "使用方法: $0 <实例数量>"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # 实例数量
 | |
| NUM_INSTANCES=$1
 | |
| BASE_PORT=5088  # 从5088开始
 | |
| 
 | |
| # 构建基础镜像
 | |
| echo "构建基础镜像..."
 | |
| docker-compose build
 | |
| 
 | |
| # 停止并删除旧容器
 | |
| echo "清理旧容器..."
 | |
| for ((i=1; i<=$NUM_INSTANCES; i++))
 | |
| do
 | |
|     INSTANCE_NAME="stock-app-$i"
 | |
|     docker stop $INSTANCE_NAME 2>/dev/null
 | |
|     docker rm $INSTANCE_NAME 2>/dev/null
 | |
| done
 | |
| 
 | |
| # 部署新实例
 | |
| echo "开始部署 $NUM_INSTANCES 个实例..."
 | |
| for ((i=1; i<=$NUM_INSTANCES; i++))
 | |
| do
 | |
|     INSTANCE_NAME="stock-app-$i"
 | |
|     PORT=$((BASE_PORT + i - 1))  # 从5088开始递增
 | |
|     DATA_DIR="./instances/instance-$i"
 | |
|     
 | |
|     # 创建实例目录
 | |
|     mkdir -p "$DATA_DIR/logs"
 | |
|     mkdir -p "$DATA_DIR/reports"
 | |
|     
 | |
|     echo "部署实例 $i: $INSTANCE_NAME 在端口 $PORT"
 | |
|     docker run -d \
 | |
|         --name $INSTANCE_NAME \
 | |
|         -p $PORT:5000 \
 | |
|         -v "$DATA_DIR/logs:/app/logs" \
 | |
|         -v "$DATA_DIR/reports:/app/reports" \
 | |
|         -e "FLASK_ENV=production" \
 | |
|         -e "FLASK_APP=src/app.py" \
 | |
|         -e "INSTANCE_ID=$i" \
 | |
|         --restart unless-stopped \
 | |
|         gpfx-app:latest
 | |
| done
 | |
| 
 | |
| echo "全部实例已部署完成!"
 | |
| echo "运行 'docker ps' 查看所有实例状态"  |