docker下编译mangoszero WOW60级服务端(二)
开始搭建基于docker的mangoszero WOW服务端,我自己的操作系统是mac os,其他平台操作可以等价替换
1.准备工作
(1) 安装docker,参考docker官方文档,https://www.docker.com,有各种平台的安装教程,mac下可以直接 brew install caskroom/cask/docker
(2) 拉取docker官方centos镜像,可使用阿里云hub,https://dev.aliyun.com/detail.html?spm=5176.1972343.2.22.otKSdx&repoId=1198,版本推荐6.9或latest
- docker pull centos
- 或
- docker pull centos:6.9
(3) 建立一个文件夹专门用来保存此次搭建所用到的文件
- mkdir -p mangos/wow60
(4) 从github拉取mangoszero源码
- mkdir mangos/wow60/mangos-zero
- cd mangos/wow60/mangos-zero/
- git clone https://github.com/mangoszero/server.git server -b master --recursive
github现在国内被墙,只有搭梯子,这个源码比较大,可能会花费非常长的时间。
一个比较快捷的办法
1) 先下载mangoszero源码的压缩包,https://github.com/mangoszero/server/archive/master.zip,解压缩后文件夹更名为server
2) 再根据https://github.com/mangoszero/server/blob/master/.gitmodules里的子模块内容,一个一个的git clone
- cd mangos/wow60/mangos-zero/server
- git clone https://github.com/mangos/mangosDeps dep -b master --recursive
- git clone https://github.com/mangos/realmd src/realmd -b master --recursive
- git clone https://github.com/elunaluaengine/eluna src/modules/Eluna -b master --recursive
- git clone https://github.com/mangos/ScriptDev3.git src/modules/SD3 -b master --recursive
- git clone https://github.com/mangostools/DbDocsEditor.git contrib/dbdocs_editor -b master --recursive
- git clone https://github.com/mangos/Extractor_projects.git src/tools/Extractor_projects -b master --recursive
- win的子模块如果是Linux或MAC就不需要clone了
(5) 从github拉取database
- cd mangos/wow60
- git clone http://github.com/mangoszero/database.git database -b master --recursive
2.搭建之前的规划
(1) 首先基于centos构建一套通用的编译环境,这样以后不仅可方便编译mangos,也可用于编译其他软件,或者用作其他容器的母版
(2) 基于构建好的编译环境编译mangoszero的服务端
(3) 基于构建好的mangos服务端单独构建验证服务器
(4) 基于构建好的mangos服务端单独构建世界服务器
(5) 基于构建好的编译环境构建数据库服务器
这样的规划好处是分离验证服务器,世界服务器,数据库,这样某一个镜像需要变动,也不会影响其他的。
验证服务器与世界服务器分离的好处是可以一个验证服务支持多个世界服务
数据库服务器可以使用容器,也可以使用其他Mysql服务
3.开始搭建编译环境
(1) 创建一个文件夹用来保存dockerfile等
- cd mangos
- mkdir base_env
- cd base_env
(2) 编写Dockerfile
- #基于cenos的latest版本
- FROM centos:latest
- # 个人信息
- MAINTAINER oliverCJ <cgjp123@163.com>
- #设置容器环境变量
- ENV SRC_DIR /root/soft
- #创建文件夹保存需要用到的依赖文件
- RUN mkdir -p ${SRC_DIR}
- #更新服务器,安装wget,安装epel源
- RUN yum -y update \
- && yum -y install wget \
- && yum -y install epel-release \
- && yum makecache
- #安装依赖包
- RUN yum -y install \
- cmake \
- make \
- gcc \
- gcc-c++ \
- automake.noarch \
- autoconf.noarch \
- openssl \
- openssl-devel \
- bzip2-devel \
- readline-devel \
- ncurses-devel \
- boost-devel \
- libtool \
- perl-devel \
- perl-Net-Telnet.noarch
- #安装必要软件
- RUN yum -y install \
- #centos6.9版本安装mysql,mysql-devel,mysql-server
- mariadb-devel \
- mariadb-server \
- curl \
- git \
- vim \
- openssh-server \
- openssh \
- telnet \
- net-tools \
- yum clean all
- #ACE环境
- RUN cd ${SRC_DIR} \
- && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/devel:/libraries:/ACE:/micro/CentOS_7/x86_64/ace-6.3.3-55.1.x86_64.rpm \
- && rpm -ivh ace-6.3.3-55.1.x86_64.rpm \
- && rm -f ace-6.3.3-55.1.x86_64.rpm \
- && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/devel:/libraries:/ACE:/micro:/versioned/CentOS_7/x86_64/mpc-6.3.3-42.1.x86_64.rpm \
- && rpm -ivh mpc-6.3.3-42.1.x86_64.rpm \
- && rm -f mpc-6.3.3-42.1.x86_64.rpm \
- && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/devel:/libraries:/ACE:/micro/CentOS_7/x86_64/ace-devel-6.3.3-55.1.x86_64.rpm \
- && rpm -ivh ace-devel-6.3.3-55.1.x86_64.rpm \
- && rm -f ace-devel-6.3.3-55.1.x86_64.rpm
- #配置时区,登录信息等
- RUN ln -sf /usr/share/zoneinfo/Asia/Chongqing /etc/localtime \
- && sed -i \
- -e 's/^UsePAM yes/#UsePAM yes/g' \
- -e 's/^#UsePAM no/UsePAM no/g' \
- -e 's/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g' \
- -e 's/^#UseDNS yes/UseDNS no/g' \
- /etc/ssh/sshd_config \
- && echo "root" | passwd --stdin root \
- && ssh-keygen -q -b 1024 -N '' -t rsa -f /etc/ssh/ssh_host_rsa_key \
- && ssh-keygen -q -b 1024 -N '' -t dsa -f /etc/ssh/ssh_host_dsa_key \
- && echo "NETWORKING=yes" > /etc/sysconfig/network
- RUN rm -rf ${SRC_DIR}/*
- RUN rm -rf /tmp/*
(3) 编写build.yml
- version: '2'
- services:
- base:
- build: ./
- image: base-env:latest
(4) 执行构建命令
- docker-compose -f build.yml build
(5) 构建完成
构建完成后可使用 docker images 查看构建好的镜像,镜像名称为base-env,版本为latest
4.备注
镜像构建完成后,如果有需要的软件忘记装,可以依赖镜像启动容器
- docker run -it --rm --name base-env base-env:latest
启动后将直接登录进容器,然后安装所需软件,安装完毕后切勿exit退出,因为启动容器时使用了--rm参数,一旦退出,所有修改都会丢失
这时应当新开一个命令行窗口,执行保存修改命令
- docker commit base-env base-env:latest
这时就可以回到原来的命令行exit退出容器,所有修改也保存并更新到镜像中了
下次将开始编译mangoszero服务端代码
docker下编译mangoszero WOW60级服务端(二)的更多相关文章
- docker下编译mangoszero WOW60级服务端(一)
这几天看到暴雪准备开放怀旧服的新闻,突然想到几年前用大芒果window一键服务端自己搭建过服务,就想着在Linux环境下重新编译一套,毕竟Linux作为服务端,性能和稳定性都会高一些,于是在mac虚拟 ...
- docker下编译mangoszero WOW60级服务端(三)
开始构建WOW服务端通用镜像 第二篇文章中准备工作环节已经从github拉取了mangosd源代码,这里我们就可以直接开始编写dockerfile并进行编译 (1) 进入mangos/wow60/ma ...
- [UE4]如何编译部署独立专用服务端(Standalone Dedicated Server)
这是论坛上对UE服务端功能的回答,意思是UE4提供了网游服务端所具备的特性,包括位移修正.物理碰撞检测.这些特性不是UE4才加入,早期UE版本就有了. https://answers.unrealen ...
- Centos下使用gitosis配置管理git服务端(转载)
From:http://www.cnblogs.com/ahauzyy/archive/2013/04/08/3043384.html 说明:由于条件有限,我这里使用的是同一台centos的,但教程内 ...
- TCP下的套接字服务端实现并发 作业题
# 服务端 import socket from threading import Thread """ 服务端 1.要有固定的IP和PORT 2.24小时不间断提供服务 ...
- [Python 网络编程] TCP编程/群聊服务端 (二)
群聊服务端 需求分析: 1. 群聊服务端需支持启动和停止(清理资源); 2. 可以接收客户端的连接; 接收客户端发来的数据 3. 可以将每条信息分发到所有客户端 1) 先搭架子: #TCP Serve ...
- 网络编程、三要素、Socket通信、UDP传输、TCP协议、服务端(二十五)
1.网络编程概述 * A:计算机网络 * 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传 ...
- 【修改端口号】linux下修改apache,nginx服务端口号
一.linux下修改apache端口号 yum安装后,apache配置文件: /etc/httpd/conf/httpd.conf 找到apache目录下的 httpd.conf, 使用vi 打开,找 ...
- linux下修改apache,nginx服务端口号
一.linux下修改apache端口号 yum安装后,apache配置文件: /etc/httpd/conf/httpd.conf 找到apache目录下的 httpd.conf, 使用vi 打开,找 ...
随机推荐
- Java历程-初学篇 Day06 循环结构
前记:永远不要写死循环 一,while循环 先判断,再执行 while(条件){ //代码块; 迭代; } 示例: 二,do while语句 先执行一次,再判断 do{ //代码块; 迭代; }whi ...
- 项目发布Debug和Release版的区别
一.Debug和Release的区别 Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试 ...
- 聊聊Java中几种常用的设计模式
1.单例模式(有的书上说叫单态模式其实都一样) 该模式主要目的是使内存中保持1个对象.看下面的例子: package org.sp.singleton; //方法一 public class Sing ...
- Jquery几行代码解决跟随屏幕滚动DIV
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- asp.net mvc CodeFirst模式数据库迁移步骤
利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了. 但是,我有新的类要加入,有字段需要修改,那怎么办呢,删库,跑路 ? 哈哈 利用数据库迁 ...
- Golang:使用 httprouter 构建 API 服务器
https://medium.com/@gauravsingharoy/build-your-first-api-server-with-httprouter-in-golang-732b7b01f6 ...
- PHP中提问频率最高的11个面试题和答案
问题:请用最简单的语言告诉我PHP是什么? 回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言. 问题:什么是MVC? 回答:MVC由Model(模 ...
- 浅谈Django的生命周期和CBF和FBC
Django的生命周期和CBF和FBC 对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端,客户端和服务端通信,字符串(Http协议):请求头和请求体 响应头+响应体 ...
- 树莓派.使用Node.js来制作一个作业检查仪
先上图 前段时间, 花了点时间给女儿做了个数学习题的小程序 首页 做题界面(题目每次都随机生成, 加减乘除都有) 做题记录 现在问题来了, 怎么才能随时知道作业有没有完成呢? 每次打开做题记录页面刷新 ...
- Mybatis Mapper.xml 需要查询返回List<String>
当需要查询返回 List<String> <select id="getByIds" parameterType="java.lang.String&q ...