AzerothCore 魔兽世界开源服务器管理套件

1 阅读4分钟

🎮 AzerothCore 开源服务器管理套件

AzerothCore 是一个专为《魔兽世界》巫妖王之怒 (3.3.5a) 版本设计的高性能开源服务器模拟器。本项目不仅仅是一个核心模拟器,更提供了一整套强大的 Bash 脚本管理工具集,旨在简化从零开始的服务器部署、编译配置、数据库更新、模块管理以及生产环境下的服务运维。

通过统一的 acore.sh 仪表盘,开发者或服务器管理员可以告别繁琐的手动命令,享受现代化的项目管理和部署体验。

✨ 功能特性

  • 🚀 统一仪表盘管理:通过 ./acore.sh 进入交互式菜单,支持数字、长命令或短别名(如 ./acore.sh c build)直接执行,操作直观便捷。
  • 🛠️ 一键环境配置:自动检测并安装系统依赖(如编译器、MySQL、CMake),支持 GCC 和 Clang 多版本选择。
  • 📦 模块化扩展:内置模块管理器,支持一键安装/更新/移除社区模块(如 1v1 竞技场、拍卖行机器人、反作弊等)。
  • 🗄️ 智能数据库管理:提供数据库自动创建、更新、合并工具,确保 SQL 文件结构严谨,支持从 Pending 到正式更新的流程化处理。
  • 🏗️ 灵活构建系统:基于 CMake 的配置,支持静态/动态链接脚本,预编译头优化,以及 ccache 加速二次编译。
  • 🐳 Docker 支持:提供完整的 Docker Compose 配置,支持开发环境和生产环境的容器化部署,简化环境隔离与分发。
  • 📜 服务生命周期管理:集成了基于 PM2/systemd 的服务管理器,支持后台运行、崩溃自动重启、多实例管理(如多 realm)。
  • 🔄 自动化变更日志:通过脚本自动解析 Git 提交与 Pending 变更记录,生成结构化的 master.md 并递增版本号。

📦 安装指南

环境要求

  • 操作系统:Linux (Ubuntu/Debian), macOS, 或 Windows (通过 WSL/Git Bash)
  • 基础工具bash (>=4.x), git, cmake, gcc/clang, mysql-server, openssl
  • 可选ccache (加速编译), clang-format (代码风格检查)

快速安装步骤

  1. 克隆仓库

    git clone https://github.com/azerothcore/azerothcore-wotlk.git
    cd azerothcore-wotlk
    
  2. 启动仪表盘并完成首装

    ./acore.sh
    

    在菜单中输入 init 或直接输入数字,脚本将自动:

    • 安装系统依赖包 (如 libmysqlclient-dev, libssl-dev)
    • 下载并配置客户端数据 (地图、vmaps、mmaps)
    • 创建并初始化数据库 (auth, characters, world)
  3. 编译核心 在仪表盘中选择 compiler,然后根据菜单执行 all (清理、配置、编译) 或 build (仅编译)。

  4. 启动服务

    • 开发测试:使用 run-worldserverrun-authserver 直接运行。
    • 生产环境:使用 service-manager 安装为后台服务。

🎮 使用说明

基础命令示例

以下命令可以直接在终端执行,无需进入交互菜单:

# 首次完整安装 (依赖+数据库+客户端数据)
./acore.sh init

# 仅更新代码仓库
./acore.sh pull

# 进入编译器工具集 (编译、清理、配置)
./acore.sh compiler

# 编译核心 (直接执行,跳过菜单)
./acore.sh compiler build

# 安装一个模块 (如 1v1 竞技场)
./acore.sh module install mod-1v1-arena

# 运行世界服务器 (带自动重启功能)
./acore.sh run-worldserver

# 查看当前版本
./acore.sh version

典型使用场景

场景一:开发者调试
  1. 修改源码后,无需清理,直接执行增量编译:
    ./acore.sh compiler compile
    
  2. 快速启动服务器测试:
    ./acore.sh run-worldserver
    
场景二:服务器运维

使用服务管理器启动并守护进程 (需安装 PM2 或 systemd):

./acore.sh service-manager install   # 注册为系统服务
./acore.sh service-manager start     # 启动服务
./acore.sh service-manager status    # 查看状态
场景三:数据库更新

当有新的 SQL 更新文件放入 data/sql/updates/pending_db_* 目录后,执行:

./apps/update-databases.sh

脚本会自动将 pending 文件重命名为标准格式 (YYYY_MM_DD_INDEX.sql) 并移动到对应 updates/db_* 目录。

⚙️ 核心代码

主仪表盘调度器 (acore.sh)

这是整个项目的统一入口,负责解析用户输入并路由到对应的子工具。

#!/usr/bin/env bash
CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "$CURRENT_PATH/includes/includes.sh"
source "$AC_PATH_APPS/bash_shared/menu_system.sh"

# 菜单定义: 格式 "key|short|description"
menu_items=(
    "init|i|First Installation"
    "compiler|c|Run compiler tool"
    "module|m|Module manager"
    "run-worldserver|rw|execute a simple restarter for worldserver"
    "docker|dr|Run docker tools"
    "quit|q|Exit from this menu"
)

# 命令处理函数
function handle_menu_command() {
    local key="$1"
    shift
    case "$key" in
        "init") inst_allInOne ;;
        "compiler") bash "$AC_PATH_APPS/compiler/compiler.sh" "$@" ;;
        "module") bash "$AC_PATH_APPS/installer/includes/modules-manager/module-main.sh" "$@" ;;
        "run-worldserver") inst_simple_restarter worldserver ;;
        "docker") DOCKER=1 bash "$AC_PATH_ROOT/apps/docker/docker-cmd.sh" "$@" ;;
        "quit") echo "Goodbye!"; exit ;;
    esac
}

# 启动菜单系统
menu_run_with_items "ACORE DASHBOARD" handle_menu_command -- "${menu_items[@]}" -- "$@"

编译器管理模块 (compiler/compiler.sh)

封装了 CMake 配置与构建流程,支持增量编译和 ccache 加速。

#!/usr/bin/env bash
set -euo pipefail
source "$AC_PATH_APPS/bash_shared/menu_system.sh"

comp_menu_items=(
    "build|b|Configure and compile"
    "clean|cl|Clean build files"
    "configure|cfg|Run CMake"
    "compile|cmp|Compile only"
    "all|a|clean, configure and compile"
)

function comp_configure() {
    mkdir -p "$BUILDPATH" && cd "$BUILDPATH"
    cmake ../.. \
        -DCMAKE_C_COMPILER="$CCOMPILERC" \
        -DCMAKE_CXX_COMPILER="$CCOMPILERCXX" \
        -DCMAKE_INSTALL_PREFIX="$BINPATH" \
        -DCMAKE_BUILD_TYPE="$CTYPE" \
        -DSCRIPTS="$CSCRIPTS" \
        -DMODULES="$CMODULES" \
        -DTOOLS="$CTOOLS_BUILD"
}

function comp_compile() {
    cd "$BUILDPATH"
    make -j "$MTHREADS"
    make install
}

function comp_build() { comp_configure && comp_compile; }
function comp_all() { comp_clean && comp_build; }

# 调用统一菜单运行器
menu_run_with_items "ACORE COMPILER" handle_compiler_command -- "${comp_menu_items[@]}" -- "$@"

数据库更新处理器 (apps/update-databases.sh)

自动将待处理的 SQL 文件归档到正式更新目录,并维护版本索引。

#!/usr/bin/env bash
set -euo pipefail

UPDATES_PATH="$AC_PATH_ROOT/data/sql/updates"
TODAY="$(date +%Y_%m_%d)"

function import() {
    PENDING_PATH="$AC_PATH_ROOT/data/sql/updates/pending_db_$1"
    UPDATES_DIR="$UPDATES_PATH/db_$1"
    LATEST_UPDATE_TODAY="$(find "$UPDATES_DIR" -iname "$TODAY*.sql" | sort -h | tail -n 1)"

    for entry in "$PENDING_PATH"/*.sql; do
        if [[ -f "$entry" ]]; then
            # 计算下一个索引 (00, 01, ...)
            INDEX="$(get_next_index "$LATEST_UPDATE_TODAY")"
            OUTPUT_FILE="${UPDATES_DIR}/${TODAY}_${INDEX}.sql"
            
            echo "-- DB update ... -> $(basename "$OUTPUT_FILE" .sql)" > "$OUTPUT_FILE"
            cat "$entry" >> "$OUTPUT_FILE"
            rm -f "$entry"
            LATEST_UPDATE_TODAY="$OUTPUT_FILE"
        fi
    done
}

import "world"
import "characters"
import "auth"

QAGCQbYu/mNkWaEITMLl9yD408Mp4U3BoOocdqFkN7U=