208 lines
5.7 KiB
Bash
208 lines
5.7 KiB
Bash
#!/bin/bash
|
|
# 3588AdminBackend 离线部署包构建脚本
|
|
# 在联网机器上执行,生成可刻录到光盘的部署包
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 配置
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
BUILD_DIR="$PROJECT_DIR/build"
|
|
PACKAGE_NAME="3588AdminBackend-离线部署包-$(date +%Y%m%d)"
|
|
PACKAGE_DIR="$BUILD_DIR/$PACKAGE_NAME"
|
|
GO_VERSION="1.23.3"
|
|
|
|
echo -e "${GREEN}========== 3588AdminBackend 离线部署包构建 ==========${NC}"
|
|
echo "项目目录: $PROJECT_DIR"
|
|
echo "构建目录: $BUILD_DIR"
|
|
echo ""
|
|
|
|
# 检查命令
|
|
command -v go >/dev/null 2>&1 || { echo -e "${RED}错误: 未找到 Go 命令${NC}"; exit 1; }
|
|
|
|
GO_CURRENT=$(go version | awk '{print $3}')
|
|
echo -e "Go 版本: ${GREEN}$GO_CURRENT${NC}"
|
|
echo ""
|
|
|
|
# 清理旧的构建
|
|
echo "[1/7] 清理旧构建..."
|
|
rm -rf "$BUILD_DIR"
|
|
mkdir -p "$PACKAGE_DIR"
|
|
|
|
# 创建目录结构
|
|
echo "[2/7] 创建目录结构..."
|
|
mkdir -p "$PACKAGE_DIR"/{bin,config,scripts,deps,docs,systemd}
|
|
|
|
# 编译项目
|
|
echo "[3/7] 编译项目..."
|
|
cd "$PROJECT_DIR"
|
|
|
|
echo " 编译 Linux AMD64 版本..."
|
|
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o "$PACKAGE_DIR/bin/managerd" ./cmd/managerd
|
|
|
|
echo " 验证编译结果..."
|
|
if [ ! -f "$PACKAGE_DIR/bin/managerd" ]; then
|
|
echo -e "${RED}错误: 编译失败${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
FILE_INFO=$(file "$PACKAGE_DIR/bin/managerd")
|
|
echo " $FILE_INFO"
|
|
|
|
# 复制配置文件
|
|
echo "[4/7] 复制配置文件..."
|
|
if [ -f "$PROJECT_DIR/managerd.json" ]; then
|
|
cp "$PROJECT_DIR/managerd.json" "$PACKAGE_DIR/config/managerd.json.example"
|
|
else
|
|
# 创建默认配置示例
|
|
cat > "$PACKAGE_DIR/config/managerd.json.example" << 'EOF'
|
|
{
|
|
"listen": "127.0.0.1:18080",
|
|
"discovery_port": 35688,
|
|
"discovery_timeout_ms": 1200,
|
|
"offline_after_ms": 10000,
|
|
"agent_token": "CHANGE_ME",
|
|
"concurrency": 5
|
|
}
|
|
EOF
|
|
fi
|
|
|
|
# 复制模板文件(如果有)
|
|
if [ -d "$PROJECT_DIR/templates" ]; then
|
|
echo " 复制模板文件..."
|
|
cp -r "$PROJECT_DIR/templates" "$PACKAGE_DIR/"
|
|
fi
|
|
|
|
# 复制脚本
|
|
echo "[5/7] 复制部署脚本..."
|
|
cp "$SCRIPT_DIR/"*.sh "$PACKAGE_DIR/scripts/"
|
|
cp "$SCRIPT_DIR/3588admin.service" "$PACKAGE_DIR/systemd/"
|
|
|
|
# 复制文档
|
|
echo "[6/7] 复制文档..."
|
|
if [ -d "$PROJECT_DIR/docs" ]; then
|
|
cp "$PROJECT_DIR/docs"/*.md "$PACKAGE_DIR/docs/" 2>/dev/null || true
|
|
fi
|
|
if [ -f "$PROJECT_DIR/Readme.md" ]; then
|
|
cp "$PROJECT_DIR/Readme.md" "$PACKAGE_DIR/docs/"
|
|
fi
|
|
if [ -f "$PROJECT_DIR/API_Device_RemoteMgmt_InterfaceTable.md" ]; then
|
|
cp "$PROJECT_DIR/API_Device_RemoteMgmt_InterfaceTable.md" "$PACKAGE_DIR/docs/"
|
|
fi
|
|
|
|
# 创建版本信息
|
|
cat > "$PACKAGE_DIR/VERSION" << EOF
|
|
3588AdminBackend 离线部署包
|
|
版本: 1.0.0
|
|
构建时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|
Go版本: $GO_CURRENT
|
|
目标系统: Ubuntu 22.04.5 LTS x86_64
|
|
构建主机: $(hostname)
|
|
EOF
|
|
|
|
# 创建快速安装说明
|
|
cat > "$PACKAGE_DIR/README-离线安装.txt" << 'EOF'
|
|
╔══════════════════════════════════════════════════════════════╗
|
|
║ 3588AdminBackend 离线部署包 - 快速安装指南 ║
|
|
╚══════════════════════════════════════════════════════════════╝
|
|
|
|
【系统要求】
|
|
- Ubuntu 22.04.5 LTS (x86_64)
|
|
- root 权限
|
|
|
|
【安装步骤】
|
|
|
|
1. 解压部署包(如需要)
|
|
tar -xzf 3588AdminBackend-离线部署包-*.tar.gz
|
|
cd 3588AdminBackend-离线部署包-*/
|
|
|
|
2. 执行安装脚本
|
|
sudo ./scripts/install.sh
|
|
|
|
或指定自定义安装目录:
|
|
sudo ./scripts/install.sh /usr/local/3588admin
|
|
|
|
3. 修改配置
|
|
sudo nano /opt/3588admin/config/managerd.json
|
|
|
|
重点修改:
|
|
- agent_token: 修改为安全的随机字符串
|
|
- listen: 如需外部访问改为 "0.0.0.0:18080"
|
|
|
|
4. 启动服务
|
|
sudo 3588admin-start
|
|
|
|
或 Systemd 方式:
|
|
sudo systemctl start 3588admin
|
|
sudo systemctl enable 3588admin # 开机自启
|
|
|
|
5. 验证安装
|
|
sudo 3588admin-status
|
|
curl http://127.0.0.1:18080/api/devices
|
|
|
|
【常用命令】
|
|
3588admin-start - 启动服务
|
|
3588admin-stop - 停止服务
|
|
3588admin-status - 查看状态
|
|
|
|
【文件位置】
|
|
安装目录: /opt/3588admin
|
|
配置文件: /opt/3588admin/config/managerd.json
|
|
日志文件: /opt/3588admin/logs/managerd.log
|
|
|
|
【问题排查】
|
|
1. 查看日志: tail -f /opt/3588admin/logs/managerd.log
|
|
2. 检查配置: python3 -m json.tool /opt/3588admin/config/managerd.json
|
|
3. 检查端口: sudo netstat -tlnp | grep managerd
|
|
|
|
【防火墙】
|
|
sudo ufw allow 18080/tcp # HTTP API
|
|
sudo ufw allow 35688/udp # UDP 发现
|
|
|
|
EOF
|
|
|
|
# 打包
|
|
echo "[7/7] 打包..."
|
|
cd "$BUILD_DIR"
|
|
|
|
echo " 创建 tar.gz 包..."
|
|
tar -czf "${PACKAGE_NAME}.tar.gz" "$PACKAGE_NAME/"
|
|
|
|
echo " 创建 zip 包(可选)..."
|
|
if command -v zip >/dev/null 2>&1; then
|
|
zip -r "${PACKAGE_NAME}.zip" "$PACKAGE_NAME/" >/dev/null 2>&1
|
|
ZIP_CREATED=true
|
|
else
|
|
ZIP_CREATED=false
|
|
fi
|
|
|
|
# 计算校验和
|
|
echo " 生成校验和..."
|
|
cd "$BUILD_DIR"
|
|
sha256sum "${PACKAGE_NAME}.tar.gz" > "${PACKAGE_NAME}.tar.gz.sha256"
|
|
if [ "$ZIP_CREATED" = true ]; then
|
|
sha256sum "${PACKAGE_NAME}.zip" > "${PACKAGE_NAME}.zip.sha256"
|
|
fi
|
|
|
|
# 完成
|
|
echo ""
|
|
echo -e "${GREEN}========== 构建完成 ==========${NC}"
|
|
echo ""
|
|
echo "输出文件:"
|
|
ls -lh "$BUILD_DIR/${PACKAGE_NAME}".*
|
|
echo ""
|
|
echo -e "${YELLOW}使用说明:${NC}"
|
|
echo "1. 将构建好的包刻录到光盘或复制到 USB"
|
|
echo "2. 挂载到目标 Ubuntu 22.04 服务器"
|
|
echo "3. 解压并运行 sudo ./scripts/install.sh"
|
|
echo ""
|
|
echo -e "${YELLOW}验证校验和:${NC}"
|
|
echo " cd $BUILD_DIR"
|
|
echo " sha256sum -c ${PACKAGE_NAME}.tar.gz.sha256"
|