217 lines
6.2 KiB
Bash
217 lines
6.2 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版本检测
|
||
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"
|