美文网首页
基于docker实现源码编译魔兽世界

基于docker实现源码编译魔兽世界

作者: 有时右逝 | 来源:发表于2019-04-21 17:55 被阅读0次

    前言

    作为魔兽世界的大龄玩家,我的骨子里忘记不了它。艾泽拉斯,深入我的灵魂。
    成为一名程序员后,尝试着从技术上继续魔兽世界的热情。

    目标

    实现对魔兽世界从源码编译成实际可用的docker镜像,并成功局域网部署、运行。

    这里源码主要是1.12.1版本的魔兽,最高等级 60级。

    源码地址: https://github.com/cmangos/mangos-classic

    名词介绍

    mangos

    开源的游戏服务端框架,魔兽世界是其具体的应用。

    cmangos

    基于mangos进行了开发,整合了其他一些框架的特性。

    由于 mangos尝试编译时,遇到很多问题,因此我选择了cmangos进行编译。

    过程

    • 创建文件夹
    mkdir cmangos
    
    • 拉取源码。

    由于墙的原因,直接拉取代码非常缓慢。因此这里选择国内站点拉取代码。
    国内地址: https://gitee.com/hi_php/mangos-classic

    git clone https://gitee.com/hi_php/mangos-classic
    
    

    拉取数据库
    国内地址: https://gitee.com/hi_php/classic-db

    git clone https://gitee.com/hi_php/classic-db
    

    感谢开源中国,解决了速度问题。之前因为速度问题,多次泪崩。

    • 魔兽世界docker镜像的dockerfile文件

    构建镜像依赖的2个文件:
    debian国内源配置 :sources.list
    编译魔兽需要资源包:data-map.tar.gz

    下载地址:
    链接:https://pan.baidu.com/s/14mH3rNs_A4TyTOMhIlv6nQ 密码:nugo

    dockerfile文件内容如下

    FROM debian:9
    # 个人信息
    MAINTAINER hijava <hi_php@163.com>
    #使用网易源
    ADD sources.list /etc/apt/sources.list
    #安装依赖的文件
    RUN apt-get update && apt-get -y install grep build-essential gcc g++ automake git-core autoconf make patch cmake libmysql++-dev \
                mysql-server libtool libssl-dev binutils zlibc libc6 libbz2-dev subversion libboost-all-dev vim
    
    #增加mangos用户
    RUN useradd -m -d /home/mangos -c "MaNGOS" -U mangos
    
    WORKDIR /home/mangos
    #拉取源码
    RUN git clone https://gitee.com/hi_php/mangos-classic 
    RUN mv /home/mangos/mangos-classic /home/mangos/mangos
    
    #创建编译目录和运行目录
    RUN mkdir -p  /home/mangos/mangos/build
    RUN mkdir -p  /home/mangos/mangos/run
    
    
    
    #切换工作目录
    WORKDIR /home/mangos/mangos/build 
    
    # Want compile CMaNGOS & the map extraction tools & playerbots
    RUN cmake /home/mangos/mangos -DCMAKE_INSTALL_PREFIX=/home/mangos/mangos/run -DBUILD_EXTRACTORS=ON -DPCH=1 -DDEBUG=0 -DBUILD_PLAYERBOT=ON 
    
    RUN make && make install
    
    #修改配置文件
    
    RUN cp /home/mangos/mangos/run/etc/mangosd.conf.dist /home/mangos/mangos/run/etc/mangosd.conf \
        && cp /home/mangos/mangos/run/etc/playerbot.conf.dist /home/mangos/mangos/run/etc/playerbot.conf \
        && cp /home/mangos/mangos/run/etc/realmd.conf.dist /home/mangos/mangos/run/etc/realmd.conf
    
    #替换数据库参数
    RUN sed -i "s/127.0.0.1;3306;mangos;mangos;/wow60-database;3306;root;123456;/g" /home/mangos/mangos/run/etc/*.conf
    
    #关闭高清地图
    RUN sed -i "s/mmap.enabled = 1/mmap.enabled = 0/g" /home/mangos/mangos/run/etc/mangosd.conf
    
    #拷贝客户端资源包
    ADD  data-map.tar.gz  /home/mangos/mangos/run/
    RUN mv /home/mangos/mangos/run/data-map/*  /home/mangos/mangos/run/bin/
    
    
    #修改进入容器的工作空间。
    WORKDIR /home/mangos/mangos/run/bin
    
    #运行指令,避免容器退出
    CMD ["/bin/bash","-c", "while true; do echo hello world; sleep 1; done"]
    
    

    将三个文件放同一个目录下, 运行构建命令

    docker build --tag=cmangos .
    

    构建完成后,即可使用该镜像了。

    魔兽世界数据库

    需要3个数据库
    classicrealmd
    classicmangos
    classiccharacters

    源码的sql目录下 是 基本数据。
    下载的classic-db是填充的数据,填充 classicmangos 例如大量的物品、角色、任务等。
    此时的数据库还是英文的,这里提供一份我汉化后的数据库。

    链接:https://pan.baidu.com/s/14mH3rNs_A4TyTOMhIlv6nQ 密码:nugo

    构建魔兽世界应用

    需要创建4个容器,分别是
    Mysql容器
    phpmyadmin容器
    账号认证容器
    魔兽世界容器

    注意: 下面使用的镜像是我上传阿里云后的镜像。你可以直接使用。如果需要使用刚刚编译的镜像,请执行修改image参数

    version: "2"
    services:
      wow60-database:
        image: mysql:5.7
        volumes:
        - ./db_data:/var/lib/mysql
        ports:
        - 3306:3306/tcp
        environment:
          #mysql的root密码
           MYSQL_ROOT_PASSWORD: 123456
      wow60-realmd:
        image: registry.cn-hangzhou.aliyuncs.com/hijava/centos7-mangos:latest
        command: bash -c "/home/mangos/mangos/run/bin/realmd -c /home/mangos/mangos/run/etc/realmd.conf"
        ports:
        - 3724:3724/tcp
        depends_on:
        - wow60-database
      wow60-world:
        image: registry.cn-hangzhou.aliyuncs.com/hijava/centos7-mangos:latest  
        ports:
        - 8085:8085/tcp
        depends_on:
        - wow60-realmd
      phpmyadmin:
          image: phpmyadmin/phpmyadmin
          environment:
          - PMA_ARBITRARY=1
          restart: always
          depends_on:
          - wow60-database
          ports:
          - "3999:80"
    

    构建应用

    docker-compose -f docker-compose.yml up -d
    

    访问 127.0.0.1:3999 即可打开phpmyadmin进行数据库管理。
    phpmyadmin登录填写的内容依次是
    地址 wow60-database
    账号root
    密码 123456

    127.0.0.1是你本地电脑,如果是服务器,则使用服务器ip地址。

    依次创建3个数据库,然后导入数据

    image.png

    设置服务端ip地址

    image.png

    这里的ip地址决定你的魔兽世界谁可以玩。
    127.0.0.1 表示是本机玩魔兽
    如果需要局域网一起玩,需要设置局域网的ip。例如 192.168.1.2
    如果需要远方的朋友,则需要使用具有公网ip的电脑。

    启动服务端

    容器启动时,世界服务器无法自动启动,需要手动启动。

    进入魔兽世界的容器

    docker exec -it   容器id或者容器名    /bin/bash
    

    启动服务

    nohup /home/mangos/mangos/run/bin/mangosd  > /home/mangos/mangos/run/bin/mangod.log 2>&1 &
    

    退出容器

    exit
    

    设置客户端

    realmlist.wtf 文件修改。


    image.png

    用记事本打开,设置内容如下

    set realmlist 电脑ip地址
    

    这里的ip和服务器要保持一致。

    创建账号

    默认提供的账号有4个。

    最高权限账号 ADMINISTRATOR
    较低权限账号 GAMEMASTER
    较低权限账号 MODERATOR
    普通玩家账号 PLAYER

    上面账号的 密码就是 账号本身。

    如果需要注册新账号,可以直接执行下面的sql语句。

    INSERT INTO account
    (username, sha_pass_hash, email)
    VALUES
    ('wwf',SHA1(CONCAT(UPPER('123456'),':',UPPER('123456'))), 'wwf@163.com')
    

    以上就表示创建账号wwf 密码123456

    gm命令

    非普通玩家,拥有一些gm命令。这里可以使用最高权限账号进行测试。

    直接百度:mangos gm命令

    使用方法:复制命令到魔兽世界的聊天框,回车即可。

    例如:送到暴风城

    .go -9065 434 94 0 
    

    最后

    致敬我的魔兽岁月

    image.png

    群名称:
    魔兽世界基佬群

    群 号:227827768

    相关文章

      网友评论

          本文标题:基于docker实现源码编译魔兽世界

          本文链接:https://www.haomeiwen.com/subject/dozuwqtx.html