首页
/ AzerothCore-WoTLK Docker Compose部署:多容器协同配置

AzerothCore-WoTLK Docker Compose部署:多容器协同配置

2026-02-05 05:14:09作者:宗隆裙

你是否还在为MMO服务器搭建的复杂环境配置而烦恼?是否因数据库、认证服务、游戏逻辑服务的协同工作而头疼?本文将带你通过Docker Compose一键部署AzerothCore-WoTLK服务器,实现多容器无缝协作,让你轻松拥有自己的魔兽世界私人服务器。读完本文,你将掌握容器化部署的核心配置、环境变量设置、服务间依赖管理以及常见问题排查方法。

容器架构概览

AzerothCore-WoTLK的Docker Compose部署方案采用模块化设计,通过多个专用容器实现服务解耦与协同。核心容器架构如下:

graph TD
    subgraph AzerothCore容器集群
        A[ac-database\nMySQL数据库] -->|提供数据存储| B[ac-db-import\n数据库初始化]
        B --> C[ac-authserver\n认证服务]
        B --> D[ac-worldserver\n游戏世界服务]
        E[ac-client-data-init\n客户端数据] --> D
        C -->|认证协议| D
    end

核心容器组件说明

  • 数据库容器(ac-database):基于MySQL 8.4,存储账号、角色、游戏世界等核心数据,通过卷ac-database持久化数据
  • 数据库初始化容器(ac-db-import):负责数据库结构创建与初始数据导入,依赖健康状态的数据库服务[docker-compose.yml#L53-L54]
  • 认证服务器容器(ac-authserver):处理玩家登录认证,监听3724端口[docker-compose.yml#L123]
  • 游戏世界容器(ac-worldserver):核心游戏逻辑服务,依赖数据库初始化和客户端数据[docker-compose.yml#L89-L95]
  • 客户端数据容器(ac-client-data-init):提供游戏地图、场景等必要客户端资源[docker-compose.yml#L130-L143]

所有容器通过专用网络ac-network实现内部通信,确保服务间安全高效的数据交换[docker-compose.yml#L218]。

环境准备与基础配置

前置依赖

部署前需确保系统已安装:

  • Docker Engine (20.10+)
  • Docker Compose (v2+)
  • Git

官方推荐通过Docker Desktop获取完整工具链,Linux用户可通过发行版包管理器安装。

获取项目代码

git clone https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk.git
cd azerothcore-wotlk

核心配置文件解析

docker-compose.yml是整个部署的核心,定义了所有服务的配置参数与依赖关系:

# 关键服务定义示例(完整配置见[docker-compose.yml](https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk/blob/c13492fb31bbbb35bebc96eb69f8c78581e4628f/docker-compose.yml?utm_source=gitcode_repo_files))
services:
  ac-worldserver:
    image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master}
    build:
      context: .
      target: worldserver
      dockerfile: apps/docker/Dockerfile  # 构建配置
    environment:
      AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world"
    ports:
      - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085  # 游戏通信端口
      - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878  # 管理接口端口
    volumes:
      - ${DOCKER_VOL_DATA:-ac-client-data}:/azerothcore/env/dist/data/:ro  # 只读客户端数据
    depends_on:
      ac-database:
        condition: service_healthy  # 依赖健康的数据库服务
      ac-db-import:
        condition: service_completed_successfully  # 等待数据库初始化完成

环境变量配置:可通过创建.env文件自定义关键参数,如数据库密码、端口映射等:

# 示例.env文件内容
DOCKER_DB_ROOT_PASSWORD=your_secure_password
DOCKER_AUTH_EXTERNAL_PORT=3724
DOCKER_WORLD_EXTERNAL_PORT=8085
DOCKER_USER_ID=1000
DOCKER_GROUP_ID=1000

构建与启动流程

构建容器镜像

# 构建所有服务镜像
docker compose build

# 可选:构建并后台启动服务(首次运行推荐)
docker compose up -d --build

首次构建将耗时较长(15-30分钟,取决于网络和硬件),Docker会缓存构建结果,后续构建将显著加快。构建过程通过apps/docker/Dockerfile定义,采用多阶段构建优化最终镜像大小。

初始化管理账号

服务启动后,需为世界服务器创建管理员账号:

# 连接到世界服务器容器
docker compose attach ac-worldserver

# 在AC控制台执行账号创建命令
AC> account create admin your_password 3 -1
# 参数说明:3=管理员权限等级,-1=永久有效期

注意:执行命令后按Ctrl+P+Q可退出容器而不终止服务

核心容器配置详解

数据库服务配置

ac-database容器采用官方MySQL 8.4镜像,关键配置:

services:
  ac-database:
    image: mysql:8.4
    ports:
      - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306  # 可选暴露数据库端口
    environment:
      MYSQL_ROOT_PASSWORD: ${DOCKER_DB_ROOT_PASSWORD:-password}
    volumes:
      - type: volume
        source: ac-database  # 命名卷持久化数据
        target: /var/lib/mysql
    healthcheck:
      test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\""
      interval: 5s
      timeout: 10s
      retries: 40  # 最多重试40次(200秒)等待数据库就绪

游戏世界服务优化

ac-worldserver作为核心服务,可通过环境变量和配置文件调整性能:

environment:
  # 数据库连接信息
  AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world"
  # 日志配置
  AC_LOGS_DIR: "/azerothcore/env/dist/logs"
volumes:
  # 客户端数据卷(只读)
  - ${DOCKER_VOL_DATA:-ac-client-data}:/azerothcore/env/dist/data/:ro
  # 日志目录(启用delegated优化OSX文件系统性能)
  - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated

详细配置可通过修改env/dist/etc/worldserver.conf调整,配置模板位于conf目录。

服务监控与维护

容器状态管理

# 查看所有服务状态
docker compose ps

# 查看服务日志
docker compose logs -f ac-worldserver  # 实时查看世界服务器日志
docker compose logs -f ac-authserver   # 查看认证服务日志

# 重启特定服务
docker compose restart ac-worldserver

# 停止所有服务(保留数据)
docker compose down

# 停止并删除数据卷(彻底重置)
docker compose down -v

数据备份策略

数据库数据通过Docker卷持久化,建议定期备份:

# 备份数据库到本地文件
docker compose exec ac-database mysqldump -u root -p$DOCKER_DB_ROOT_PASSWORD --all-databases > backup_$(date +%Y%m%d).sql

客户端数据存储在命名卷ac-client-data中,可通过以下命令导出:

# 导出客户端数据卷
docker run --rm -v ac-client-data:/source -v $(pwd):/backup alpine tar -czf /backup/client-data.tar.gz -C /source .

高级配置与优化

开发环境支持

项目提供开发专用容器配置,适合代码修改与调试:

# 启动开发环境(包含完整源码和编译工具)
docker compose --profile dev up -d

开发容器将本地代码目录挂载到容器内,支持实时编译与测试,详细配置见docker-compose.yml#L164-L205

自定义模块部署

AzerothCore支持模块化扩展,可通过以下步骤添加自定义模块:

  1. 将模块代码放入modules目录
  2. 修改docker-compose.yml添加模块构建参数
  3. 重新构建并启动服务:docker compose up -d --build

模块开发指南详见how_to_make_a_module.md

常见问题排查

容器启动失败

  1. 数据库连接问题:检查ac-database容器健康状态,通过docker compose logs ac-database查看错误信息
  2. 权限问题:确保本地目录权限正确,可通过以下命令修复:
    sudo chown -R $(id -u):$(id -g) env/dist/etc env/dist/logs
    
  3. 端口冲突:修改.env文件中的端口映射参数,如DOCKER_AUTH_EXTERNAL_PORT=3725

客户端数据缺失

若世界服务器启动时报错"Map file not found",通常是客户端数据未正确初始化:

# 手动触发客户端数据下载
docker compose run --rm ac-client-data-init

数据初始化脚本位于apps/installer/includes/functions.sh中的inst_download_client_data函数。

性能优化建议

  • 启用ccache:加速重复构建,配置见var/ccache目录
  • 调整数据库参数:通过修改my.cnf优化MySQL性能
  • 资源限制:在docker-compose.yml中为服务添加资源限制:
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 8G
    

总结与展望

通过Docker Compose部署AzerothCore-WoTLK,我们实现了:

  • ✅ 环境一致性:消除"在我机器上能运行"的问题
  • ✅ 服务隔离:各组件独立运行,互不干扰
  • ✅ 一键部署:简化复杂环境配置
  • ✅ 灵活扩展:支持开发、测试、生产多环境切换

未来版本将进一步优化容器启动速度,并增加监控面板集成,让服务器管理更加便捷。如需深入学习,可参考以下资源:

希望本文能帮助你顺利搭建自己的AzerothCore服务器,享受魔兽世界私人服务器的乐趣!如有问题,欢迎在项目Issue中交流反馈。

登录后查看全文
热门项目推荐
相关项目推荐