irpas技术客

魔兽世界服务端AzerothCore+Centos系统+docker编译教程_壹只菜鸟

大大的周 7940

魔兽世界服务端AzerothCore+Centos系统+docker编译教程 1.1 准备工作1.1.1 准备1.1.2 安装软件1.1.3 下载源码1.1.4 地图文件 1.2 修改配置文件1.2.1 修改环境变量文件1.2.2 修改文件执行权限1.2.3 修改配置文件 1.3 编译及启动1.3.1 编译项目1.3.2 启动容器1.3.3 无法启动1. 网络问题2.时区问题 1.3.4 数据库表修改 1.4 游戏测试1.4.1 创建GM账户1.4.2 客户端登录游戏 1.5 GM指令 声明:本文只做探讨性研究,不以盈利为目的,仅供个人娱乐。如果涉及侵权行为,请联系本作者删除。

1.1 准备工作 1.1.1 准备 linux系统服务器1台, 推荐Centos7 系统,虚拟机即可服务器能够访问外网地图文件下载魔兽世界客户端12340版本,即3.3.5 WLK版本 1.1.2 安装软件

安装docker CentOS 环境下安装 Docker 安装docker compose 12.2.2 二进制包 安装git:yum install git

1.1.3 下载源码 cd / git clone https://gitee.com/53957105/azerothcore-wotlk.git

下载完成后,会出现 /azerothcore-wotlk 目录

1.1.4 地图文件

地图文件下载地址 (data.zip) 上传地图数据文件到 docker/worldserver/data/ 解压地图数据

cd /azerothcore-wotlk/docker/worldserver/data/ unzip data.zip 1.2 修改配置文件 1.2.1 修改环境变量文件

进入 /azerothcore-wotlk 目录

[root@localhost ~]# cd /azerothcore-wotlk/ [root@localhost azerothcore-wotlk]# cp .env.dist .env [root@localhost azerothcore-wotlk]# cat .env WORLDSERVER_DATA=./docker/worldserver/data WORLDSERVER_ETC=./docker/worldserver/etc WORLDSERVER_LOGS=./docker/worldserver/logs AUTHSERVER_ETC=./docker/authserver/etc AUTHSERVER_LOGS=./docker/authserver/logs WORLD_EXTERNAL_PORT=1001 AUTH_EXTERNAL_PORT=1002 DB_EXTERNAL_PORT=1003 DB_ROOT_PASSWORD=123456 SOAP_EXTERNAL_PORT=1004

端口可自定义,后面操作同步修改

1.2.2 修改文件执行权限 chmod +x -R ../azerothcore-wotlk 1.2.3 修改配置文件 [root@localhost azerothcore-wotlk]# cat docker/worldserver/etc/worldserver.conf ################################################ # AzerothCore World Server configuration file # ################################################ [worldserver] # Do NOT change those Dir configs LogsDir = "/azeroth-server/logs" # will reflect on your host directory: docker/worldserver/logs DataDir = "/azeroth-server/data" # Change this configuration accordingly with your docker setup # The format is "hostname;port;username;password;database": # - docker containers must be on the same docker network to be able to communicate # - the DB hostname will be the name of the database docker container LoginDatabaseInfo = "ac-database;3306;root;123456;acore_auth" WorldDatabaseInfo = "ac-database;3306;root;123456;acore_world" CharacterDatabaseInfo = "ac-database;3306;root;123456;acore_characters" # Add more configuration overwrites by copying settings from worldserver.conf.dist LogLevel = 2 # Disable idle connections automatic kick since it doesn't work well on macOS + Docker CloseIdleConnections = 0 SOAP.Enabled = 1 SOAP.IP = "0.0.0.0" SOAP.Port = 7878 [root@localhost azerothcore-wotlk]# cat docker/authserver/etc/authserver.conf ############################################### # AzerothCore Auth Server configuration file # ############################################### [authserver] # Do not change this LogsDir = "/azeroth-server/logs" # will reflect on your host directory: docker/worldserver/logs # Change this configuration accordingly with your docker setup # The format is "hostname;port;username;password;database": # - docker containers must be on the same docker network to be able to communicate # - the DB hostname will be the name of the database docker container LoginDatabaseInfo = "ac-database;3306;root;123456;acore_auth" # Add more configuration overwrites by copying settings from from authserver.conf.dist LogLevel = 3 SQLDriverLogFile = "SQLDriver.log" SQLDriverQueryLogging = 1 1.3 编译及启动 1.3.1 编译项目 ./bin/acore-docker-build 1.3.2 启动容器 docker-compose up

如果失败,再试一次

显示下面内容,表示服务器启动成功:

ac-worldserver_1 | Max allowed socket connections 1048576 ac-worldserver_1 | AzerothCore rev. 036a8c2450ef+ 2020-10-13 10:23:18 +0200 (master branch) (Unix, Release) (worldserver-daemon) ready... [root@localhost azerothcore-wotlk]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a7c8660f835d azerothcore/worldserver "/azeroth-server/bin…" 25 hours ago Up 24 hours (healthy) 0.0.0.0:1004->7878/tcp, :::1004->7878/tcp, 0.0.0.0:1001->8085/tcp, :::1001->8085/tcp azerothcore-wotlk_ac-worldserver_1 a0a051f3a1ab azerothcore/authserver "/azeroth-server/bin…" 2 days ago Up 24 hours (healthy) 0.0.0.0:1002->3724/tcp, :::1002->3724/tcp azerothcore-wotlk_ac-authserver_1 f6d8ff788432 azerothcore/database "docker-entrypoint.s…" 2 days ago Up 24 hours (healthy) 33060/tcp, 0.0.0.0:1003->3306/tcp, :::1003->3306/tcp azerothcore-wotlk_ac-database_1

当程序启动成功,可以切换至后台运行

docker-compose up -d 1.3.3 无法启动 1. 网络问题

如果出现网络问题,无法启动,可参考以下内容修改

[root@localhost azerothcore-wotlk]# cat docker-compose.yml version: '3.2' services: ac-database: image: azerothcore/database restart: unless-stopped build: context: . dockerfile: ./docker/database/Dockerfile networks: proxy: ipv4_address: 169.17.0.10 ports: - ${DB_EXTERNAL_PORT:-3306}:3306 environment: - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-password} volumes: - type: volume source: ac-database target: /var/lib/mysql ac-worldserver: stdin_open: true tty: true image: azerothcore/worldserver restart: unless-stopped privileged: true build: context: ./docker/worldserver dockerfile: Dockerfile networks: proxy: ipv4_address: 169.17.0.11 ports: - ${WORLD_EXTERNAL_PORT:-8085}:8085 - ${SOAP_EXTERNAL_PORT:-7878}:7878 volumes: - type: bind source: ./docker/worldserver/bin target: /azeroth-server/bin - type: bind source: ${WORLDSERVER_ETC:-./docker/worldserver/etc} target: /azeroth-server/etc - type: bind source: ${WORLDSERVER_LOGS:-./docker/worldserver/logs} target: /azeroth-server/logs - type: bind source: ${WORLDSERVER_DATA:-./docker/worldserver/data} target: /azeroth-server/data depends_on: - ac-database ac-authserver: image: azerothcore/authserver restart: unless-stopped build: context: ./docker/authserver dockerfile: Dockerfile networks: proxy: ipv4_address: 169.17.0.12 ports: - ${AUTH_EXTERNAL_PORT:-3724}:3724 volumes: - type: bind source: ./docker/authserver/bin target: /azeroth-server/bin - type: bind source: ${AUTHSERVER_ETC:-./docker/authserver/etc} target: /azeroth-server/etc - type: bind source: ${AUTHSERVER_LOGS:-./docker/authserver/logs} target: /azeroth-server/logs depends_on: - ac-database volumes: ac-database: networks: proxy: ipam: config: - subnet: 169.17.0.0/24 2.时区问题

如果因为时区问题,无法启动,参考如下修改

[root@localhost azerothcore-wotlk]# cat docker/authserver/Dockerfile FROM ubuntu:20.04 # List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones # set timezone environment variable ENV TZ=Asia/Shanghai # set noninteractive mode so tzdata doesn't ask to set timezone on install ENV DEBIAN_FRONTEND=noninteractive # install the required dependencies to run the authserver RUN apt update && apt install -y libmysqlclient-dev libssl-dev libace-6.4.5 libace-dev net-tools tzdata; # change timezone in container RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata HEALTHCHECK --interval=5s --timeout=15s --start-period=30s --retries=1 CMD netstat -lnpt | grep :3724 || exit 1 # run the authserver located in the directory "docker/authserver/bin" of the host machine CMD ["/azeroth-server/bin/authserver"] [root@localhost azerothcore-wotlk]# cat docker/database/Dockerfile FROM alpine:3.9 as builder # install bash RUN apk add --no-cache bash # copy the sources from the host machine COPY apps /azerothcore/apps COPY bin /azerothcore/bin COPY conf /azerothcore/conf COPY data /azerothcore/data COPY deps /azerothcore/deps COPY acore.json /azerothcore/acore.json # run the AzerothCore database assembler RUN ./azerothcore/bin/acore-db-asm 1 FROM mysql:5.7 # List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones # set timezone environment variable ENV TZ=Asia/Shanghai ENV LANG C.UTF-8 # copy files from the previous build stage - see: https://docs.docker.com/develop/develop-images/multistage-build/ COPY --from=builder /azerothcore/env/dist/sql /sql # adding the "generate-databases.sh" to the directory "/docker-entrypoint-initdb.d" # because all scripts included in that directory will automatically be executed when the docker container starts COPY docker/database/generate-databases.sh /docker-entrypoint-initdb.d HEALTHCHECK --interval=5s --timeout=15s --start-period=30s --retries=1 CMD mysqladmin -uroot -p$MYSQL_ROOT_PASSWORD ping -h localhost [root@localhost azerothcore-wotlk]# cat docker/worldserver/Dockerfile FROM ubuntu:20.04 # List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones # set timezone environment variable ENV TZ=Aisa/Shanghai # set noninteractive mode so tzdata doesn't ask to set timezone on install ENV DEBIAN_FRONTEND=noninteractive # install the required dependencies to run the authserver RUN apt update && apt install -y libmysqlclient-dev libssl-dev libace-6.4.5 libace-dev libreadline-dev net-tools tzdata; # change timezone in container RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata HEALTHCHECK --interval=5s --timeout=15s --start-period=30s --retries=1 CMD netstat -lnpt | grep :8085 || exit 1 # run the worldserver located in the directory "docker/worldserver/bin" of the host machine CMD ["/azeroth-server/bin/worldserver"] 1.3.4 数据库表修改 进入容器,连接数据库 [root@localhost azerothcore-wotlk]# docker exec -it azerothcore-wotlk_ac-database_1 bash bash-4.2# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1416 Server version: 5.7.41 MySQL Community Server (GPL) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 打开 acore_auth数据库, realmlist 数据表 mysql> use acore_auth; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +----------------------+ | Tables_in_acore_auth | +----------------------+ | account | | account_access | | account_banned | | account_muted | | autobroadcast | | ip2nation | | ip2nationCountries | | ip_banned | | logs | | logs_ip_actions | | realmcharacters | | realmlist | | uptime | | version_db_auth | +----------------------+ 14 rows in set (0.00 sec) mysql> select * from realmlist; +----+-------------+---------------+--------------+-----------------+------+------+------+----------+----------------------+------------+-----------+ | id | name | address | localAddress | localSubnetMask | port | icon | flag | timezone | allowedSecurityLevel | population | gamebuild | +----+-------------+---------------+--------------+-----------------+------+------+------+----------+----------------------+------------+-----------+ | 1 | AzerothCore | 192.168.1.200 | 127.0.0.1 | 255.255.255.0 | 1001 | 0 | 0 | 1 | 0 | 0 | 12340 | +----+-------------+---------------+--------------+-----------------+------+------+------+----------+----------------------+------------+-----------+ 1 row in set (0.00 sec) address 修改为服务器ip或者域名,port 修改为 1001 update realmlist set address='192.168.1.200',port='1001'; 重启服务器 1.4 游戏测试 1.4.1 创建GM账户

进入服务器容器,并创建gm账号

docker attach azerothcore-wotlk_ac-worldserver_1 account create admin 123456 account set gmlevel admin 3 -1

创建完成,退出容器

1.4.2 客户端登录游戏

在客户端中,创建 login.bat 文件,并写入如下内容:

@echo y | rd /s "Cache" echo SET realmlist "192.168.1.200:1002"> realmlist.wtf echo SET realmList "192.168.1.200:1002"> Data/zhCN/realmlist.wtf echo SET realmList "192.168.1.200:1002"> Data/zhTW/realmlist.wtf ren Data\commoo.MPQ common.MPQ ren Data\expansioo.MPQ expansion.MPQ start wow.exe goto end :end 1.5 GM指令

GM指令

ENJOR YOUR GAME!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #WOW