3588AdminBackend/scripts/deploy/install.sh
2026-02-25 11:00:55 +08:00

159 lines
5.1 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 离线安装脚本
# 适用于 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"