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

217 lines
6.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"