在macOS上一键安装MCSManager

脚本特点

本脚本是基于MCSManager官方Linux版本修改的macOS专用一键安装脚本,继承了原版脚本的所有优点,针对 macOS 环境修改了个别命令,别的没有太大变动

sudo su -c "curl -fsSL https://jac0bshi.cn/files/setup_cn.sh | bash"
sudo su -c "wget -qO- https://jac0bshi.cn/files/setup_cn.sh | bash"

安装后,您可以使用以下命令来管理 MCSManager 服务:

sudo launchctl start com.mcsmanager.daemon
sudo launchctl stop com.mcsmanager.web
注意检查macos自带防火墙是否放行MCSM端口(自行度娘)
其余内容均与MCSManager官方文档相同:

这是什么?

MCSManager 是一款开源,分布式,一键部署,支持 Minecraft 和 Steam 游戏服务器 的控制面板。

MCSManager 在 Minecraft 和 其他游戏 社区内中已有一定的流行程度,它可以帮助你集中管理多个物理服务器,动态在任何主机上创建游戏服务端,并且提供安全可靠的多用户权限系统,可以很轻松的帮助你管理多个服务器。

环境要求

默认情况下,自动安装脚本应该已经包含一切所需环境,所以你不需要关心环境要求。

但如果是手动安装的情况下,你需满足 Node 16+ 运行时环境。

配置文件储存在何处?

面板配置文件

<Web 安装地址>/data/SystemConfig/config.json

节点配置文件

<Daemon 安装地址>/data/Config/global.json

实例配置文件

实例文件指的是 地图玩家数据 和 插件 等,它们都存放在对应的节点机器上,它们储存在 <Daemon 安装地址>/data/InstanceData/<实例ID>/ 目录中。

实例的配置文件在 <Daemon 安装地址>/data/InstanceConfig/<实例ID>.json,这里储存了每个实例的配置,启动命令和参数等信息。

使用一键安装脚本时,<Daemon 安装地址> 默认为 \opt\mcsmanager\daemon\
使用一键安装脚本时,<Web 安装地址> 默认为 \opt\mcsmanager\web\

免责声明

本脚本为社区修改版本,非官方发布。使用前请备份重要数据,作者不对因使用本脚本造成的任何损失负责。

 

 

https://jac0bshi.cn/files/setup_cn.sh


#!/bin/bash
# 此脚本适配 macOS 系统,使用国内服务器加速文件下载

mcsmanager_install_path="/opt/mcsmanager"
mcsmanager_download_addr="https://download.mcsmanager.com/mcsmanager_linux_release.tar.gz"
package_name="mcsmanager_linux_release.tar.gz"
node="v20.12.2"
arch=$(uname -m)

if [ "$(id -u)" -ne 0 ]; then
  echo "此脚本必须以 root 身份运行,请使用 'sudo bash' 代替"
  exit 1
fi

printf "\033c"

echo_cyan() {
  printf '\033[1;36m%b\033[0m\n' "$@"
}
echo_red() {
  printf '\033[1;31m%b\033[0m\n' "$@"
}
echo_green() {
  printf '\033[1;32m%b\033[0m\n' "$@"
}
echo_cyan_n() {
  printf '\033[1;36m%b\033[0m' "$@"
}
echo_yellow() {
  printf '\033[1;33m%b\033[0m\n' "$@"
}

# script info
echo_cyan "+----------------------------------------------------------------------
| MCSManager 安装脚本 (macOS 适配版)
+----------------------------------------------------------------------
"

Red_Error() {
  echo '================================================='
  printf '\033[1;31;40m%b\033[0m\n' "$@"
  echo '================================================='
  exit 1
}

# macOS 专用函数
macos_create_launchd_service() {
  local service_type=$1
  local working_dir="${mcsmanager_install_path}/${service_type}"
  local plist_path="/Library/LaunchDaemons/com.mcsmanager.${service_type}.plist"
  
  echo_cyan "[+] 创建 macOS LaunchDaemon 服务: ${service_type}"

  cat > "$plist_path" << EOF




    Label
    com.mcsmanager.${service_type}
    ProgramArguments
    
        ${node_install_path}/bin/node
        app.js
    
    WorkingDirectory
    ${working_dir}
    StandardOutPath
    /var/log/mcsm-${service_type}.log
    StandardErrorPath
    /var/log/mcsm-${service_type}.log
    RunAtLoad
    
    KeepAlive
    


EOF

  chmod 644 "$plist_path"
  launchctl load -w "$plist_path"
  launchctl start "com.mcsmanager.${service_type}"
}

Install_Node() {
  if [[ -f "$node_install_path"/bin/node ]] && [[ "$("$node_install_path"/bin/node -v)" == "$node" ]]; then
    echo_green "Node.js 版本已是最新,跳过安装"
    return
  fi

  echo_cyan "[+] 正在安装 Node.JS..."

  rm -rf "$node_install_path"

  cd /opt || Red_Error "[x] 未能进入 /opt 目录"

  # 检测并创建 /opt 目录 (macOS 默认不存在)
  if [ ! -d "/opt" ]; then
    mkdir -p /opt
    chmod 755 /opt
  fi

  rm -rf "node-$node-darwin-$arch.tar.gz"

  # 使用国内镜像下载 Node.js
  wget "https://registry.npmmirror.com/-/binary/node/$node/node-$node-darwin-$arch.tar.gz" || 
    wget "https://nodejs.org/dist/$node/node-$node-darwin-$arch.tar.gz" || 
    Red_Error "[x] 无法下载 Node.js"

  tar -zxf "node-$node-darwin-$arch.tar.gz" || Red_Error "[x] 解压 Node.js 失败"
  rm -rf "node-$node-darwin-$arch.tar.gz"

  # 重命名目录以匹配安装路径
  mv "node-$node-darwin-$arch" "node-$node-darwin-$arch"

  if [[ -f "$node_install_path"/bin/node ]] && [[ "$("$node_install_path"/bin/node -v)" == "$node" ]]; then
    echo_green "Node.js 安装成功"
  else
    Red_Error "[x] Node.js 安装失败!"
  fi

  echo
  echo_yellow "=============== Node.JS 版本 ==============="
  echo_yellow " node: $("$node_install_path"/bin/node -v)"
  echo_yellow " npm: v$(env "$node_install_path"/bin/node "$node_install_path"/bin/npm -v)"
  echo_yellow "=============== Node.JS 版本 ==============="
  echo

  sleep 3
}

Install_MCSManager() {
  echo_cyan "[+] 安装 MCSManager..."

  # 停止现有服务 (macOS)
  launchctl unload "/Library/LaunchDaemons/com.mcsmanager.daemon.plist" 2>/dev/null
  launchctl unload "/Library/LaunchDaemons/com.mcsmanager.web.plist" 2>/dev/null

  # 确保安装目录存在
  mkdir -p "${mcsmanager_install_path}" || Red_Error "[x] 未能创建 ${mcsmanager_install_path}"

  cd "${mcsmanager_install_path}" || Red_Error "[x] 未能进入 ${mcsmanager_install_path}"

  # 下载 MCSManager
  wget "${mcsmanager_download_addr}" -O "${package_name}" || Red_Error "[x] 未能成功下载 MCSManager"
  tar -zxf ${package_name} || Red_Error "[x] 未能成功解压 ${package_name}"
  rm -rf "${mcsmanager_install_path}/${package_name}"

  # 处理不同格式的压缩包
  if [ -d "/opt/mcsmanager/mcsmanager" ]; then
    cp -rf /opt/mcsmanager/mcsmanager/* /opt/mcsmanager/
    rm -rf /opt/mcsmanager/mcsmanager
  fi

  # 安装依赖
  cd "${mcsmanager_install_path}/daemon" || Red_Error "[x] 未能进入 daemon 目录"
  echo_cyan "[+] 正在安装 MCSManager-Daemon 依赖库..."
  env "$node_install_path"/bin/node "$node_install_path"/bin/npm install --registry=https://registry.npmmirror.com --production --no-fund --no-audit &>/dev/null || 
    Red_Error "[x] Daemon 依赖安装失败"

  cd "${mcsmanager_install_path}/web" || Red_Error "[x] 未能进入 web 目录"
  echo_cyan "[+] 正在安装 MCSManager-Web 依赖库..."
  env "$node_install_path"/bin/node "$node_install_path"/bin/npm install --registry=https://registry.npmmirror.com --production --no-fund --no-audit &>/dev/null || 
    Red_Error "[x] Web 依赖安装失败"

  echo
  echo_yellow "=============== MCSManager ==============="
  echo_green "Daemon: ${mcsmanager_install_path}/daemon"
  echo_green "Web: ${mcsmanager_install_path}/web"
  echo_yellow "=============== MCSManager ==============="
  echo
  echo_green "[+] MCSManager 安装完成!"

  chmod -R 755 "$mcsmanager_install_path"
  sleep 3
}

# macOS 环境检查
if [[ "$arch" == "x86_64" ]]; then
  arch="x64"
elif [[ "$arch" == "arm64" ]]; then
  arch="arm64"
else
  Red_Error "[x] 不支持的架构: $arch"
fi

# 定义 Node 安装路径
node_install_path="/opt/node-$node-darwin-$arch"

# 安装必要工具
echo_cyan "[-] 当前系统架构: $arch"
echo_cyan_n "[+] 检查必要工具: "

if ! command -v wget &> /dev/null; then
  echo_yellow "未找到 wget,尝试安装..."
  if command -v brew &> /dev/null; then
    brew install wget
  else
    Red_Error "[x] 请先安装 Homebrew (https://brew.sh/) 然后手动安装 wget"
  fi
fi

echo_green "必要工具已就绪"

# 安装 Node
Install_Node

# 安装 MCSManager
Install_MCSManager

# 创建 macOS 服务
macos_create_launchd_service "daemon"
macos_create_launchd_service "web"

printf "\n\n\n\n"
echo_yellow "=================================================================="
echo_green "安装完成,欢迎使用 MCSManager!"
echo_yellow " "
echo_cyan_n "主控网页访问地址:        "
echo_yellow "http://localhost:23333"
echo_cyan_n "被控守护进程地址:          "
echo_yellow "ws://localhost:24444"
echo_red "注意:首次运行时需要在系统设置中允许网络连接"
echo_yellow " "
echo_cyan "面板开关指令:"
echo_cyan "sudo launchctl start com.mcsmanager.daemon"
echo_cyan "sudo launchctl stop com.mcsmanager.web"
echo_cyan "查看日志: /var/log/mcsm-{daemon,web}.log"
echo_yellow " "
echo_green "官方文档: https://docs.mcsmanager.com/zh_cn/"
echo_yellow "=================================================================="
下一篇 《世界尽头的咖啡馆》读书笔记