《目录》
基于自己这两天搭建服务器时所遇到大量的坑,本博文仅作为这次搭建过程的记录,方便自己之后回头再看,不还原所遇到的问题,仅给出可行的解决方案(能运行就行);
希望对于第一次在云上搭建自己的游戏服务器的同学能有所帮助,避免在众坑上花太多的时间,能够一次性搞定;如有更好的建议,欢迎交流;
系统:CentOS6.9 (64位)
cpu:1GHz
ram:1GB
rom:40GB
带宽:1Mbps
KBEngine版本:1.1.0
MySQL版本:5.7
《windows》
Putty(远程连接服务器)、WinSCP(图形化SFTP客户端)
《Linux》
nano(用于文件编辑,类似于vim)、wget/axel/axel2(用于下载)、screen(用于把进程放到后台运行)、zip/unzip(压缩用具和解压工具)、sudo(让普通用户可以执行系统级命令)、Git(用于将clone GitHub上的代码)
上阿里云(华为/腾讯)购买云服务器ECS,低配如下:
【远程终端】:账户名 root ,然后输入密码,密码是看不见的;
// 更新源
yum update
// 安装ssh server(有可能已经安装了)
yum install openssh-server
// 开机启动ssh server(否则把on改为off)
chkconfig sshd on
//rpm -qa | grep ssh 可以查询是否安装了
//netstat -antp | grep ssh 查询是否开启了22端口
遇到这个直接输入y,回车;
// 编辑sshd_config文件
vim /etc/ssh/sshd_config
按下键,拉到最低端,然后按字母键"i",进入insert状态,在PasswordAuthentication no前面加上#号,如下图所示;
然后按ESC键退出编辑模式,然后按Shift+“:”号键,进入指令模式,输入wq,回车;
// 配置完后,一定要重启sshd
service sshd restart
返回【实例详情】:点击“本实例安全组”,进入【本实例安全组】然后点击“配置规则”,进入“安全组规则”,点击“添加安全组规则”,如下图设置;
【Windows端】本系统是win10,可用;
下载PuTTY:https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe
启动Putty,并输入相关参数,这里的ip就是公网ip了(上文有说)
之后就可以使用这个来替代阿里云的远程连接了;
下载WinSCP:https://winscp.net/download/WinSCP-5.11.3-Setup.exe
启动WinSCP,输入参数,如下图:
之后从本地windows端传输到服务器的文件,就可以通过这个来完成了。也可以对服务器的文件进行很方便的管理;
按顺序输入:
// 安装一些工具
yum install nano wget axel screen zip unzip sudo git
// 更改系统语言
// (将LANG=en_US.UTF-8改成LANG=zh_CN.UTF-8)
// (按ctrl+x退出,按y确定保存,按回车;)
nano /etc/sysconfig/i18n
// 重启系统
// (重启会断开putty,需要重新连接)
shutdown -r now
// 安装开发环境
// (gcc 和 perl 可能已安装,不影响)
yum install gcc glib gcc-c++ esound-devel ncurses-devel perl zlib-devel openssl-devel mysql-server mysql-devel
输入如下:
// 通过 git clone https:/XXXX
//(不要直接通过Windows把代码传给Linux,编译有可能会出错)
git clone https://github.com/kbengine/kbengine
找到目标代码,获取该网址即可;
// 重启系统
shutdown -r -now
// 进入kbengine源码文件
cd kbengine/kbe/src
// 改变文件的权限
chmod -R 755 .
// 使用make编译
make
// 进入python源码文件
cd kbengine/kbe/src/lib/python
./configure
make
make install
重新下载源码包,地址为:https://github.com/kbengine/kbengine/releases/latest,
可以下载zip或tar.gz任意一个压缩包,并删除从github上clone下来的包,使用刚刚下载的源码进行编译;
// 这里下载的是tar.gz这个包
// (必须要安装了wget这个工具,上文有)
wget https://github.com/kbengine/kbengine/archive/v1.1.0.tar.gz
// 进入root文件夹
cd ~
// 删除之前从GitHub上clone下来的源码
rm -rf kbengine
// 解压刚刚下载好的压缩包
tar -zxvf v1.1.0.tar.gz
// 将解压出来的包重命名为kbengine
// 解压出来的包名为kbengine-1.1.0
mv kbengine-1.1.0 kbengine
// 重启系统
shutdown -r now
// 调到源代码文件处,并编译
cd kbengine/kbe/src
chmod -R 755 .
make
如果还是失败,则重装系统,CentOS 6.9,然后下载新的源码压缩包,进行编译;如下操作:
// 重装系统后
// (重装系统的方法上文已提及)
// 安装开发环境 与 工具
yum update
yum install wget
yum install openssl-devel
yum install mysql-server
yum install mysql-devel
yum install gcc
yum install gcc-c++
yum install glib
// 下载源码压缩包
wget https://github.com/kbengine/kbengine/archive/v1.1.0.tar.gz
// 重启系统
shutdown -r -now
// 解压刚刚下载好的压缩包
tar -zxvf v1.1.0.tar.gz
// 将解压出来的包重命名为kbengine
// 解压出来的包名应该为kbengine-1.1.0
mv kbengine-1.1.0 kbengine
// 跳到源代码文件处,并编译
cd kbengine/kbe/src
chmod -R 755 .
make
// 编译完成后,之后的操作,如上文的操作补充上即可
// 打开.bashrc文件
nano ~/.bashrc
// 在文后添加如下代码
ulimit -c unlimited
export KBE_ROOT=~/kbengine/
export KBE_RES_PATH=$KBE_ROOT/kbe/res/:$KBE_ROOT/assets/:$KBE_ROOT/assets/scripts/:$KBE_ROOT/assets/res/
export KBE_BIN_PATH=$KBE_ROOT/kbe/bin/server/
// 按ctrl + x保存, 然后输入Y确认,按回车键退出;
// 使环境变量生效
source ~/.bashrc
// 设定为开机自动启动
chkconfig mysqld on
// 启动mysql服务
/etc/init.d/mysqld start
// 检查是否启动成功
/etc/init.d/mysqld status
// mysqld (pid 9234) is running... 表示已经运行
// 进入mysql
mysql -uroot -p
// 会请求输入密码,root用户密码默认为空,直接回车即可;
// **以上的所有指令输入都是 [root@username ~]# 的形式,
// 而接下来进入mysql后,则是 mysql> 的形式输入;
// 创建数据库,假设是数据库名为”kbe”
create database kbe;
// 删除匿名用户
// (一些系统中不删除匿名用户会出现使用kbe账号用本地IP登录mysql被拒绝访问)
mysql> use mysql
mysql> delete from user where user='';
mysql> FLUSH PRIVILEGES;
// 创建数据库用户,用户名是”kbe”,密码假设是”pwd123456”
mysql> grant all privileges on *.* to kbe@'%' identified by 'pwd123456';
mysql> grant select,insert,update,delete,create,drop on *.* to kbe@'%' identified by 'pwd123456';
mysql> FLUSH PRIVILEGES;
// 然后退出mysql
quit
// 再以kbe账户登录试试,看是否能够登陆
mysql -ukbe -ppwd123456 -hlocalhost -P3306
windows端创建文件kbengine.xml,然后打开,复制如下内容:
<root>
<gameUpdateHertz> 10 gameUpdateHertz>
<bitsPerSecondToClient> 20000 bitsPerSecondToClient>
<packetAlwaysContainLength> 0 packetAlwaysContainLength>
<debugEntity> 0 debugEntity>
<publish>
<state> 0 state>
<script_version> 0.1.0 script_version>
publish>
<channelCommon>
<timeout>
<internal> 60.0 internal>
<external> 60.0 external>
timeout>
<readBufferSize>
<internal> 16777216 internal>
<external> 0 external>
readBufferSize>
<writeBufferSize>
<internal> 16777216 internal>
<external> 0 external>
writeBufferSize>
<encrypt_type> 1 encrypt_type>
channelCommon>
<shutdown_time> 30.0 shutdown_time>
<shutdown_waittick> 1.0 shutdown_waittick>
<callback_timeout> 300.0 callback_timeout>
<email_service_config>server/email_service.xmlemail_service_config>
<interfaces>
<entryScriptFile> kbemain entryScriptFile>
<host> localhost host>
<port> 30099 port>
<orders_timeout> 3600 orders_timeout>
<SOMAXCONN> 128 SOMAXCONN>
interfaces>
<dbmgr>
<entryScriptFile> kbemain entryScriptFile>
<debug> false debug>
<allowEmptyDigest> false allowEmptyDigest>
<internalInterface> internalInterface>
<InterfacesServiceAddr>
<enable> true enable>
<host> localhost host>
<port> 30099 port>
InterfacesServiceAddr>
<databaseInterfaces>
<default>
<pure> false pure>
<type> mysql type>
<host> localhost host>
<port> 3306 port>
<auth>
<username> kbe username>
<password> pwd123456 password>
<encrypt> true encrypt>
auth>
<databaseName> kbe databaseName>
<numConnections> 5 numConnections>
<unicodeString>
<characterSet> utf8 characterSet>
<collation> utf8_bin collation>
unicodeString>
default>
databaseInterfaces>
<account_system>
<accountEntityScriptType> Account accountEntityScriptType>
<accountDefaultFlags> 0 accountDefaultFlags>
<accountDefaultDeadline> 0 accountDefaultDeadline>
<account_resetPassword>
<enable> false enable>
account_resetPassword>
<account_registration>
<enable> true enable>
<loginAutoCreate> true loginAutoCreate>
account_registration>
account_system>
<ids>
<increasing_range> 2000 increasing_range>
ids>
dbmgr>
<cellapp>
<entryScriptFile> kbemain entryScriptFile>
<defaultAoIRadius>
<radius> 80.0 radius>
<hysteresisArea> 5.0 hysteresisArea>
defaultAoIRadius>
<aliasEntityID> true aliasEntityID>
<entitydefAliasID>trueentitydefAliasID>
<internalInterface> internalInterface>
<profiles>
<cprofile> false cprofile>
<pyprofile> false pyprofile>
<eventprofile> false eventprofile>
<networkprofile> false networkprofile>
profiles>
<loadSmoothingBias> 0.01 loadSmoothingBias>
<ghostDistance> 500.0 ghostDistance>
<ghostingMaxPerCheck> 64 ghostingMaxPerCheck>
<ghostUpdateHertz> 30 ghostUpdateHertz>
<coordinate_system>
<enable> true enable>
<rangemgr_y> false rangemgr_y>
<entity_posdir_additional_updates> 2 entity_posdir_additional_updates>
coordinate_system>
<shutdown>
<perSecsDestroyEntitySize> 100 perSecsDestroyEntitySize>
shutdown>
<witness>
<timeout> 15 timeout>
witness>
cellapp>
<baseapp>
<entryScriptFile> kbemain entryScriptFile>
<internalInterface> internalInterface>
<externalInterface> externalInterface>
<externalAddress> 120.78.128.135 externalAddress>
<externalPorts_min> 20015 externalPorts_min>
<externalPorts_max> 20019 externalPorts_max>
<archivePeriod> 300 archivePeriod>
<backupPeriod> 300 backupPeriod>
<backUpUndefinedProperties> 0 backUpUndefinedProperties>
<loadSmoothingBias> 0.01 loadSmoothingBias>
<downloadStreaming>
<bitsPerSecondTotal> 1000000 bitsPerSecondTotal>
<bitsPerSecondPerClient> 100000 bitsPerSecondPerClient>
downloadStreaming>
<ids>
<criticallyLowSize> 1000 criticallyLowSize>
ids>
<entityRestoreSize> 32 entityRestoreSize>
<profiles>
<cprofile> false cprofile>
<pyprofile> false pyprofile>
<eventprofile> false eventprofile>
<networkprofile> false networkprofile>
profiles>
<SOMAXCONN> 128 SOMAXCONN>
<shutdown>
<perSecsDestroyEntitySize> 100 perSecsDestroyEntitySize>
shutdown>
baseapp>
<loginapp>
<entryScriptFile> kbemain entryScriptFile>
<internalInterface> internalInterface>
<externalInterface> externalInterface>
<externalAddress> 120.78.128.135 externalAddress>
<externalPorts_min> 20013 externalPorts_min>
<externalPorts_max> 0 externalPorts_max>
<encrypt_login> 2 encrypt_login>
<SOMAXCONN> 128 SOMAXCONN>
<account_type> 3 account_type>
<http_cbhost> localhost http_cbhost>
<http_cbport> 21103 http_cbport>
loginapp>
<machine>
<externalPorts_min> 20099 externalPorts_min>
<externalPorts_max> 0 externalPorts_max>
<addresses>
addresses>
machine>
root>
注意:
baseappp->externalAddress 的ip地址为服务器的公网地址;
loginapp->externalAddress 的ip地址为服务器的公网地址;
将kbengine.xml拉入服务器的$KBE_ROOT/assets/res/server文件夹中,当启动kbe服务器时,会自动加载该配置文件;可以使用WinSCP将其拉入指定目录中;
如下图: (上文有说明)
// 进入assets目录
cd $KBE_ROOT
cd assets
// sh 启动服务器(关闭服务器,则sh kill_server.sh)
sh start_server.sh
// 一般来说,不报错即成功
// 查看是否有9个kbengine进程
ps -aux | grep $KBE_ROOT
服务器的连接ip是服务器的公网ip
刚刚在客户端中登陆且自动注册了账号,可以在数据库中查到该账号信息;