compliance/docker-export.sh
gongwenxin 9bd3cb63f3 docker
2025-08-13 09:52:59 +08:00

392 lines
9.0 KiB
Bash
Executable File
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合规性测试工具 - Docker镜像打包脚本
# 用于创建离线部署包
set -e
# 配置变量
EXPORT_DIR="dms-compliance-offline"
IMAGE_NAME="compliance-dms-compliance-tool"
NGINX_IMAGE="nginx:alpine"
ARCHIVE_NAME="dms-compliance-offline-$(date +%Y%m%d-%H%M%S).tar.gz"
echo "=== DMS合规性测试工具 离线部署包创建脚本 ==="
# 检查Docker是否运行
if ! docker info >/dev/null 2>&1; then
echo "[错误] Docker未运行或无法访问"
exit 1
fi
# 创建导出目录
echo "[信息] 创建导出目录: $EXPORT_DIR"
rm -rf "$EXPORT_DIR"
mkdir -p "$EXPORT_DIR"
# 1. 构建最新镜像
echo "[信息] 构建DMS合规性测试工具镜像..."
docker-compose build dms-compliance-tool
# 2. 导出主应用镜像
echo "[信息] 导出主应用镜像..."
docker save "$IMAGE_NAME:latest" -o "$EXPORT_DIR/dms-compliance-tool.tar"
# 3. 拉取并导出nginx镜像如果需要
echo "[信息] 拉取并导出nginx镜像..."
docker pull "$NGINX_IMAGE"
docker save "$NGINX_IMAGE" -o "$EXPORT_DIR/nginx-alpine.tar"
# 4. 复制部署文件
echo "[信息] 复制部署文件..."
# 创建离线版docker-compose文件
cat > "$EXPORT_DIR/docker-compose.yml" << 'EOF'
version: '3.8'
services:
dms-compliance-tool:
image: compliance-dms-compliance-tool:latest
container_name: dms-compliance-tool
ports:
- "5050:5050" # API服务器端口
- "5051:5051" # 历史查看器端口
volumes:
# 持久化测试报告
- ./data/test_reports:/app/test_reports
# 持久化上传文件
- ./data/uploads:/app/uploads
# 持久化日志
- ./data/logs:/app/logs
# 如果需要自定义配置文件
- ./config:/app/config:ro
environment:
- FLASK_ENV=production
- PYTHONUNBUFFERED=1
- TZ=Asia/Shanghai
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5050/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- dms-network
# 可选添加一个nginx反向代理
nginx:
image: nginx:alpine
container_name: dms-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
depends_on:
- dms-compliance-tool
restart: unless-stopped
networks:
- dms-network
profiles:
- with-nginx
networks:
dms-network:
driver: bridge
volumes:
test_reports:
uploads:
logs:
EOF
# 5. 复制nginx配置如果存在
if [ -d "nginx" ]; then
echo "[信息] 复制nginx配置..."
cp -r nginx "$EXPORT_DIR/"
fi
# 6. 复制config目录如果存在
if [ -d "config" ]; then
echo "[信息] 复制配置文件..."
cp -r config "$EXPORT_DIR/"
fi
# 7. 创建数据目录结构
echo "[信息] 创建数据目录结构..."
mkdir -p "$EXPORT_DIR/data/test_reports"
mkdir -p "$EXPORT_DIR/data/uploads"
mkdir -p "$EXPORT_DIR/data/logs"
# 8. 复制现有的测试报告(如果存在)
if [ -d "test_reports" ] && [ "$(ls -A test_reports)" ]; then
echo "[信息] 复制现有测试报告..."
cp -r test_reports/* "$EXPORT_DIR/data/test_reports/"
fi
# 9. 创建部署脚本
echo "[信息] 创建部署脚本..."
cat > "$EXPORT_DIR/deploy.sh" << 'EOF'
#!/bin/bash
# DMS合规性测试工具 - 离线部署脚本
set -e
echo "=== DMS合规性测试工具 离线部署脚本 ==="
# 检查Docker是否运行
if ! docker info >/dev/null 2>&1; then
echo "[错误] Docker未运行或无法访问请先安装并启动Docker"
exit 1
fi
# 检查docker-compose是否可用
if ! command -v docker-compose >/dev/null 2>&1; then
echo "[错误] docker-compose未安装请先安装docker-compose"
exit 1
fi
echo "[信息] 加载Docker镜像..."
# 加载主应用镜像
if [ -f "dms-compliance-tool.tar" ]; then
echo "[信息] 加载DMS合规性测试工具镜像..."
docker load -i dms-compliance-tool.tar
else
echo "[错误] 找不到dms-compliance-tool.tar镜像文件"
exit 1
fi
# 加载nginx镜像
if [ -f "nginx-alpine.tar" ]; then
echo "[信息] 加载nginx镜像..."
docker load -i nginx-alpine.tar
else
echo "[警告] 找不到nginx-alpine.tar镜像文件nginx服务将无法使用"
fi
echo "[信息] 创建必要的目录..."
mkdir -p data/test_reports data/uploads data/logs
echo "[信息] 设置目录权限..."
# 确保目录权限正确Docker容器中的用户ID可能不同
chmod -R 755 data/
echo "[信息] 启动服务..."
docker-compose up -d
echo "[信息] 等待服务启动..."
sleep 10
# 检查服务状态
echo "[信息] 检查服务状态..."
docker-compose ps
# 检查健康状态
echo "[信息] 检查服务健康状态..."
for i in {1..30}; do
if curl -f http://localhost:5050/ >/dev/null 2>&1; then
echo "[成功] API服务器已启动并正常运行"
break
fi
if [ $i -eq 30 ]; then
echo "[警告] API服务器健康检查超时请检查日志"
docker-compose logs dms-compliance-tool
fi
sleep 2
done
if curl -f http://localhost:5051/ >/dev/null 2>&1; then
echo "[成功] 历史查看器已启动并正常运行"
else
echo "[警告] 历史查看器可能未正常启动,请检查日志"
fi
echo ""
echo "=== 部署完成 ==="
echo "API服务器地址: http://localhost:5050"
echo "历史查看器地址: http://localhost:5051"
echo ""
echo "常用命令:"
echo " 查看服务状态: docker-compose ps"
echo " 查看日志: docker-compose logs"
echo " 停止服务: docker-compose down"
echo " 重启服务: docker-compose restart"
echo ""
EOF
chmod +x "$EXPORT_DIR/deploy.sh"
# 10. 创建停止脚本
cat > "$EXPORT_DIR/stop.sh" << 'EOF'
#!/bin/bash
# DMS合规性测试工具 - 停止脚本
echo "=== 停止DMS合规性测试工具 ==="
if [ -f "docker-compose.yml" ]; then
docker-compose down
echo "[信息] 服务已停止"
else
echo "[错误] 找不到docker-compose.yml文件"
exit 1
fi
EOF
chmod +x "$EXPORT_DIR/stop.sh"
# 11. 创建卸载脚本
cat > "$EXPORT_DIR/uninstall.sh" << 'EOF'
#!/bin/bash
# DMS合规性测试工具 - 卸载脚本
echo "=== 卸载DMS合规性测试工具 ==="
read -p "确定要卸载DMS合规性测试工具吗这将删除所有容器和镜像 (y/N): " confirm
if [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]]; then
echo "[信息] 停止并删除容器..."
docker-compose down -v
echo "[信息] 删除镜像..."
docker rmi compliance-dms-compliance-tool:latest nginx:alpine 2>/dev/null || true
echo "[信息] 清理未使用的资源..."
docker system prune -f
echo "[成功] 卸载完成"
else
echo "[信息] 取消卸载"
fi
EOF
chmod +x "$EXPORT_DIR/uninstall.sh"
# 12. 创建README文件
cat > "$EXPORT_DIR/README.md" << 'EOF'
# DMS合规性测试工具 - 离线部署包
## 系统要求
- Docker 20.10+
- Docker Compose 1.29+
- 至少2GB可用内存
- 至少5GB可用磁盘空间
## 快速部署
1. 解压部署包到目标目录
2. 进入部署目录
3. 运行部署脚本:
```bash
./deploy.sh
```
## 服务访问
部署成功后,可以通过以下地址访问服务:
- **API服务器**: http://localhost:5050
- **历史查看器**: http://localhost:5051
## 常用操作
### 查看服务状态
```bash
docker-compose ps
```
### 查看服务日志
```bash
# 查看所有服务日志
docker-compose logs
# 查看特定服务日志
docker-compose logs dms-compliance-tool
```
### 停止服务
```bash
./stop.sh
# 或者
docker-compose down
```
### 重启服务
```bash
docker-compose restart
```
### 完全卸载
```bash
./uninstall.sh
```
## 数据持久化
以下目录的数据会被持久化保存:
- `data/test_reports/` - 测试报告
- `data/uploads/` - 上传的文件
- `data/logs/` - 应用日志
## 配置文件
如需自定义配置,可以在 `config/` 目录中放置配置文件。
## 故障排除
### 端口冲突
如果5050或5051端口被占用可以修改 `docker-compose.yml` 文件中的端口映射。
### 权限问题
如果遇到权限问题,可以尝试:
```bash
sudo chown -R $USER:$USER data/
chmod -R 755 data/
```
### 服务无法启动
1. 检查Docker是否正常运行
2. 查看服务日志:`docker-compose logs`
3. 检查系统资源是否充足
## 技术支持
如遇到问题,请提供以下信息:
- 操作系统版本
- Docker版本
- 错误日志
- 服务状态输出
EOF
# 13. 创建版本信息文件
cat > "$EXPORT_DIR/VERSION" << EOF
DMS合规性测试工具 离线部署包
构建时间: $(date '+%Y-%m-%d %H:%M:%S')
构建主机: $(hostname)
Docker版本: $(docker --version)
Docker Compose版本: $(docker-compose --version)
EOF
echo "[信息] 压缩部署包..."
tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR"
echo ""
echo "=== 打包完成 ==="
echo "部署包: $ARCHIVE_NAME"
echo "大小: $(du -h "$ARCHIVE_NAME" | cut -f1)"
echo ""
echo "部署说明:"
echo "1. 将 $ARCHIVE_NAME 传输到目标服务器"
echo "2. 解压: tar -xzf $ARCHIVE_NAME"
echo "3. 进入目录: cd $EXPORT_DIR"
echo "4. 运行部署: ./deploy.sh"
echo ""