compliance/demo-wsl-script.sh
2025-08-27 16:55:39 +08:00

348 lines
8.6 KiB
Bash
Raw Permalink 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
# 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环境演示完成"