Docker编译Azerothcore源码

news/2024/7/6 23:02:02/文章来源:https://www.cnblogs.com/colasdn/p/18282886

维基百科

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

前言

我一直想写下Liunx下的编译教程,毕竟Liunx运行起来更高效。但考虑到很多人还是用的Windows系统,所以最终决定用Docker运行Liunx的方式做个编译教程。本文的目的是教会大家怎么用Docker,怎么在Liunx系统上编译服务端,然后文章最后我也会发布个纯净版的Azerothcore服务端镜像,镜像文件有点大,毕竟内含Ubuntu系统、源码、编译文件、DBC、地图文件、服务端等,同时按本文教程可以随时更新,同步Azerothcore官方进度。

Docker的维基百科解释如上,你把Docker理解为虚拟机就好了,而且Docker是和宿主机共用内核,对性能影响几乎可以忽略不计。另外我们在Docker上编译Azerothcore源码,可以不必担心系统环境问题,你把服务端给别人时候也不用担心别人系统运行不起来,Docker在Windows、Liunx、Macos上都可以运行。你以后发布服务端就是4条命令的事情,别人下载服务端也就是5条命令的事情,简单、方便、可移植就是它的特性。

Docker安装

本教程Liunx也适用,Liunx的话建议使用Ubuntu 20,如果你想在Ubuntu不使用Docker直接编译,那么直接跳到“第二步:编译安装”的“环境部署”(请先切换至root);

另外说个题外话,昨晚闲得无聊,手机下了Termux装Ubuntu,成功编译并运行了服务端,其实现在手机性能都过剩了,我手机Mate40E,8G8H配置,配合本网站内的内网穿透教程,只是自己玩或者和朋友玩的话,比你买个服务器香多了吧。

言归正传,说下Windows环境,接下来开始Docker的安装:

  1. 确保win10版本为教育版、专业版或企业版,64位;
  2. 进入Docker官网下载选择Windows版本进行安装;
  3. 打开Docker,出现“Docker Engine starting…”,等待一会出现“Strat”和“skip……”两个按钮,点“skip……”即可,安装成功。

服务端搭建

以下命令均在Windows自带的PowerShell(管理员身份打开)内运行:

安装Ubuntu

拉取Ubuntu镜像

docker pull ubuntu

运行Ubuntu容器

docker run -itd --name eryuwow -p 8085:8085 -p 3306:3306 -p 3724:3724 ubuntu  #eryuwow是我自定义的容器名称,你可以改成其他名字;8085、3306、3724是我们需要用到的端口,把它从容器里映射出来

编译安装

进入Ubuntu容器

docker exec -it eryuwow /bin/bash

环境部署

apt update && apt install git && apt install curl && apt install unzip && apt install vim && apt-get install sudo && apt-get install tmux && apt-get install tzdata

在此期间显示“Do you want to continue? [Y/n]”的,输入y回车即可,以下若出现类似提示将不再赘述。期间如果让你输入国家,请依次输入6和70,如图所示:

Github加速

这个很重要,非常重要,否则接下来你下载源码和更新时候会访问不了或者很慢很慢。但如果你下载Github文件不慢的话,建议不要加速。下面讲下host文件加速Github的方法,打开这个网址:

https://raw.hellogithub.com/hosts

复制其中内容,接下来输入:

vim /etc/hosts #按i进入编辑模式,最后另起一行,右键即可粘贴上面复制的内容,按Esc,输入“:wq”回车

下载源码

cd / && git clone https://github.com/azerothcore/azerothcore-wotlk.git; cd azerothcore-wotlk

如果出现“fatal: unable to access ‘https://github.com/azerothcore/azerothcore-wotlk.git/’: GnuTLS recv error (-110): The TLS connection was non-properly terminated.”,请重新输入一遍命令。

上面是官方地址(保证最新),如果下载速度过慢不愿意等,按Ctrl+C结束下载,换成以下命令(我同步的Gitee地址,不保证最新):

cd / && git clone https://gitee.com/gswxy/azerothcore-wotlk.git; cd azerothcore-wotlk

安装依赖

cp /azerothcore-wotlk/conf/dist/config.sh /azerothcore-wotlk/conf/config.sh && vim /azerothcore-wotlk/conf/config.sh  #按i进入编辑模式,找到“OSDISTRO="ubuntu”,删去前面的#,按Esc,输入“:wq”回车
git config --global http.postBuffer 524288000 && ./acore.sh install-deps

编译源码

./acore.sh compiler all

数据库安装

vim /etc/mysql/mysql.conf.d/mysqld.cnf  #按i进入编辑模式,在“bind-address= 127.0.0.1”前面输入#,按Esc,输入“:wq”回车
service mysql restart  #重启mysql
mysql -uroot -p  #回车,弹出Enter password让你输入密码时,继续回车(第一次登陆时处于无密码状态,故跳过直接选择回车即可进入),登录MySQL
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';  #此处为修改MySQL的root密码,新密码即你自己设置的密码,不要忘记!
update user set host = '%' where user ='root';
source /azerothcore-wotlk/data/sql/create/create_mysql.sql  #创建acore用户
FLUSH PRIVILEGES;
exit;
./acore.sh db-assembler import-all  #导入数据库

服务器设置

下载data和地图文件

./acore.sh client-data

设置配置

cp env/dist/etc/authserver.conf.dist env/dist/etc/authserver.conf
cp env/dist/etc/worldserver.conf.dist env/dist/etc/worldserver.conf

启动服务器

手动启动

建议第一次启动用手动方式,方便排查错误,以管理员身份打开PowerShell:

docker exec -it eryuwow /bin/bash  #进入容器
cd /azerothcore-wotlk  #进入目录

新建一个命令窗口,窗口名称命名为auth-session,以运行authserver:

tmux new -s auth-session  #新建一个命令窗口窗口名称为
./acore.sh run-authserver  #如果出现“mysql: [Warning] Using a password on the command line interface can be insecure.”红字错误请不用管

先按ctrl+b, 放开后再按d,可以退出该命令窗口(进程不会结束),新建一个命令窗口,窗口名称命名为world-session ,以运行worldserver:

tmux new -s world-session#新建一个命令窗口
./acore.sh run-worldserver  #如果出现“Can't set process priority class, error: Permission denied”红字错误请不用管

请注意,上述命令运行后, 只要容器不关闭,authserver和 worldserver如果出现异常中断,是会自动重启的。常用的tmux命令有:

tmux attach -t SESSION-NAME  #SESSION-NAME替换为你的窗口名称,如auth-session,即可查看authserver运行情况
tmux ls  #查看所有创建的窗口信息
先按ctrl+b, 放开后再按&  #终止一个终端窗口(会退出程序,需输入y确认)
先按ctrl+b, 放开后再按d  #暂时退出当前会话(不会退出程序)

一键启动

cd /azerothcore-wotlk && vim startup.sh

输入以下内容,按Esc,输入“:wq”回车:

#!/usr/bin/env bash# CHANGE THESE WITH THE CORRECT PATHSauthserver="/azerothcore-wotlk/acore.sh run-authserver"
worldserver="/azerothcore-wotlk/acore.sh run-worldserver"authserver_session="auth-session"
worldserver_session="world-session"if tmux new-session -d -s $authserver_session; thenecho "Created authserver session: $authserver_session"
elseecho "Error when trying to create authserver session: $authserver_session"
fiif tmux new-session -d -s $worldserver_session; thenecho "Created worldserver session: $worldserver_session"
elseecho "Error when trying to create worldserver session: $worldserver_session"
fiif tmux send-keys -t $authserver_session "$authserver" C-m; thenecho "Executed \"$authserver\" inside $authserver_session"echo "You can attach to $authserver_session and check the result using \"tmux attach -t $authserver_session\""
elseecho "Error when executing \"$authserver\" inside $authserver_session"
fiif tmux send-keys -t $worldserver_session "$worldserver" C-m; thenecho "Executed \"$worldserver\" inside $worldserver_session"echo "You can attach to $worldserver_session and check the result using \"tmux attach -t $worldserver_session\""
elseecho "Error when executing \"$worldserver\" inside $worldserver_session"
fi

以后启动容器后,打开cmd或者 PowerShell,输入以下命令就可以启动服务端了:

docker exec -it eryuwow /bin/bash  #进入容器
cd /azerothcore-wotlk && ./startup.sh

进阶教程

更新服务器

docker exec -it eryuwow /bin/bash  #进入容器
cd /azerothcore-wotlk && git pull  #更新源码
./acore.sh compiler build  #重新编译
./acore.sh db-assembler import-updates  #更新数据库

另外只要你在worldserver.conf里面没有改过默认值:

Updates.EnableDatabases = 7

你在每次启动服务端的时候都会自动更新数据库。

更改data文件

如果你想用自己的data文件,或者想替换dbc文件,可以使用cp命令,下面示例如下:

docker cp C:\Users\71479\Downloads\data.zip eryuwow:/azerothcore-wotlk/env/dist/bin  #该命令为另起个PowerShell窗口后输入,拷贝data.zip到docker容器对应目录内,这里的“C:\Users\71479\Downloads\data.zip”替换成你本机data.zip的路径
cd /azerothcore-wotlk/env/dist/bin && unzip -o data.zip && rm data.zip #unzip是解压命令,-o是直接覆盖,对data.zip执行解压并覆盖,rm是删除命令,完成后删除data.zip文件

添加功能

这个链接是官方Github存储库,里面有众多的功能模块,如果你英文不好的话,多用下翻译,以自动平衡功能为例:

下载后,结合“(二)更改data文件”,将压缩包复制到/azerothcore-wotlk/modules目录,然后输入以下命令重新编译即可:

cd /azerothcore-wotlk && ./acore.sh compiler build

需要注意的是你要检查下载下来的压缩包内是否有sql文件,如果有的话,需要你将这些文件导入到数据库,比较简单的方法是连接数据库后运行该sql文件。

连接数据库

这里建议使用HeidiSQL(因为免费),你也可以用Navicat SQL软件。地址写localhost即可,用户名root,密码是前面你自己设置的即可(我设置的是root)。

解决内存占用过大问题

因为docker用的是WSL2,可能会导致Vmmem进程内存占用过大,你可以给你的容器设置最大内存的方式来缓解:

1.按下Windows + R 键,输入 %UserProfile% 并运行进入用户文件夹;

2.新建文件,命名为.wslconfig,然后记事本编辑;

3.填入以下内容并保存, memory为系统内存上限,这里我限制最大4GB,可根据自身电脑配置设置:

[wsl2]
memory=4GB
swap=0
localhostForwarding=true

4.然后启动cmd命令提示符,输入wsl --shutdown,重启下docker即可。

发布服务端

按以上教程你已经做好了一个纯净可更新的WLK服务端,如果你想分享给别人的话,按以下步骤来做:

开通镜像仓库

国内的话还是选择阿里云镜像服务吧,别人下载速度也快些,首先你要注册个阿里云账号,然后打开容器镜像服务,选择个人版(免费),点击镜像仓库——创建镜像仓库,新建个命名空间和仓库名称,仓库类型选择公开,摘要自己填写,提交即可。

容器打包为镜像

以管理员身份打开PowerShell,执行:

docker commit -m="eryuwow" -a="eryuwow" eryuwow eryuwow:1.0  #-m后面是描述信息,-a后面是创建者,eryuwow是容器名,eryuwow:1.0是镜像名:版本号

推送镜像

阿里云容器镜像服务/实例列表/镜像仓库/基本信息,里面有详细的操作指南,下面是我的示例:

docker login --username=**** registry.cn-hangzhou.aliyuncs.com  ##其中****换成你阿里云账号,回车输入密码
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/gswxy/gswxy:[镜像版本号]  ##给你本地镜像打上tag,[镜像版本号]自己定义,比如我写的是1.0;[ImageId]可以用docker images查看
docker push registry.cn-hangzhou.aliyuncs.com/gswxy/gswxy:[镜像版本号]  ##[镜像版本号]填你刚才写的版本号

别人怎么用

别人安装好docker后, 以管理员身份打开PowerShell:

docker pull registry.cn-hangzhou.aliyuncs.com/gswxy/gswxy:1.0

上述命令可以在你的阿里云容器镜像服务/实例列表/镜像仓库/基本信息:从Registry中拉取镜像中可以看到,

这个镜像是我的,跟着教程走下来的纯净的服务端,数据库用户名是root,密码是gswxy.com,你可以执行命令拉取下来。

拉取下来后,可以用docker images命令查看当前的镜像,如图所示:

然后输入以下命令运行容器:

docker run -itd --name gswxy -p 8085:8085 -p 3306:3306 -p 3724:3724 0fa8a792a779  #其中gswxy你可以自定义名字;0fa8a792a779是上面图例的IMAGE ID

然后输入以下命令进入容器和运行服务端:

docker exec -it gswxy /bin/bash  #进入容器
cd /azerothcore-wotlk && service mysql start && ./startup.sh 

最后,如果有帮助到你,打个赏吧,有什么问题QQ群(938973736)交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/737916.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读人工智能全传02图灵测试

读人工智能全传02图灵测试1. 图灵测试 1.1. 模仿游戏 1.2. 20世纪40年代末至50年代初,第一台计算机的出现引发了一场公开辩论,辩论主题就是这一现代科学奇迹的潜力如何 1.2.1. 这场辩论中最瞩目的贡献当归属于一本名叫《控制论》的书,由麻省理工学院数学教授诺伯特维纳(Norb…

ubuntu apt update 提示 The repository ‘http://xxx Release‘ does not have a Release file

sudo apt update && sudo apt upgrade -y提示 报错 E: The repository ‘http://xxx Release‘ does not have a Release file.编辑文件 /etc/apt/sources.list, 添加下面代码保存 deb http://nl3.archive.ubuntu.com/ubuntu jammy main restricted universe multivers…

处理器SDK Linux软件开发

处理器SDK Linux软件开发 https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-edgeai/TDA4VM/08_06_01/exports/docs/devices/TDA4VM/linux/index.html 1.概述 欢迎使用处理器SDK Linux版TDA4VM! SDK提供软件和工具,让用户在德州仪器的边缘人工智能应用处理器上有…

jira修改RoadMap里的时间格式,硬核日期格式化

jira修改roadMap里的时间格式 在插件目录找到portfolio-plugin-9.16.1.jar将他下载到本地 使用zip解压软件解压jar包 全局搜索 DD/MM/YY 将其替换YYYY/MM/DD修改后效果图全局搜索 return${l()(o.getUTCDate().toString(),2,"0")}/${t} 替换 return ${o.getUTCMonth()…

不同网站检测到的ip不同

背景 最近在使用某个接口时出现了问题,大致是根据ip查询地址。 于是使用查询ip的网站,发现ip各有不同。大致上是有三种ip。 探讨 经过查询,比较合理的解释是,运营商有多个网络出口,根据访问的网站不同,使用的网络出口也不同,因此不同的网站分别使用了不同的ip去访问,因…

全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器:把方法包装成属性

本文主要对@property 装饰器的基本定义、使用场景和使用方法进行了介绍,同时介绍了setter装饰器和deleter装饰器的应用场景和语法。全网最适合入门的面向对象编程教程:08 类和对象的 Python 实现-@property 装饰器:把方法包装成属性 摘要: 本文主要对@property 装饰器的基本…

Java 异常 随机数 包装类

异常,随机数,包装类,日期类正如 “人无完人”一样,程序也不是完美的,它总会存在这样那样的问题,而有些问题并不是能够通过程序员开发更好的代码来解决的,如果我们忽视它,可能就会造成程序的终止,甚至是系统的崩溃。因此,我们需要想办法来合理的解决它,这就是Java中异常…

DataWhale暑期夏令营第一期——大模型技术方向task2笔记

Task 2 笔记 数据分析 可以先通过对标签中各个项进行数据分析(使用values_count方法),可以得到主要任务的各个指标的值分布情况。 我认为这一步的作用:帮助理解数据。 大模型的本质还是概率生成,通过prompt提示词去进行生成Baseline优化思路 1.数据处理角色合并:将同一个…

基于Bootstrap Blazor开源的.NET通用后台权限管理系统

前言 今天大姚给大家分享一个基于Bootstrap Blazor开源的.NET通用后台权限管理系统,后台管理页面兼容所有主流浏览器,完全响应式布局(支持电脑、平板、手机等所有主流设备),可切换至 Blazor 多 Tabs 模式,权限控制细化到网页内任意元素(按钮、表格、文本框等等):Boots…

03-立即执行函数

JS中的立即执行函数01 立即执行函数的定义 立即执行函数有自己的作用域,因此可以防止全局变量之间的污染02 应用场景 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible…

初体验Sonar10.6 之 从部署到实战

Sonar介绍及下载 Sonar是一个代码质量管理的开源平台,用于管理源代码的质量。 SonarLint IDE插件安装 https://plugins.jetbrains.com/plugin/7973-sonarlint https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarlint-vscode sonar scanner下载地址 http…

charles使用

一,下载 去官网下载charles,如果有破解版的更好,不用花钱,但是一般也有30天试用期 二,安装 按照步骤安装即可 三,使用 1,首先,安装本地证书。按照指引一步一步安装。(注意:保存的时候最好放到受信任的证书目录中)2,安装移动端证书:它会告诉你ip和port。 首先你需要…

算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。

​大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」抱个拳,送个礼 读者参加面试,竟然在 LeNet 这个基础算法上被吊打~ LeNet 确实经典,值得好好说道说道 更多内容,见微*公号往期文章:有史以来最详细的卷积神经网络…

[大疆航线] 系列(3) 无人机多角度航线规划软件μMAPLE

关键词:无人机航线、航点动作,航线软件 作者:ludwig1860 日期:2024.7.3 1. 多角度航线规划软件μMAPLE的编写 我们研究团队编写了一个名为μMAPLE (uav-based Multi-Angular flight PLannEr)的多角度航线规划软件。当然,我们也很乐意协助研究人员们开发符合各自需求的航线…

Windows Terminal 中设置常用命令的别名

Windows Terminal 中设置常用命令的别名 ‍ E:\zhpj\Desktop>cmd /? 启动 Windows 命令解释器的一个新实例 . . . 如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找 以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或 两个都存在,这两个变量会先被执行。HKE…

ssrf结合python反序列化

存储session对象时 当然不能直接存储对象 需要转换成有规律的字符串 这一过程就涉及到了序列化 将对象转换成字符串这一过程称之为序列化 PYTHON反序列化漏洞 本文中就涉及到了pickle这一序列化模块导致的反序列化漏洞 在反序列化结束时 会触发__reduce__魔术方法 类似于php中的…

Web基础知识扫盲

1、中间件 定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。常见的中间件:IIS、Apache、Nginx、Tomcat 2、NAT网络地址转换 这里只介绍动态转换一种 动态转换…

MySQL-16.MVCC(多版本并发控制)

C-16.多版本并发控制 1.什么是MVCCMVCC(Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一事务更…

[JLU] 数据结构与算法上机题解思路分享-课程设计第一次与第二次上机

这是吉林等通知大学数据结构与算法上机题的题解思路,没有精妙的解法,只是一个记录罢前言 首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。 这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record 希望你能在这里找到你想要…

【Python】GUI开发笔记

一、环境搭建: 1、Pycharm开发工具pycharm历史版本 https://www.jetbrains.com/pycharm/download/other.html破解插件 https://blog.csdn.net/weixin_50737119/article/details/135628513 2、PYENV 版本管理 Python也有对应的版本管理工具,叫pyenv 这个东西挺奇怪的,直接发…