#!/bin/bash # 3588AdminBackend 离线安装脚本 # 适用于 Ubuntu 22.04.5 LTS 离线环境 set -e INSTALL_DIR="${1:-/opt/3588admin}" CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" SCRIPT_DIR="$CURRENT_DIR" BASE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" echo "========== 3588AdminBackend 离线安装 ==========" echo "安装目录: $INSTALL_DIR" echo "" # 检查 root 权限 if [ "$EUID" -ne 0 ]; then echo "错误: 请使用 sudo 运行安装脚本" echo "用法: sudo $0 [安装目录]" exit 1 fi # 检查安装目录 if [ -d "$INSTALL_DIR" ] && [ "$(ls -A $INSTALL_DIR 2>/dev/null)" ]; then echo "警告: 安装目录 $INSTALL_DIR 已存在且不为空" read -p "是否覆盖? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "安装已取消" exit 1 fi # 备份现有配置 if [ -f "$INSTALL_DIR/config/managerd.json" ]; then BACKUP_FILE="$INSTALL_DIR/config/managerd.json.bak.$(date +%Y%m%d%H%M%S)" echo "备份现有配置到: $BACKUP_FILE" cp "$INSTALL_DIR/config/managerd.json" "$BACKUP_FILE" fi fi # 1. 安装依赖包(如果有) if [ -d "$BASE_DIR/deps" ] && [ "$(ls -A $BASE_DIR/deps/*.deb 2>/dev/null)" ]; then echo "[1/5] 安装依赖包..." cd "$BASE_DIR/deps" for pkg in *.deb; do echo " 安装: $pkg" dpkg -i "$pkg" 2>/dev/null || true done echo " 修复依赖..." apt-get install -f -y 2>/dev/null || true else echo "[1/5] 跳过依赖包安装 (无依赖包)" fi # 2. 创建安装目录 echo "[2/5] 创建安装目录..." mkdir -p "$INSTALL_DIR" # 复制文件 echo " 复制二进制文件..." mkdir -p "$INSTALL_DIR/bin" cp "$BASE_DIR/bin/managerd" "$INSTALL_DIR/bin/" 2>/dev/null || { echo "错误: 未找到 managerd 二进制文件" echo "请确保在打包前已编译: GOOS=linux GOARCH=amd64 go build -o bin/managerd ./cmd/managerd" exit 1 } echo " 复制配置文件..." mkdir -p "$INSTALL_DIR/config" if [ -f "$BASE_DIR/config/managerd.json" ]; then cp "$BASE_DIR/config/managerd.json" "$INSTALL_DIR/config/" elif [ -f "$BASE_DIR/config/managerd.json.example" ]; then cp "$BASE_DIR/config/managerd.json.example" "$INSTALL_DIR/config/" fi # 复制模板文件(如果有) if [ -d "$BASE_DIR/templates" ]; then echo " 复制模板文件..." cp -r "$BASE_DIR/templates" "$INSTALL_DIR/" fi echo " 复制脚本文件..." mkdir -p "$INSTALL_DIR/scripts" cp "$SCRIPT_DIR/"*.sh "$INSTALL_DIR/scripts/" 2>/dev/null || true # 3. 设置权限 echo "[3/5] 设置权限..." chmod +x "$INSTALL_DIR/bin/managerd" chmod +x "$INSTALL_DIR/scripts/"*.sh 2>/dev/null || true mkdir -p "$INSTALL_DIR/logs" chmod 755 "$INSTALL_DIR/logs" # 4. 初始化配置文件 echo "[4/5] 初始化配置文件..." if [ ! -f "$INSTALL_DIR/config/managerd.json" ]; then if [ -f "$BASE_DIR/config/managerd.json.example" ]; then cp "$BASE_DIR/config/managerd.json.example" "$INSTALL_DIR/config/managerd.json" echo " 已创建默认配置文件" else # 创建默认配置文件 cat > "$INSTALL_DIR/config/managerd.json" << '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 echo " 已创建默认配置文件" fi echo " ⚠️ 请编辑 $INSTALL_DIR/config/managerd.json 修改配置(特别是 agent_token)" else echo " 配置文件已存在,保留现有配置" fi # 5. 创建快捷方式 echo "[5/5] 创建快捷方式..." ln -sf "$INSTALL_DIR/scripts/start.sh" /usr/local/bin/3588admin-start 2>/dev/null || true ln -sf "$INSTALL_DIR/scripts/stop.sh" /usr/local/bin/3588admin-stop 2>/dev/null || true ln -sf "$INSTALL_DIR/scripts/status.sh" /usr/local/bin/3588admin-status 2>/dev/null || true # 6. 安装 Systemd 服务(可选) if [ -f "$SCRIPT_DIR/3588admin.service" ]; then echo "[可选] 安装 Systemd 服务..." cp "$SCRIPT_DIR/3588admin.service" /etc/systemd/system/ # 更新服务文件中的路径 sed -i "s|/opt/3588admin|$INSTALL_DIR|g" /etc/systemd/system/3588admin.service systemctl daemon-reload echo " 已安装 Systemd 服务" echo " 使用命令:" echo " systemctl start 3588admin # 启动服务" echo " systemctl stop 3588admin # 停止服务" echo " systemctl enable 3588admin # 开机自启" fi echo "" echo "========== 安装完成 ==========" echo "安装目录: $INSTALL_DIR" echo "" echo "使用命令:" echo " 3588admin-start - 启动服务" echo " 3588admin-stop - 停止服务" echo " 3588admin-status - 查看状态" echo "" echo "或者直接使用:" echo " $INSTALL_DIR/scripts/start.sh" echo " $INSTALL_DIR/scripts/stop.sh" echo " $INSTALL_DIR/scripts/status.sh" echo "" echo "重要提示:" echo " 1. 请先编辑配置文件: $INSTALL_DIR/config/managerd.json" echo " 2. 务必修改 agent_token 为安全的随机字符串" echo " 3. 如需监听外部地址,修改 listen 配置项" echo " 4. 确保防火墙开放 discovery_port (默认 35688/UDP)" echo "" echo "首次启动前请执行:" echo " sudo nano $INSTALL_DIR/config/managerd.json"