348 lines
8.6 KiB
Bash
348 lines
8.6 KiB
Bash
#!/bin/bash
|
||
|
||
# DMS合规性测试工具 - WSL演示版本
|
||
# 不需要Docker环境,仅演示脚本功能
|
||
|
||
set -euo pipefail
|
||
|
||
echo "=== DMS合规性测试工具 WSL演示版本 ==="
|
||
echo ""
|
||
|
||
# 环境检测
|
||
detect_environment() {
|
||
if [[ -n "${WSL_DISTRO_NAME:-}" ]] || [[ -n "${WSL_INTEROP:-}" ]]; then
|
||
echo "WSL"
|
||
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
|
||
echo "Windows"
|
||
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||
echo "Linux"
|
||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||
echo "macOS"
|
||
else
|
||
echo "Unknown"
|
||
fi
|
||
}
|
||
|
||
RUNTIME_ENV=$(detect_environment)
|
||
echo "[信息] 检测到运行环境: $RUNTIME_ENV"
|
||
|
||
# 显示系统信息
|
||
echo "[信息] 操作系统: $OSTYPE"
|
||
echo "[信息] Shell: $SHELL"
|
||
echo "[信息] 用户: $USER"
|
||
echo "[信息] 主目录: $HOME"
|
||
echo "[信息] 当前目录: $(pwd)"
|
||
|
||
if [[ "$RUNTIME_ENV" == "WSL" ]]; then
|
||
echo "[信息] WSL发行版: ${WSL_DISTRO_NAME:-Unknown}"
|
||
echo "[信息] Windows用户目录: ${USERPROFILE:-Unknown}"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# 检查基础工具
|
||
echo "=== 工具检查 ==="
|
||
tools=("bash" "tar" "gzip" "curl" "wget" "git")
|
||
|
||
for tool in "${tools[@]}"; do
|
||
if command -v "$tool" &> /dev/null; then
|
||
version=$(command "$tool" --version 2>/dev/null | head -1 || echo "版本未知")
|
||
echo "[✓] $tool: $version"
|
||
else
|
||
echo "[✗] $tool: 未安装"
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
|
||
# Docker检查(演示模式)
|
||
echo "=== Docker检查 (演示模式) ==="
|
||
if command -v docker &> /dev/null; then
|
||
echo "[✓] Docker命令可用"
|
||
|
||
if docker info >/dev/null 2>&1; then
|
||
echo "[✓] Docker服务运行中"
|
||
docker_version=$(docker --version)
|
||
echo "[信息] $docker_version"
|
||
|
||
if docker buildx version >/dev/null 2>&1; then
|
||
buildx_version=$(docker buildx version)
|
||
echo "[✓] Docker Buildx可用: $buildx_version"
|
||
else
|
||
echo "[✗] Docker Buildx不可用"
|
||
fi
|
||
else
|
||
echo "[✗] Docker服务未运行"
|
||
echo "[提示] 请启动Docker Desktop"
|
||
fi
|
||
else
|
||
echo "[✗] Docker未安装"
|
||
echo "[提示] 请安装Docker Desktop for Windows"
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# 模拟配置选择
|
||
echo "=== 配置选择演示 ==="
|
||
|
||
# 服务架构选择
|
||
echo "请选择服务架构:"
|
||
echo " 1) FastAPI服务 - 现代异步框架,自动生成API文档(5051)"
|
||
echo " 2) Flask服务 - 轻量级传统框架(5050)"
|
||
echo ""
|
||
read -p "请输入选择 (1-2) [默认: 1]: " service_choice
|
||
service_choice=${service_choice:-1}
|
||
|
||
case "$service_choice" in
|
||
1)
|
||
SELECTED_SERVICE_ARCH="fastapi"
|
||
SELECTED_PORTS="5051"
|
||
SERVICE_DESC="FastAPI服务 - 现代异步框架,自动生成API文档(5051)"
|
||
;;
|
||
2)
|
||
SELECTED_SERVICE_ARCH="flask"
|
||
SELECTED_PORTS="5050"
|
||
SERVICE_DESC="Flask服务 - 轻量级传统框架(5050)"
|
||
;;
|
||
*)
|
||
echo "[错误] 无效的服务架构选择"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
echo "[信息] 选择的架构: $SERVICE_DESC"
|
||
echo "[信息] 服务端口: $SELECTED_PORTS"
|
||
echo ""
|
||
|
||
# 平台选择
|
||
echo "请选择目标平台架构:"
|
||
echo " 1) AMD64 (x86_64) - Intel/AMD 64位 [推荐]"
|
||
echo " 2) ARM64 (aarch64) - Apple M1/M2, ARM 64位"
|
||
echo " 3) ARMv7 - 树莓派 3/4, ARM 32位"
|
||
echo " 0) 自动检测当前平台"
|
||
echo ""
|
||
read -p "请输入选择 (0-3) [默认: 0]: " platform_choice
|
||
platform_choice=${platform_choice:-0}
|
||
|
||
case "$platform_choice" in
|
||
0)
|
||
TARGET_PLATFORM="linux/amd64"
|
||
TARGET_PLATFORM_NAME="AMD64 (x86_64) - Intel/AMD 64位 [自动检测]"
|
||
;;
|
||
1)
|
||
TARGET_PLATFORM="linux/amd64"
|
||
TARGET_PLATFORM_NAME="AMD64 (x86_64) - Intel/AMD 64位"
|
||
;;
|
||
2)
|
||
TARGET_PLATFORM="linux/arm64"
|
||
TARGET_PLATFORM_NAME="ARM64 (aarch64) - Apple M1/M2, ARM 64位"
|
||
;;
|
||
3)
|
||
TARGET_PLATFORM="linux/arm/v7"
|
||
TARGET_PLATFORM_NAME="ARMv7 - 树莓派 3/4, ARM 32位"
|
||
;;
|
||
*)
|
||
echo "[错误] 无效的平台选择"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
echo "[信息] 目标平台: $TARGET_PLATFORM_NAME"
|
||
echo ""
|
||
|
||
# 配置确认
|
||
echo "=== 配置确认 ==="
|
||
echo "构建配置确认:"
|
||
echo " 架构: $SERVICE_DESC"
|
||
echo " 端口: $SELECTED_PORTS"
|
||
echo " 平台: $TARGET_PLATFORM_NAME"
|
||
echo " 环境: $RUNTIME_ENV"
|
||
echo ""
|
||
read -p "确认开始演示构建? (y/N): " confirm
|
||
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
||
echo "[信息] 演示已取消"
|
||
exit 0
|
||
fi
|
||
|
||
echo ""
|
||
echo "=== 演示构建流程 ==="
|
||
|
||
# 设置变量
|
||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||
EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-demo-${TIMESTAMP}"
|
||
IMAGE_NAME="compliance-dms-demo"
|
||
ARCHIVE_NAME="$EXPORT_DIR.tar.gz"
|
||
|
||
echo "[信息] 输出目录: $EXPORT_DIR"
|
||
echo "[信息] 镜像名称: $IMAGE_NAME"
|
||
|
||
# 模拟构建步骤
|
||
echo ""
|
||
echo "[步骤 1/6] 检查项目文件..."
|
||
sleep 1
|
||
|
||
required_files=("ddms_compliance_suite" "requirements.txt")
|
||
missing_files=()
|
||
|
||
for file in "${required_files[@]}"; do
|
||
if [[ -e "$file" ]]; then
|
||
echo "[✓] 找到: $file"
|
||
else
|
||
echo "[✗] 缺失: $file"
|
||
missing_files+=("$file")
|
||
fi
|
||
done
|
||
|
||
if [[ ${#missing_files[@]} -gt 0 ]]; then
|
||
echo "[警告] 缺失必要文件,这是演示模式,继续执行..."
|
||
fi
|
||
|
||
echo ""
|
||
echo "[步骤 2/6] 创建演示目录结构..."
|
||
sleep 1
|
||
|
||
mkdir -p "$EXPORT_DIR"/{uploads,logs,reports}
|
||
echo "[✓] 创建目录: $EXPORT_DIR"
|
||
|
||
echo ""
|
||
echo "[步骤 3/6] 生成配置文件..."
|
||
sleep 1
|
||
|
||
# 创建演示的docker-compose.yml
|
||
cat > "$EXPORT_DIR/docker-compose.yml" << EOF
|
||
version: '3.8'
|
||
|
||
services:
|
||
dms-compliance:
|
||
image: $IMAGE_NAME:latest
|
||
container_name: dms-compliance-tool-demo
|
||
ports:
|
||
- "$SELECTED_PORTS:$SELECTED_PORTS"
|
||
environment:
|
||
- PYTHONPATH=/app
|
||
- TZ=Asia/Shanghai
|
||
volumes:
|
||
- ./uploads:/app/uploads
|
||
- ./logs:/app/logs
|
||
- ./reports:/app/reports
|
||
restart: unless-stopped
|
||
|
||
volumes:
|
||
uploads:
|
||
logs:
|
||
reports:
|
||
EOF
|
||
|
||
echo "[✓] 创建: docker-compose.yml"
|
||
|
||
# 创建演示的启动脚本
|
||
cat > "$EXPORT_DIR/start.sh" << 'EOF'
|
||
#!/bin/bash
|
||
echo "=== DMS合规性测试工具启动脚本 (演示版本) ==="
|
||
echo "[信息] 这是演示版本,实际使用需要Docker环境"
|
||
echo "[信息] 配置文件已生成,请根据实际环境调整"
|
||
EOF
|
||
|
||
chmod +x "$EXPORT_DIR/start.sh"
|
||
echo "[✓] 创建: start.sh"
|
||
|
||
echo ""
|
||
echo "[步骤 4/6] 生成文档..."
|
||
sleep 1
|
||
|
||
cat > "$EXPORT_DIR/README.md" << EOF
|
||
# DMS合规性测试工具 - 演示版本
|
||
|
||
## 配置信息
|
||
|
||
- **架构**: $SERVICE_DESC
|
||
- **端口**: $SELECTED_PORTS
|
||
- **平台**: $TARGET_PLATFORM_NAME
|
||
- **环境**: $RUNTIME_ENV
|
||
- **生成时间**: $(date)
|
||
|
||
## 使用说明
|
||
|
||
这是一个演示版本,展示了WSL环境下的脚本功能。
|
||
|
||
实际使用需要:
|
||
1. 安装Docker Desktop
|
||
2. 启动Docker服务
|
||
3. 运行完整的构建脚本
|
||
|
||
## 访问地址
|
||
|
||
EOF
|
||
|
||
if [[ "$SELECTED_SERVICE_ARCH" == "fastapi" ]]; then
|
||
cat >> "$EXPORT_DIR/README.md" << EOF
|
||
- Web界面: http://localhost:5051
|
||
- API文档: http://localhost:5051/docs
|
||
- 健康检查: http://localhost:5051/health
|
||
EOF
|
||
else
|
||
cat >> "$EXPORT_DIR/README.md" << EOF
|
||
- Web界面: http://localhost:5050
|
||
- 健康检查: http://localhost:5050/health
|
||
EOF
|
||
fi
|
||
|
||
echo "[✓] 创建: README.md"
|
||
|
||
echo ""
|
||
echo "[步骤 5/6] 模拟镜像构建..."
|
||
sleep 2
|
||
echo "[信息] 在实际环境中,这里会构建Docker镜像"
|
||
echo "[信息] 命令: docker buildx build --platform $TARGET_PLATFORM --tag $IMAGE_NAME:latest ."
|
||
|
||
echo ""
|
||
echo "[步骤 6/6] 创建压缩包..."
|
||
sleep 1
|
||
|
||
if command -v tar &> /dev/null; then
|
||
tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR"
|
||
echo "[✓] 创建压缩包: $ARCHIVE_NAME"
|
||
|
||
# 显示文件大小
|
||
if command -v du &> /dev/null; then
|
||
size=$(du -h "$ARCHIVE_NAME" | cut -f1)
|
||
echo "[信息] 文件大小: $size"
|
||
fi
|
||
else
|
||
echo "[警告] tar命令不可用,保留目录: $EXPORT_DIR"
|
||
fi
|
||
|
||
echo ""
|
||
echo "=== 演示完成 ==="
|
||
echo "[成功] WSL演示版本构建完成"
|
||
echo "[信息] 架构: $SERVICE_DESC"
|
||
echo "[信息] 端口: $SELECTED_PORTS"
|
||
echo "[信息] 平台: $TARGET_PLATFORM_NAME"
|
||
echo "[信息] 环境: $RUNTIME_ENV"
|
||
|
||
if [[ -f "$ARCHIVE_NAME" ]]; then
|
||
echo "[信息] 输出文件: $ARCHIVE_NAME"
|
||
else
|
||
echo "[信息] 输出目录: $EXPORT_DIR"
|
||
fi
|
||
|
||
echo ""
|
||
echo "演示说明:"
|
||
echo "1. 脚本成功检测了WSL环境"
|
||
echo "2. 正确处理了行结束符问题"
|
||
echo "3. 生成了完整的配置文件"
|
||
echo "4. 在实际环境中需要Docker支持"
|
||
|
||
if [[ "$SELECTED_SERVICE_ARCH" == "fastapi" ]]; then
|
||
echo ""
|
||
echo "实际部署后的访问地址:"
|
||
echo "- Web界面: http://localhost:5051"
|
||
echo "- API文档: http://localhost:5051/docs"
|
||
else
|
||
echo ""
|
||
echo "实际部署后的访问地址: http://localhost:5050"
|
||
fi
|
||
|
||
echo ""
|
||
echo "WSL环境演示完成!"
|