70 lines
2.0 KiB
Bash
Executable File
70 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 构建和打包脚本 - 在本地运行
|
||
# 用法: ./build-deploy.sh
|
||
|
||
set -e
|
||
|
||
IMAGE_NAME="duidui-admin-web"
|
||
TAR_FILE="deploy/duidui-admin-web.tar"
|
||
DEPLOY_DIR="deploy"
|
||
# 目标平台(默认构建 linux/amd64,避免在 x86 服务器上出现 arm64 运行警告)
|
||
PLATFORM=${1:-linux/amd64}
|
||
|
||
echo "=========================================="
|
||
echo "开始构建和打包 (platform: $PLATFORM)"
|
||
echo "=========================================="
|
||
|
||
# 检测可用的容器工具(优先 docker,其次 podman)
|
||
if command -v docker >/dev/null 2>&1; then
|
||
CONTAINER_CLI="docker"
|
||
elif command -v podman >/dev/null 2>&1; then
|
||
CONTAINER_CLI="podman"
|
||
else
|
||
echo "错误: 未找到 docker 或 podman,请先安装其一。"
|
||
exit 1
|
||
fi
|
||
|
||
echo "使用容器工具: $CONTAINER_CLI"
|
||
|
||
# 检查 dist 目录是否存在
|
||
if [ ! -d "dist" ]; then
|
||
echo "错误: dist 目录不存在,请先运行 npm run build"
|
||
exit 1
|
||
fi
|
||
|
||
# 创建 deploy 目录
|
||
echo "创建部署目录..."
|
||
mkdir -p $DEPLOY_DIR
|
||
|
||
# 构建 Docker 镜像(不使用缓存,确保使用最新的 dist 目录)
|
||
echo "构建 Docker 镜像(不使用缓存)..."
|
||
$CONTAINER_CLI build --no-cache --platform $PLATFORM -t $IMAGE_NAME:latest .
|
||
|
||
# 导出镜像为 tar 包
|
||
echo "导出镜像为 tar 包..."
|
||
$CONTAINER_CLI save $IMAGE_NAME:latest -o $TAR_FILE
|
||
|
||
# 复制部署脚本到 deploy 目录(如果还没有)
|
||
if [ ! -f "$DEPLOY_DIR/deploy.sh" ]; then
|
||
echo "复制部署脚本..."
|
||
cp deploy.sh $DEPLOY_DIR/
|
||
chmod +x $DEPLOY_DIR/deploy.sh
|
||
fi
|
||
|
||
# 获取文件大小
|
||
TAR_SIZE=$(du -h $TAR_FILE | cut -f1)
|
||
|
||
echo "=========================================="
|
||
echo "构建完成!"
|
||
echo "=========================================="
|
||
echo "镜像名称: $IMAGE_NAME:latest"
|
||
echo "tar 包路径: $TAR_FILE"
|
||
echo "文件大小: $TAR_SIZE"
|
||
echo ""
|
||
echo "部署步骤:"
|
||
echo "1. 将 deploy 目录下的所有文件上传到服务器"
|
||
echo "2. 在服务器上执行: cd deploy && ./deploy.sh [端口号]"
|
||
echo "=========================================="
|
||
|