3588AdminBackend/scripts/deploy/build-offline-package.sh
2026-02-25 11:00:55 +08:00

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"