318 lines
6.9 KiB
Bash
318 lines
6.9 KiB
Bash
#!/bin/bash
|
||
|
||
# 创建完整的离线部署包(包含Docker安装脚本)
|
||
|
||
set -e
|
||
|
||
PACKAGE_NAME="dms-compliance-complete-offline-$(date +%Y%m%d-%H%M%S)"
|
||
TEMP_DIR="temp_package"
|
||
|
||
echo "=== 创建DMS合规性测试工具完整离线部署包 ==="
|
||
|
||
# 清理临时目录
|
||
rm -rf "$TEMP_DIR"
|
||
mkdir -p "$TEMP_DIR"
|
||
|
||
echo "[信息] 运行Docker镜像导出脚本..."
|
||
./docker-export.sh
|
||
|
||
# 找到最新创建的离线包
|
||
LATEST_PACKAGE=$(ls -t dms-compliance-offline-*.tar.gz | head -n1)
|
||
|
||
if [ -z "$LATEST_PACKAGE" ]; then
|
||
echo "[错误] 找不到Docker离线包"
|
||
exit 1
|
||
fi
|
||
|
||
echo "[信息] 找到Docker离线包: $LATEST_PACKAGE"
|
||
|
||
# 解压到临时目录
|
||
echo "[信息] 解压Docker离线包..."
|
||
tar -xzf "$LATEST_PACKAGE" -C "$TEMP_DIR"
|
||
|
||
# 获取解压后的目录名
|
||
EXTRACTED_DIR=$(ls "$TEMP_DIR")
|
||
PACKAGE_DIR="$TEMP_DIR/$EXTRACTED_DIR"
|
||
|
||
# 复制Docker安装脚本
|
||
echo "[信息] 添加Docker安装脚本..."
|
||
cp install-docker.sh "$PACKAGE_DIR/"
|
||
|
||
# 创建主安装脚本
|
||
echo "[信息] 创建主安装脚本..."
|
||
cat > "$PACKAGE_DIR/install.sh" << 'EOF'
|
||
#!/bin/bash
|
||
|
||
# DMS合规性测试工具 - 完整安装脚本
|
||
|
||
set -e
|
||
|
||
echo "=== DMS合规性测试工具完整安装脚本 ==="
|
||
|
||
# 检查操作系统
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
echo "[信息] 操作系统: $NAME $VERSION_ID"
|
||
else
|
||
echo "[警告] 无法检测操作系统版本"
|
||
fi
|
||
|
||
# 检查Docker是否已安装
|
||
if command -v docker >/dev/null 2>&1; then
|
||
echo "[信息] Docker已安装: $(docker --version)"
|
||
|
||
# 检查Docker是否运行
|
||
if ! docker info >/dev/null 2>&1; then
|
||
echo "[信息] 启动Docker服务..."
|
||
sudo systemctl start docker || {
|
||
echo "[错误] 无法启动Docker服务,请检查Docker安装"
|
||
exit 1
|
||
}
|
||
fi
|
||
else
|
||
echo "[信息] Docker未安装"
|
||
read -p "是否要安装Docker和Docker Compose? (y/N): " install_docker
|
||
|
||
if [[ $install_docker == [yY] || $install_docker == [yY][eE][sS] ]]; then
|
||
echo "[信息] 开始安装Docker..."
|
||
./install-docker.sh
|
||
|
||
echo "[信息] Docker安装完成,请重新登录或运行以下命令:"
|
||
echo "newgrp docker"
|
||
echo "然后重新运行此安装脚本"
|
||
exit 0
|
||
else
|
||
echo "[错误] 需要Docker才能运行DMS合规性测试工具"
|
||
echo "请手动安装Docker后重新运行此脚本"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# 检查Docker Compose
|
||
if ! command -v docker-compose >/dev/null 2>&1; then
|
||
echo "[错误] Docker Compose未安装"
|
||
echo "请运行 ./install-docker.sh 安装Docker Compose"
|
||
exit 1
|
||
fi
|
||
|
||
echo "[信息] 开始部署DMS合规性测试工具..."
|
||
./deploy.sh
|
||
|
||
echo ""
|
||
echo "=== 安装完成 ==="
|
||
echo ""
|
||
echo "服务地址:"
|
||
echo "- API服务器: http://localhost:5050"
|
||
echo "- 历史查看器: http://localhost:5051"
|
||
echo ""
|
||
echo "管理命令:"
|
||
echo "- 查看状态: docker-compose ps"
|
||
echo "- 查看日志: docker-compose logs"
|
||
echo "- 停止服务: ./stop.sh"
|
||
echo "- 卸载服务: ./uninstall.sh"
|
||
echo ""
|
||
EOF
|
||
|
||
chmod +x "$PACKAGE_DIR/install.sh"
|
||
|
||
# 更新README文件,添加完整安装说明
|
||
cat > "$PACKAGE_DIR/README.md" << 'EOF'
|
||
# DMS合规性测试工具 - 完整离线部署包
|
||
|
||
这是一个包含所有必要组件的完整离线部署包,可以在没有网络连接的环境中部署DMS合规性测试工具。
|
||
|
||
## 包含内容
|
||
|
||
- DMS合规性测试工具Docker镜像
|
||
- Nginx Docker镜像(可选)
|
||
- Docker和Docker Compose安装脚本
|
||
- 自动化部署脚本
|
||
- 配置文件和文档
|
||
|
||
## 系统要求
|
||
|
||
### 最低要求
|
||
- CPU: 2核心
|
||
- 内存: 2GB
|
||
- 磁盘: 5GB可用空间
|
||
- 操作系统:
|
||
- Ubuntu 18.04+
|
||
- CentOS 7+
|
||
- RHEL 7+
|
||
- Debian 9+
|
||
|
||
### 推荐配置
|
||
- CPU: 4核心
|
||
- 内存: 4GB
|
||
- 磁盘: 10GB可用空间
|
||
|
||
## 快速安装
|
||
|
||
### 方法一:一键安装(推荐)
|
||
```bash
|
||
# 解压部署包
|
||
tar -xzf dms-compliance-complete-offline-*.tar.gz
|
||
cd dms-compliance-offline-*
|
||
|
||
# 运行一键安装脚本
|
||
./install.sh
|
||
```
|
||
|
||
### 方法二:分步安装
|
||
|
||
1. **安装Docker(如果未安装)**
|
||
```bash
|
||
./install-docker.sh
|
||
# 安装完成后需要重新登录或运行: newgrp docker
|
||
```
|
||
|
||
2. **部署应用**
|
||
```bash
|
||
./deploy.sh
|
||
```
|
||
|
||
## 服务访问
|
||
|
||
安装完成后,可以通过以下地址访问:
|
||
|
||
- **API服务器**: http://localhost:5050
|
||
- **历史查看器**: http://localhost:5051
|
||
|
||
## 常用操作
|
||
|
||
### 服务管理
|
||
```bash
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 查看服务日志
|
||
docker-compose logs
|
||
|
||
# 重启服务
|
||
docker-compose restart
|
||
|
||
# 停止服务
|
||
./stop.sh
|
||
|
||
# 完全卸载
|
||
./uninstall.sh
|
||
```
|
||
|
||
### 数据管理
|
||
|
||
数据存储位置:
|
||
- `data/test_reports/` - 测试报告
|
||
- `data/uploads/` - 上传文件
|
||
- `data/logs/` - 应用日志
|
||
|
||
### 配置管理
|
||
|
||
自定义配置文件放在 `config/` 目录中。
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **端口冲突**
|
||
- 修改 `docker-compose.yml` 中的端口映射
|
||
- 或停止占用端口的其他服务
|
||
|
||
2. **权限问题**
|
||
```bash
|
||
sudo chown -R $USER:$USER data/
|
||
chmod -R 755 data/
|
||
```
|
||
|
||
3. **Docker服务未启动**
|
||
```bash
|
||
sudo systemctl start docker
|
||
sudo systemctl enable docker
|
||
```
|
||
|
||
4. **内存不足**
|
||
- 确保系统有至少2GB可用内存
|
||
- 关闭不必要的服务
|
||
|
||
### 日志查看
|
||
|
||
```bash
|
||
# 查看应用日志
|
||
docker-compose logs dms-compliance-tool
|
||
|
||
# 查看系统日志
|
||
journalctl -u docker
|
||
|
||
# 查看容器详细信息
|
||
docker inspect dms-compliance-tool
|
||
```
|
||
|
||
## 网络配置
|
||
|
||
### 防火墙设置
|
||
|
||
如需外部访问,请开放以下端口:
|
||
```bash
|
||
# CentOS/RHEL
|
||
sudo firewall-cmd --permanent --add-port=5050/tcp
|
||
sudo firewall-cmd --permanent --add-port=5051/tcp
|
||
sudo firewall-cmd --reload
|
||
|
||
# Ubuntu/Debian
|
||
sudo ufw allow 5050
|
||
sudo ufw allow 5051
|
||
```
|
||
|
||
### 反向代理
|
||
|
||
如需使用Nginx反向代理:
|
||
```bash
|
||
docker-compose --profile with-nginx up -d
|
||
```
|
||
|
||
## 技术支持
|
||
|
||
如遇到问题,请提供:
|
||
1. 操作系统版本:`cat /etc/os-release`
|
||
2. Docker版本:`docker --version`
|
||
3. 错误日志:`docker-compose logs`
|
||
4. 系统资源:`free -h && df -h`
|
||
|
||
## 更新升级
|
||
|
||
1. 停止当前服务:`./stop.sh`
|
||
2. 备份数据:`cp -r data/ data_backup/`
|
||
3. 部署新版本
|
||
4. 恢复数据(如需要)
|
||
|
||
## 安全建议
|
||
|
||
1. 定期备份 `data/` 目录
|
||
2. 限制网络访问(仅内网使用)
|
||
3. 定期更新Docker和系统
|
||
4. 监控系统资源使用情况
|
||
EOF
|
||
|
||
# 重新打包
|
||
echo "[信息] 创建最终部署包..."
|
||
cd "$TEMP_DIR"
|
||
tar -czf "../$PACKAGE_NAME.tar.gz" "$EXTRACTED_DIR"
|
||
cd ..
|
||
|
||
# 清理临时文件
|
||
rm -rf "$TEMP_DIR"
|
||
rm -f "$LATEST_PACKAGE"
|
||
|
||
echo ""
|
||
echo "=== 完整离线部署包创建完成 ==="
|
||
echo "文件名: $PACKAGE_NAME.tar.gz"
|
||
echo "大小: $(du -h "$PACKAGE_NAME.tar.gz" | cut -f1)"
|
||
echo ""
|
||
echo "部署说明:"
|
||
echo "1. 将 $PACKAGE_NAME.tar.gz 传输到目标服务器"
|
||
echo "2. 解压: tar -xzf $PACKAGE_NAME.tar.gz"
|
||
echo "3. 进入目录: cd ${PACKAGE_NAME%.*}"
|
||
echo "4. 运行安装: ./install.sh"
|
||
echo ""
|
||
echo "注意: 如果目标服务器没有Docker,安装脚本会提示安装Docker和Docker Compose"
|
||
echo ""
|