之前朋友一直提议搭建一个Minecraft服务器,觉得几个人打mod更有意思,于是乎我这个连主世界都玩不转的战五渣只能在搭服务器这件事帮上忙了,也就有了在windows server 2012R2和阿里云的centos上尝试搭建MC服务器的机会。

新的MC包下载后首先需要修改server.properties文件,笔记本打开就好,调整人数限制,修改motd,有需要的可以加入online-mode=false限制正版验证。

windows环境下并没有什么技巧可言,拷贝文件,直接运行bat就可以创建一个服务器。主要需要注意需要在win的防火墙中给java(tm) platform se binary开放网络权限,另外需要在路由器上设置端口转发,MC默认使用的是25565端口,这个端口号可以在server.properties中修改。

关于bat其实和linux里面的sh差不多,内容如下

@echo off
java -Xmx2g -jar “%cd%\cirnocraft\KCauldron.jar”
pause

其中-Xmx设定了最大内存使用限制,ps:小地图mod比较吃内存,特别是两个人在两个世界的时候。

在windows环境下开服对于一个日常windows下操作的人来说并没什么难点,而在CentOS下操作对我这个linux小白而言还是有些挑战的,首先java安装,从官网下载下来,设置ftp传入服务器就折腾了我一个晚上。

这一个晚上主要卡在了ftp目录设置以及对子文件的权限设置、以及Java环境变量的设置。由于安装的是lnmp一键安装包,其中提供了Pureftpd组件,并且添加了lnmp ftp {add|list|del}命令简化了ftp账号及目录设置,但由于之前对linux文件权限的不了解,导致ftp上传一直失败。

一开始我以为和windows一样,一般情况下文件建立之后就已经获得了对其操作的所有权限,但在后来经过询问和网络搜索才意识到linux对文件权限的管理比较严格,权限分为读、写、执行,对操作者身份分为档案拥有者、群组、其他。修改权限的操作命令是chmod,具体用法可以查阅其他网站,这里主要记录我所使用的例子:

chmod -R 777 file

这个命令可以说是最为彻底的,可以把ftp目录下的权限一次性的放开,-R代表对目录下所有子目录及文件进行相同的权限变更,777为linux下最高权限,即对所有人拥有所有权限。7的含义在于位运算,分别是读0b100,写0b010,执行0b001,加在一起即为0b111,便是十进制下的7。而连续的三位分别代表对User、Group、及Other的权限。

ftp账号建立及目录权限设置就这样磕磕绊绊的结束了,上传文件使用FileZilla即可。安装Java的过程非常顺利但是在测试java -version的时候却一直提示找不到java命令,按照windows的习惯我猜linux里面也应该有类似环境变量的东西,果然在搜索一番之后发现了这一篇博客:linux配置java环境变量(详细),地址如下:

http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html

这篇博文写的非常清楚具体,我是用的方案1完成的设置。这下java也安装完了,接下来就该实现脚本启动了。和bat脚本一样,linux下有sh文件实现相同的功能,我使用的sh文件内容如下

#!/bin/sh
java -Xmx800M -Xms512M -jar ./cirnocraft/KCauldron.jar nogui

其中-Xmx为最大内存限制,-Xms为初始最小内存。刚才提到在linux中对执行也是有权限设置的,所以新建的.sh文件并不能执行,需要进行设置:

chmod 777 ./start.sh

之后便可以使用./start.sh命令启动Minecraft服务器。

然而,这样的启动方式在终端连接关闭后程序会停止运行,所以需要使用screen命令来创建一个虚拟会话让Java程序一直运行。

在CentOS下screen没有默认安装,安装命令为:

yum install screen

常用的操作命令包括创建会话:screen -S mc,其中mc为会话名称;
列出当前会话:screen -ls;
进入一个会话:screen -r mc,其中mc为会话名称。
隐藏会话但继续执行:ctrl+A D
结束对话:ctrl+A K

最常用的screen命令应该就是这几个了,关于命令详细操作可以到其他的网站上查询。

到此为止终于可以在linux上启动Minecraft服务器。首先创建子会话,在里面执行./start.sh,看着加载完成,退回到主会话,关闭服务器终端,一个基于阿里云服务器的Minecraft服务端就算搭完了。关于阿里云服务器的局限和Java卡死的处理还是留在下篇博文里介绍。