#!/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 "=========================================="