#!/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版本检测 GO_VERSION=$(go version 2>/dev/null | awk '{print $3}') # 检查Go(仅在构建机上需要) command -v go >/dev/null 2>&1 || { echo -e "${RED}错误: 未找到 Go 命令${NC}" echo "请在联网的构建机上运行此脚本" exit 1 } echo -e "${GREEN}========== 3588AdminBackend 离线部署包构建 ==========${NC}" echo "项目目录: $PROJECT_DIR" echo "构建目录: $BUILD_DIR" echo "Go 版本: $GO_VERSION" echo "" echo -e "${YELLOW}说明: 此脚本在联网机器上运行,生成包含静态二进制文件的离线部署包${NC}" echo -e "${YELLOW} 目标机器(生产环境)无需安装 Go 运行时${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": "0.0.0.0: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/3588admin" "$PACKAGE_DIR/scripts/" chmod +x "$PACKAGE_DIR/scripts/3588admin" 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_VERSION 目标系统: Ubuntu 22.04.5 LTS x86_64 构建主机: $(hostname) EOF # 创建快速安装说明 cat > "$PACKAGE_DIR/README-离线安装.txt" << 'EOF' ╔══════════════════════════════════════════════════════════════╗ ║ 3588AdminBackend 离线部署包 - 快速安装指南 ║ ╚══════════════════════════════════════════════════════════════╝ 【系统要求】 - Ubuntu 22.04.5 LTS (x86_64) - root 权限 【重要说明】 ✓ 本部署包已包含静态编译的二进制文件 ✓ 目标机器无需安装 Go 运行时 ✓ 无需互联网连接(纯离线安装) 【安装步骤】 1. 解压部署包(如需要) tar -xzf 3588AdminBackend-离线部署包-*.tar.gz cd 3588AdminBackend-离线部署包-*/ 2. 执行安装脚本 sudo ./scripts/3588admin install 或指定自定义安装目录: sudo ./scripts/3588admin install /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 - 查看状态 3588admin restart - 重启服务 3588admin upgrade - 升级服务 3588admin uninstall - 卸载服务 3588admin check - 检查环境 【快捷命令】 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 " 生成校验和..." sha256sum "${PACKAGE_NAME}.tar.gz" > "${PACKAGE_NAME}.tar.gz.sha256" # 完成 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/3588admin install" echo "" echo -e "${YELLOW}验证校验和:${NC}" echo " cd $BUILD_DIR" echo " sha256sum -c ${PACKAGE_NAME}.tar.gz.sha256"