如何安装Minecraft服务器并免费托管到PaaS

本文已经过时, 请移步新的《OpenShift架设Minecraft服务器教程》.

本文翻译自Steven Citron-Pousty的How to Setup Free Minecraft Server Hosting on a PaaS.

“免费托管Minecraft服务器”,是的你没有看错.

今天的超棒文章将向你展示如何在你的OpenShift gear上运行你自己的Minecraft服务器.我假设大家都听说过Minecraft这款游戏,所以就不再介绍它了(如果你真没听说过,从化石里走出来吧,你被它卡住了).

注意事项

  1. 一个小小的gear只有512MB的内存,所以是不允许许多人连接的(注意在官网的下载页面上写着使用1024MB的内存).不过我们测试过只有两个人连接的话在服务器上完全没有出现延迟.
  2. 现在OpenShift主要是一个HTTP协议的服务器平台,我们代理HTTP的调用而不使用其他协议.此外,对于gear,我们只面向外网开放80(HTTP),443(HTTPS),22(SSH)端口.虽然我们可以在启动Minecraft服务器时设置任意我们想要的端口(并且通知玩家使用那个端口连接服务器),但服务器和客户端不能使用HTTP进行通信,所以我们就不能代理HTTP的调用.为了让这一切工作,我们不得不使用SSH端口转发,无论你是从服务器向你的笔记本通信还是你的笔记本向服务器通信(这两种结构在OpenShift上都可以用).
  3. 你需要安装OpenShift的命令行工具来做到这些.登录你的账户(接下来要在上面创建Minecraft服务器)并且在你的笔记本或者台式电脑上安装Minecraft的客户端.

都准备好了吗?好的,那让我们开始吧!

服务器设置

1) 在你的本地机器上cd到一个你想要创建本地git仓库的目录.

cd git_repos

2) 创建一个DIY应用.DIY应用是一个可以安装任何可运行在Fedora和RHEL上的二进制程序的空白gear.

rhc app create -a minecraft -t diy-0.1  

3) 复制rhc在命令行里输出的ssh命令.在末尾你将看到一个很长的url地址就像这样:

ssh://a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com/~/git/minecraft.git  

//后面到.com的这段内容是你将要用在ssh命令上的地址.所以在这个例子中,它应该是:

a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com  

4) 在终端或命令行窗口SSH连接到你的gear,然后cd到数据目录.在Windows上使用SSH需要安装PUTTY和Puttygen.

ssh a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com cd diy-0.1/data/  

5) 把Minecraft服务器下载到你的数据目录.

wget https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar  

6) 现在使用”+d”或者”exit”登出ssh会话.

7) 现在cd到已创建本地git仓库的目录.该目录的名称应该符合你的应用程序的名称.然后cd到.openshift/actionhooks(在Windows上是.openshift\actionhooks).

cd minecraft/.openshift/action_hooks/  

8) 现在我们要修改start和stop的hook.这是命名为start的文件:

cd $OPENSHIFT_DATA_DIR  

用你喜欢的编辑器打开名为start的文件将这段内容粘贴在后面.

nohup bash -c "exec 'java' '-jar' 'minecraft_server.jar' '-Xms256M' '-Xmx490M' '-nogui' &> ${OPENSHIFT_DIY_LOG_DIR}minecraft.log" &> /dev/null &  

现在编辑被命名为stop的文件,加入以下内容:

killall java exit 0  

这两个文件都保存在这个博客帖子的附件中.你可以下载并解压缩到上面给出的正确的位置.

9) 把我们的修改发送到gear.

git commit -am "adding action hooks"  
git push  

10) 检查并确认服务器启动失败了——这其实是个好现象.

ssh a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com  
cd diy-0.1/logs/  

然后查看minecraft.log文件的底部,你应该会看到

2012-11-01 19:52:58 [INFO] Done (42.296s)! For help, type "help" or "?"  
2012-11-01 19:53:06 [WARNING] Can't keep up! Did the system time change, or is the server overloaded?  
2012-11-01 19:53:23 [WARNING] Can't keep up! Did the system time change, or is the server overloaded?  

这是我们希望看到的.这意味着服务器启动了,在意料之中的是服务器无法绑定到默认的端口.如果你没有看到这几行,那么请返回到您的本地计算机上用命令行重做.

rhc app force-stop  
ssh a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com  

另一个效果是现在它在diy-0.1/data目录创建了一个server.properties文件.我们需要编辑它来让Minecraft服务器绑定到正确的端口上.

cd diy-0.1/data/  

我们将会需要这个DIY应用的IP和端口.它们可以从环境变量中得到.

env | grep INTERNAL  

这行命令输出了我们需要让Minecraft绑定的IP地址和端口.在我这里它是这样的

OPENSHIFT_INTERNAL_PORT=8080  
OPENSHIFT_INTERNAL_IP=127.8.231.129  

现在用你喜欢的编辑器编辑server.properties.vi现在很适合担任这项工作.

vi server.properties  

修改文件中的两行,Server-port需要改为上面给出的值(8080).

server-port=8080  

server-ip也要改为上面所给出的IP地址.

server-ip=127.8.231.129  

保存并退出该文件.现在回到本地计算机上的命令行中输入”-d”或”exit”退出并重新启动它.然后重新启动gear.

rhc app start -a minecraft  
Password: **********  
RESULT:  
Success  

现在SSH连接回服务器,再来看看日志文件.

ssh a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com  
cd diy-0.1/logs/  
less minecraft.log  

它应该是这个样子的

208 recipes  
27 achievements  
2012-11-01 21:06:07 [INFO] Starting minecraft server version 1.4.2  
2012-11-01 21:06:07 [INFO] Loading properties  
2012-11-01 21:06:07 [INFO] Default game type: SURVIVAL  
2012-11-01 21:06:07 [INFO] Generating keypair  
2012-11-01 21:06:10 [INFO] Starting Minecraft server on 127.8.231.129:8080  
2012-11-01 21:06:11 [INFO] Preparing level "world"  
2012-11-01 21:06:11 [INFO] Preparing start region for level 0  
2012-11-01 21:06:13 [INFO] Preparing spawn area: 3%  
2012-11-01 21:06:14 [INFO] Preparing spawn area: 11%  
2012-11-01 21:06:15 [INFO] Preparing spawn area: 24%  
2012-11-01 21:06:16 [INFO] Preparing spawn area: 45%  
2012-11-01 21:06:17 [INFO] Preparing spawn area: 81%  
2012-11-01 21:06:17 [INFO] Done (6.702s)! For help, type "help" or "?"  

忽略底下的那些警告——重要的是我们已经启动了Minecraft服务器.我们在匹配那些IP地址和端口上应该干得不错.

现在,我们运行了Minecraft服务器!让我们的客户端准备连接它吧.

让客户端连接到服务器就像我在文章最开始时说的那样——因为端口转发的问题,我们不能在本地连接到Minecraft服务器.不过别怕——我们可以从本地用SSH隧道连接到OpenShift gear里127.8.231.129上的8080端口.传输大量信息的SSH隧道也叫做SSH转发,我们将使用本地转发而不是远程转发.

如果你已经安装客户端工具,那么接下来的事情将变得很容易(如果你用Mac,还需要多做一点事情).我们外部的博客文章有关于如何使用SSH端口转发的命令行工具和文档.Mac用户(像我这样的)由于Mac OS是基于BSD的,你需要多做一些工作来完成这些.请务必去阅读文档,它很好的解释了怎么在Mac上设置.因为我在Mac上,所以我多写一些相关的命令.对其他系统而言,只需要运行rhc命令就可以了.

1) 仅针对Mac 首先你需要我们安装的服务器上的IP地址,然后在你的本地终端上用ifconfig命令把它设置好.

sudo ifconfig lo0 alias 127.8.231.129  
(hint - the password here is the password for the account on your Mac)

2) 现在运行rhc命令(我用的是比较新的语法).注意,这将占用终端来进行端口转发.

rhc port-forward -a minecraft  
Password: **********

Checking available ports...  
Binding java -> 127.8.231.129:8080...  
Forwarding ports, use ctl + c to stop  

请注意它是如何利用我们正在使用的Minecraft服务器的8080端口的.

普通SSH端口转发

可以直接用普通的SSH端口转发功能而不使用rch命令行,这将会复杂一点,你想这么做的话也没问题.你应该去看看关于SSH的文档(Linux,Mac)或者PUTTY(Windows)的文档.

Minecraft客户端上的连接

3) 现在启动你的Minecraft客户端并做这些事:

a) 单击”多人游戏”(为了避免你们说这是作者犯错了,我在这里说明一下,这个选项只有你的帐户已经支付后才会显示).(译者注:我们普遍玩的是盗版,所以肯定有啦.)

b) 点击”添加服务器”(你也可以点直接连接).

c) 在”服务器地址”上填上rhc的端口转发命令上的IP地址.服务器名称可以随便填——它只是帮助你记忆这个服务器而已.

现在你可以开始玩了!不过一个人玩起来是很没意思的,和朋友一起玩会更有趣.让朋友一起玩很简单,只要让它们也设置端口转发就行了.

你得这么做

1) 把他们的SSH密钥添加到你的OpenShift上.你可以用”rhc sshkey”命令或者直接在Web控制台的”我的帐户”标签里添加.请记住,你要添加的是你的朋友的公钥(后缀名为.pub).

你的朋友得这么做

2) 最好能让他们用同样的用户名和IP地址连接SSH,如果他们的设置是正确的话,他们应该能够通过SSH连上你的Minecraft服务器.

3) 现在你的朋友的机器设置了SSH隧道.我们要转发的是8080端口.所以朋友们用Minecraft服务器的SSH命令是:

ssh -L 8080:127.8.231.129:8080 a133b23e3f2644b8a2121eaf6801xxxx@minecraft-spminecraft.rhcloud.com  

4) 然后在上面的步骤C中客户端使用127.0.0.1:8080去连接.这是在两台Mac间进行测试的,所以请让我们知道它是否是在Windows的PUTTY上也能有效.

到了这里,你已经有一个Minecraft服务器和可连接的客户端——它们都是免费的.有很多的方法可以用来定制你的服务器,请记住你要使用SCP完成这些修改或者使用wget命令去下载新的文件.你也可以更改你gear上的SSH连接和在server.properties上做设置.

因为我这样运行Minecraft服务器还是件很新的事情(就是我帖子里写的这些),我很乐意看到你们反馈的建议和提醒,祝你和朋友们玩得开心!