159 lines
5.1 KiB
Bash
159 lines
5.1 KiB
Bash
#!/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"
|