compliance/create-compose-package-wsl.sh
2025-08-27 16:55:39 +08:00

841 lines
20 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
# DMS合规性测试工具 - WSL简化版本
# 基于原始multiplatform脚本仅适配WSL环境
set -euo pipefail
# WSL环境检测和设置
if [[ -n "${WSL_DISTRO_NAME:-}" ]] || [[ -n "${WSL_INTEROP:-}" ]]; then
echo "[信息] 检测到WSL环境: ${WSL_DISTRO_NAME:-Unknown}"
export MSYS_NO_PATHCONV=1
export COMPOSE_CONVERT_WINDOWS_PATHS=1
else
echo "[信息] 检测到Linux环境"
fi
# 配置变量
EXPORT_DIR="dms-compliance-wsl-$(date +%Y%m%d-%H%M%S)"
IMAGE_NAME="compliance-dms-wsl"
ARCHIVE_NAME="$EXPORT_DIR.tar.gz"
# 支持的平台列表
get_platform() {
case "$1" in
1) echo "linux/amd64" ;;
2) echo "linux/arm64" ;;
3) echo "linux/arm/v7" ;;
*) echo "" ;;
esac
}
get_platform_name() {
case "$1" in
"linux/amd64") echo "AMD64 (x86_64) - Intel/AMD 64位" ;;
"linux/arm64") echo "ARM64 (aarch64) - Apple M1/M2, ARM 64位" ;;
"linux/arm/v7") echo "ARMv7 - 树莓派 3/4, ARM 32位" ;;
*) echo "未知平台" ;;
esac
}
# 服务架构选择
get_service_arch() {
case "$1" in
1) echo "dual" ;;
2) echo "fastapi" ;;
3) echo "flask" ;;
*) echo "" ;;
esac
}
get_service_arch_name() {
case "$1" in
"dual") echo "双服务架构 - API服务器(5050) + 历史查看器(5051)" ;;
"fastapi") echo "FastAPI服务 - 现代异步框架自动生成API文档(5051)" ;;
"flask") echo "Flask服务 - 轻量级传统框架(5050)" ;;
*) echo "未知架构" ;;
esac
}
get_service_ports() {
case "$1" in
"dual") echo "5050,5051" ;;
"fastapi") echo "5051" ;;
"flask") echo "5050" ;;
*) echo "5050" ;;
esac
}
# 检测当前平台
CURRENT_ARCH=$(docker version --format '{{.Server.Arch}}' 2>/dev/null || echo "amd64")
case "$CURRENT_ARCH" in
x86_64|amd64) CURRENT_PLATFORM="linux/amd64" ;;
aarch64|arm64) CURRENT_PLATFORM="linux/arm64" ;;
armv7l) CURRENT_PLATFORM="linux/arm/v7" ;;
*) CURRENT_PLATFORM="linux/amd64" ;;
esac
echo "=== DMS合规性测试工具 WSL简化版本 ==="
echo "[信息] 当前平台: $(get_platform_name "$CURRENT_PLATFORM")"
echo ""
# 选择服务架构
echo "请选择服务架构:"
echo " 1) $(get_service_arch_name "dual")"
echo " 2) $(get_service_arch_name "fastapi")"
echo " 3) $(get_service_arch_name "flask")"
echo ""
read -p "请输入选择 (1-3) [默认: 1]: " service_choice
service_choice=${service_choice:-1}
SELECTED_SERVICE_ARCH=$(get_service_arch "$service_choice")
if [[ -z "$SELECTED_SERVICE_ARCH" ]]; then
echo "[错误] 无效的服务架构选择"
exit 1
fi
SELECTED_PORTS=$(get_service_ports "$SELECTED_SERVICE_ARCH")
echo "[信息] 选择的架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
echo "[信息] 服务端口: $SELECTED_PORTS"
echo ""
# 选择目标平台(简化版)
echo "请选择目标平台架构:"
echo " 1) $(get_platform_name "linux/amd64") [推荐]"
echo " 2) $(get_platform_name "linux/arm64")"
echo " 3) $(get_platform_name "linux/arm/v7")"
echo " 0) 自动检测当前平台"
echo ""
read -p "请输入选择 (0-3) [默认: 0]: " platform_choice
platform_choice=${platform_choice:-0}
if [[ "$platform_choice" == "0" ]]; then
TARGET_PLATFORM="$CURRENT_PLATFORM"
TARGET_PLATFORM_NAME="$(get_platform_name "$CURRENT_PLATFORM") [自动检测]"
else
TARGET_PLATFORM=$(get_platform "$platform_choice")
if [[ -z "$TARGET_PLATFORM" ]]; then
echo "[错误] 无效的平台选择"
exit 1
fi
TARGET_PLATFORM_NAME=$(get_platform_name "$TARGET_PLATFORM")
fi
echo "[信息] 目标平台: $TARGET_PLATFORM_NAME"
echo ""
# 确认构建
echo "构建配置确认:"
echo " 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
echo " 端口: $SELECTED_PORTS"
echo " 平台: $TARGET_PLATFORM_NAME"
echo ""
read -p "确认开始构建? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo "[信息] 构建已取消"
exit 0
fi
echo ""
echo "=== 开始构建流程 ==="
# 更新导出目录名称
platform_suffix=$(echo "$TARGET_PLATFORM" | sed 's/linux\///g' | sed 's/\//-/g')
EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-${platform_suffix}-wsl-$(date +%Y%m%d-%H%M%S)"
ARCHIVE_NAME="$EXPORT_DIR.tar.gz"
# 创建最终导出目录
rm -rf "$EXPORT_DIR"
mkdir -p "$EXPORT_DIR"
echo ""
# 复制项目文件(直接使用原始脚本的逻辑)
echo "[步骤 1/6] 复制项目文件..."
# 创建临时构建目录
TEMP_BUILD_DIR=$(mktemp -d)
trap "rm -rf $TEMP_BUILD_DIR" EXIT
# 复制核心目录(排除缓存和临时文件)
echo "[信息] 复制核心目录..."
mkdir -p "$TEMP_BUILD_DIR"/{ddms_compliance_suite,custom_stages,custom_testcases,templates,static,assets}
rsync -av --exclude='__pycache__' --exclude='*.pyc' --exclude='*.log' ddms_compliance_suite/ "$TEMP_BUILD_DIR/ddms_compliance_suite/" 2>/dev/null || cp -r ddms_compliance_suite "$TEMP_BUILD_DIR/"
rsync -av --exclude='__pycache__' --exclude='*.pyc' custom_stages/ "$TEMP_BUILD_DIR/custom_stages/" 2>/dev/null || cp -r custom_stages "$TEMP_BUILD_DIR/"
rsync -av --exclude='__pycache__' --exclude='*.pyc' custom_testcases/ "$TEMP_BUILD_DIR/custom_testcases/" 2>/dev/null || cp -r custom_testcases "$TEMP_BUILD_DIR/" 2>/dev/null || true
# 复制模板和静态文件
rsync -av templates/ "$TEMP_BUILD_DIR/templates/" 2>/dev/null || cp -r templates "$TEMP_BUILD_DIR/" 2>/dev/null || mkdir -p "$TEMP_BUILD_DIR/templates"
rsync -av static/ "$TEMP_BUILD_DIR/static/" 2>/dev/null || cp -r static "$TEMP_BUILD_DIR/" 2>/dev/null || mkdir -p "$TEMP_BUILD_DIR/static"
rsync -av assets/ "$TEMP_BUILD_DIR/assets/" 2>/dev/null || cp -r assets "$TEMP_BUILD_DIR/" 2>/dev/null || mkdir -p "$TEMP_BUILD_DIR/assets"
# 复制核心Python文件
echo "[信息] 复制核心Python文件..."
for file in api_server.py history_viewer.py flask_app.py web_interface.py; do
[ -f "$file" ] && cp "$file" "$TEMP_BUILD_DIR/"
done
# 复制requirements.txt
if [ -f "requirements.txt" ]; then
cp requirements.txt "$TEMP_BUILD_DIR/"
else
echo "[错误] requirements.txt 文件不存在"
exit 1
fi
echo "[成功] 项目文件复制完成"
echo ""
# 创建Dockerfile直接使用原始脚本的逻辑
echo "[步骤 2/6] 创建 Dockerfile..."
cd "$TEMP_BUILD_DIR"
if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then
# 双服务架构 - 使用supervisor管理两个服务
cat > "Dockerfile" << 'EOF'
# 多阶段构建 - 构建阶段
FROM python:3.11-alpine AS builder
# 安装构建依赖
RUN apk add --no-cache \
gcc \
musl-dev \
libffi-dev \
openssl-dev \
cargo \
rust
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 创建虚拟环境并安装依赖
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
RUN pip install --no-cache-dir -r requirements.txt
# 运行阶段
FROM python:3.11-alpine AS runtime
# 安装运行时依赖
RUN apk add --no-cache \
supervisor \
curl \
bash \
tzdata
# 从构建阶段复制虚拟环境
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# 设置工作目录
WORKDIR /app
# 复制应用代码
COPY . .
# 创建supervisor配置
RUN mkdir -p /etc/supervisor/conf.d
COPY supervisord.conf /etc/supervisor/conf.d/
# 创建必要目录
RUN mkdir -p /var/log/supervisor /app/logs /app/test_reports /app/uploads
# 创建非root用户
RUN addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser && \
chown -R appuser:appuser /app /var/log/supervisor
USER appuser
# 设置环境变量
ENV PYTHONPATH=/app
ENV FLASK_ENV=production
ENV PYTHONUNBUFFERED=1
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:5050/ || exit 1
# 暴露端口
EXPOSE 5050 5051
# 启动命令
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
EOF
# 创建supervisor配置
cat > "supervisord.conf" << 'EOF'
[supervisord]
nodaemon=true
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
[unix_http_server]
file=/tmp/supervisor.sock
chmod=0700
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
# DMS API服务器 (主服务)
[program:api_server]
command=python api_server.py
directory=/app
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/api_server.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
environment=PYTHONPATH="/app",PYTHONUNBUFFERED="1"
# 历史查看器服务
[program:history_viewer]
command=python history_viewer.py
directory=/app
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/history_viewer.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
environment=PYTHONPATH="/app",PYTHONUNBUFFERED="1"
# 进程组配置
[group:dms_services]
programs=api_server,history_viewer
priority=999
EOF
elif [[ "$SELECTED_SERVICE_ARCH" == "fastapi" ]]; then
cat > "Dockerfile" << 'EOF'
# 多阶段构建 - 构建阶段
FROM python:3.11-alpine AS builder
# 安装构建依赖
RUN apk add --no-cache \
gcc \
musl-dev \
libffi-dev \
openssl-dev \
cargo \
rust
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 创建虚拟环境并安装依赖
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install --no-cache-dir fastapi uvicorn[standard]
# 运行阶段
FROM python:3.11-alpine AS runtime
# 安装运行时依赖
RUN apk add --no-cache \
curl \
bash \
tzdata
# 从构建阶段复制虚拟环境
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# 设置工作目录
WORKDIR /app
# 复制应用代码
COPY . .
# 创建非root用户
RUN addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser && \
chown -R appuser:appuser /app
USER appuser
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:5051/health || exit 1
# 暴露端口
EXPOSE 5051
# 启动命令
CMD ["uvicorn", "web_interface_fastapi:app", "--host", "0.0.0.0", "--port", "5051"]
EOF
else
# Flask服务架构
cat > "Dockerfile" << 'EOF'
# 多阶段构建 - 构建阶段
FROM python:3.11-alpine AS builder
# 安装构建依赖
RUN apk add --no-cache \
gcc \
musl-dev \
libffi-dev \
openssl-dev \
cargo \
rust
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 创建虚拟环境并安装依赖
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
RUN pip install --no-cache-dir -r requirements.txt
# 运行阶段
FROM python:3.11-alpine AS runtime
# 安装运行时依赖
RUN apk add --no-cache \
curl \
bash \
tzdata
# 从构建阶段复制虚拟环境
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# 设置工作目录
WORKDIR /app
# 复制应用代码
COPY . .
# 创建非root用户
RUN addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser && \
chown -R appuser:appuser /app
USER appuser
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:5050/ || exit 1
# 暴露端口
EXPOSE 5050
# 启动命令
CMD ["python", "api_server.py"]
EOF
fi
cd - > /dev/null
echo "[成功] Dockerfile创建完成"
echo ""
# 复制构建文件到最终目录
echo "[步骤 3/6] 复制构建文件..."
mkdir -p "$EXPORT_DIR"
cp -r "$TEMP_BUILD_DIR"/* "$EXPORT_DIR/"
# 创建Docker Compose文件
echo "[步骤 4/6] 创建 Docker Compose 配置..."
if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then
# 双服务架构
cat > "$EXPORT_DIR/docker-compose.yml" << EOF
services:
dms-compliance:
build:
context: .
dockerfile: Dockerfile
platforms:
- $TARGET_PLATFORM
image: $IMAGE_NAME:latest
container_name: dms-compliance-tool
ports:
- "5050:5050" # API服务器端口
- "5051:5051" # 历史查看器端口
environment:
- PYTHONPATH=/app
- TZ=Asia/Shanghai
- FLASK_ENV=production
- PYTHONUNBUFFERED=1
volumes:
- ./uploads:/app/uploads
- ./logs:/app/logs
- ./test_reports:/app/test_reports
- ./config:/app/config:ro
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5050/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- dms-network
networks:
dms-network:
driver: bridge
volumes:
uploads:
logs:
test_reports:
config:
EOF
else
# 单服务架构
PRIMARY_PORT=$(echo "$SELECTED_PORTS" | cut -d',' -f1)
cat > "$EXPORT_DIR/docker-compose.yml" << EOF
services:
dms-compliance:
build:
context: .
dockerfile: Dockerfile
platforms:
- $TARGET_PLATFORM
image: $IMAGE_NAME:latest
container_name: dms-compliance-tool
ports:
- "$PRIMARY_PORT:$PRIMARY_PORT"
environment:
- PYTHONPATH=/app
- TZ=Asia/Shanghai
- PYTHONUNBUFFERED=1
volumes:
- ./uploads:/app/uploads
- ./logs:/app/logs
- ./reports:/app/reports
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:$PRIMARY_PORT/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- dms-network
networks:
dms-network:
driver: bridge
volumes:
uploads:
logs:
reports:
EOF
fi
# 创建环境配置文件
cat > "$EXPORT_DIR/.env" << EOF
# DMS合规性测试工具环境配置 - WSL版本
COMPOSE_PROJECT_NAME=dms-compliance-wsl
COMPOSE_FILE=docker-compose.yml
# 服务配置
SERVICE_PORTS=$SELECTED_PORTS
SERVICE_ARCH=$SELECTED_SERVICE_ARCH
TARGET_PLATFORM=$TARGET_PLATFORM
# 应用配置
PYTHONPATH=/app
TZ=Asia/Shanghai
LOG_LEVEL=INFO
# 构建配置
IMAGE_NAME=$IMAGE_NAME
CONTAINER_NAME=dms-compliance-tool
EOF
# 创建管理脚本
echo "[步骤 5/6] 创建管理脚本..."
# 启动脚本
cat > "$EXPORT_DIR/start.sh" << 'EOF'
#!/bin/bash
set -e
echo "=== DMS合规性测试工具启动脚本 ==="
# WSL兼容性设置
export MSYS_NO_PATHCONV=1
export COMPOSE_CONVERT_WINDOWS_PATHS=1
# 检查Docker和Docker Compose
if ! command -v docker &> /dev/null; then
echo "[错误] Docker未安装"
exit 1
fi
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
echo "[错误] Docker Compose未安装"
exit 1
fi
# 选择Docker Compose命令
if docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
else
COMPOSE_CMD="docker-compose"
fi
echo "[信息] 使用 $COMPOSE_CMD"
# 创建必要的目录
mkdir -p uploads logs test_reports config
# 构建并启动服务
echo "[信息] 构建Docker镜像..."
$COMPOSE_CMD build
echo "[信息] 启动服务..."
$COMPOSE_CMD up -d
# 等待服务启动
echo "[信息] 等待服务启动..."
sleep 15
# 检查服务状态
if $COMPOSE_CMD ps | grep -q "Up"; then
echo "[成功] 服务启动成功!"
echo ""
echo "访问地址:"
if grep -q "dual" .env; then
echo " API服务器: http://localhost:5050"
echo " 历史查看器: http://localhost:5051"
elif grep -q "fastapi" .env; then
echo " Web界面: http://localhost:5051"
echo " API文档: http://localhost:5051/docs"
else
echo " Web界面: http://localhost:5050"
fi
echo ""
echo "管理命令:"
echo " 查看日志: $COMPOSE_CMD logs -f"
echo " 停止服务: ./stop.sh"
echo " 查看状态: $COMPOSE_CMD ps"
else
echo "[错误] 服务启动失败"
echo "查看日志: $COMPOSE_CMD logs"
exit 1
fi
EOF
# 停止脚本
cat > "$EXPORT_DIR/stop.sh" << 'EOF'
#!/bin/bash
set -e
echo "=== DMS合规性测试工具停止脚本 ==="
# WSL兼容性设置
export MSYS_NO_PATHCONV=1
export COMPOSE_CONVERT_WINDOWS_PATHS=1
# 选择Docker Compose命令
if docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
else
COMPOSE_CMD="docker-compose"
fi
echo "[信息] 停止服务..."
$COMPOSE_CMD down
echo "[成功] 服务已停止"
EOF
# 日志查看脚本
cat > "$EXPORT_DIR/logs.sh" << 'EOF'
#!/bin/bash
# WSL兼容性设置
export MSYS_NO_PATHCONV=1
export COMPOSE_CONVERT_WINDOWS_PATHS=1
# 选择Docker Compose命令
if docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
else
COMPOSE_CMD="docker-compose"
fi
echo "=== DMS合规性测试工具日志 ==="
$COMPOSE_CMD logs -f
EOF
# 设置脚本执行权限
chmod +x "$EXPORT_DIR/start.sh"
chmod +x "$EXPORT_DIR/stop.sh"
chmod +x "$EXPORT_DIR/logs.sh"
echo "[成功] 管理脚本创建完成"
echo ""
# 构建Docker镜像并导出
echo "[步骤 6/6] 构建Docker镜像..."
ORIGINAL_DIR=$(pwd)
cd "$EXPORT_DIR"
echo "[信息] 构建平台: $TARGET_PLATFORM"
docker buildx build \
--platform "$TARGET_PLATFORM" \
--tag "$IMAGE_NAME:latest" \
--load \
. || {
echo "[错误] Docker镜像构建失败"
cd "$ORIGINAL_DIR"
exit 1
}
# 导出Docker镜像
echo "[信息] 导出Docker镜像..."
docker save "$IMAGE_NAME:latest" | gzip > "docker-image.tar.gz"
cd "$ORIGINAL_DIR"
# 创建README文件
cat > "$EXPORT_DIR/README.md" << EOF
# DMS合规性测试工具 - WSL版本
## 系统信息
- **架构**: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")
- **端口**: $SELECTED_PORTS
- **平台**: $TARGET_PLATFORM_NAME
- **构建时间**: $(date '+%Y-%m-%d %H:%M:%S')
## 快速开始
### 1. 解压部署包
\`\`\`bash
tar -xzf $ARCHIVE_NAME
cd $EXPORT_DIR
\`\`\`
### 2. 启动服务
\`\`\`bash
./start.sh
\`\`\`
### 3. 访问服务
EOF
if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then
cat >> "$EXPORT_DIR/README.md" << EOF
- API服务器: http://localhost:5050
- 历史查看器: http://localhost:5051
EOF
elif [[ "$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
cat >> "$EXPORT_DIR/README.md" << EOF
## WSL特殊说明
### 环境要求
- Windows 10/11 with WSL2
- Docker Desktop for Windows
- 确保Docker Desktop已启动并启用WSL集成
### 管理命令
\`\`\`bash
./start.sh # 启动服务
./stop.sh # 停止服务
./logs.sh # 查看日志
\`\`\`
### 故障排除
- 确保Docker Desktop已启动
- 检查端口是否被占用
- 查看日志: ./logs.sh
## 目录结构
\`\`\`
$EXPORT_DIR/
├── docker-compose.yml # Docker Compose配置
├── Dockerfile # Docker镜像构建文件
├── .env # 环境变量配置
├── start.sh # 启动脚本
├── stop.sh # 停止脚本
├── logs.sh # 日志查看脚本
├── docker-image.tar.gz # Docker镜像文件
└── README.md # 说明文档
\`\`\`
EOF
echo "[成功] 文档创建完成"
# 创建压缩包
echo "[信息] 创建压缩包..."
tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR"
# 清理目录
rm -rf "$EXPORT_DIR"
# 显示结果
echo ""
echo "=== 构建完成 ==="
echo "[成功] WSL版本部署包已创建: $ARCHIVE_NAME"
echo "[信息] 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
echo "[信息] 端口: $SELECTED_PORTS"
echo "[信息] 平台: $TARGET_PLATFORM_NAME"
echo "[信息] 文件大小: $(du -h "$ARCHIVE_NAME" | cut -f1)"
echo ""
echo "部署说明:"
echo "1. 将 $ARCHIVE_NAME 传输到目标WSL环境"
echo "2. 解压: tar -xzf $ARCHIVE_NAME"
echo "3. 进入目录: cd $EXPORT_DIR"
echo "4. 启动服务: ./start.sh"
echo ""
if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then
echo "访问地址:"
echo "- API服务器: http://localhost:5050"
echo "- 历史查看器: http://localhost:5051"
elif [[ "$SELECTED_SERVICE_ARCH" == "fastapi" ]]; then
echo "访问地址:"
echo "- Web界面: http://localhost:5051"
echo "- API文档: http://localhost:5051/docs"
else
echo "访问地址: http://localhost:5050"
fi
echo ""
echo "WSL版本构建完成"