auto-deploy-demo/build-dist.sh

196 lines
3.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 部署打包脚本 (Linux/Mac)
# 使用方法:
# ./build-dist.sh # 多端口模式(默认)
# ./build-dist.sh --single-port # 单端口模式
set -e
DIST_DIR="deploy-dist"
SINGLE_PORT=false
# 解析参数
while [[ "$#" -gt 0 ]]; do
case $1 in
--single-port) SINGLE_PORT=true ;;
*) echo "未知参数: $1"; exit 1 ;;
esac
shift
done
echo "=== 构建部署包 ==="
if [ "$SINGLE_PORT" = true ]; then
echo "模式: 单端口模式(8080→80)"
else
echo "模式: 多端口模式(8888+9000-9100)"
fi
# 1. 清理旧的部署目录
if [ -d "$DIST_DIR" ]; then
echo "清理旧的部署目录..."
rm -rf "$DIST_DIR"
fi
# 2. 创建目录结构
echo "创建目录结构..."
mkdir -p "$DIST_DIR/server"
mkdir -p "$DIST_DIR/client/dist"
mkdir -p "$DIST_DIR/data"
mkdir -p "$DIST_DIR/projects"
mkdir -p "$DIST_DIR/nginx/sites-enabled"
mkdir -p "$DIST_DIR/deploy"
# 3. 安装后端依赖
echo "安装后端依赖..."
npm install --production
# 4. 构建前端
echo "构建前端..."
cd client
npm install
npm run build
cd ..
# 5. 复制文件
echo "复制文件..."
# 后端代码
cp -r server/* "$DIST_DIR/server/"
# 前端构建产物
cp -r client/dist/* "$DIST_DIR/client/dist/"
# 配置文件
cp package.json "$DIST_DIR/"
cp package-lock.json "$DIST_DIR/"
cp .env.example "$DIST_DIR/"
# Docker文件
cp deploy/start.sh "$DIST_DIR/deploy/"
if [ "$SINGLE_PORT" = true ]; then
# 单端口模式
cp deploy/Dockerfile.single "$DIST_DIR/Dockerfile"
cp deploy/docker-compose.single.yml "$DIST_DIR/docker-compose.yml"
else
# 多端口模式
cp deploy/Dockerfile "$DIST_DIR/Dockerfile"
cp deploy/docker-compose.yml "$DIST_DIR/docker-compose.yml"
fi
# 6. 创建 .env 文件
echo "创建 .env 文件..."
if [ "$SINGLE_PORT" = true ]; then
cat > "$DIST_DIR/.env" << 'EOF'
# 服务端口(容器内部)
PORT=8888
# 基础域名(修改为您的域名)
BASE_DOMAIN=
# 项目端口范围
PROJECT_PORT_START=9000
PROJECT_PORT_END=9100
# 单端口模式项目绑定到127.0.0.1容器内Nginx代理
PROJECT_BIND_ADDRESS=127.0.0.1
# 启用内置Nginx
USE_NGINX=true
EOF
else
cat > "$DIST_DIR/.env" << 'EOF'
# 服务端口
PORT=8888
# 基础域名(修改为您的域名)
BASE_DOMAIN=
# 项目端口范围
PROJECT_PORT_START=9000
PROJECT_PORT_END=9100
# 多端口模式绑定到0.0.0.0(宿主机可访问)
PROJECT_BIND_ADDRESS=0.0.0.0
# 禁用内置Nginx使用宿主机Nginx
USE_NGINX=false
EOF
fi
# 7. 创建启动说明
if [ "$SINGLE_PORT" = true ]; then
PORT_INFO="- 8080: 管理后台和所有项目(通过路径区分)"
ACCESS_URL="http://demo.example.com/"
else
PORT_INFO="- 8888: 管理后台
- 9000-9009: 项目端口"
ACCESS_URL="http://your-server-ip:8888"
fi
cat > "$DIST_DIR/README.md" << EOF
# 部署说明
## 模式: $(if [ "$SINGLE_PORT" = true ]; then echo "单端口模式"; else echo "多端口模式"; fi)
## 快速启动
1. 修改 .env 文件中的 BASE_DOMAIN 为您的域名
2. 启动容器:
docker-compose up -d
3. 访问管理后台:
$ACCESS_URL
## 默认账号
- 用户名: admin
- 密码: admin123
## 端口说明
$PORT_INFO
## 常用命令
# 查看日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 停止服务
docker-compose down
# 更新部署
docker-compose down
docker-compose build
docker-compose up -d
EOF
# 8. 打包
echo "打包..."
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
if [ "$SINGLE_PORT" = true ]; then
MODE_SUFFIX="-single"
else
MODE_SUFFIX="-multi"
fi
ZIP_FILE="auto-deploy-dist$MODE_SUFFIX-$TIMESTAMP.tar.gz"
tar -czvf "$ZIP_FILE" -C "$DIST_DIR" .
echo ""
echo "=== 构建完成 ==="
if [ "$SINGLE_PORT" = true ]; then
echo "模式: 单端口(8080→80)"
else
echo "模式: 多端口(8888+9000-9100)"
fi
echo "部署包: $ZIP_FILE"
echo "部署目录: $DIST_DIR"
echo ""
echo "上传到服务器后执行:"
echo " tar -xzvf $ZIP_FILE"
echo " docker-compose up -d"