🎮 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(代码风格检查)
快速安装步骤
-
克隆仓库
git clone https://github.com/azerothcore/azerothcore-wotlk.git cd azerothcore-wotlk -
启动仪表盘并完成首装
./acore.sh在菜单中输入
init或直接输入数字,脚本将自动:- 安装系统依赖包 (如
libmysqlclient-dev,libssl-dev) - 下载并配置客户端数据 (地图、vmaps、mmaps)
- 创建并初始化数据库 (auth, characters, world)
- 安装系统依赖包 (如
-
编译核心 在仪表盘中选择
compiler,然后根据菜单执行all(清理、配置、编译) 或build(仅编译)。 -
启动服务
- 开发测试:使用
run-worldserver和run-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
典型使用场景
场景一:开发者调试
- 修改源码后,无需清理,直接执行增量编译:
./acore.sh compiler compile - 快速启动服务器测试:
./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=