Linux搭建 Minecraft 服务器

1、Minecraft简介

Minecraft《我的世界》是由 Mojang Studios 公司开发的一款生存沙盒游戏。

Linux搭建 Minecraft 服务器

Minecraft 由瑞典视频游戏程序员和设计师 Markus Alexej Persson 使用Java编程语言创建。

Minecraft 于 2009 年 5 月首次公开,然后在 2011 年 11 月完全发布,Minecraft 此后已被移植到其他多个平台,并且成为有史以来最畅销的视频游戏。2014 年,Mojang 和 Minecraft 的知识产权被微软以25 亿美元的价格收购。

在《我的世界》中,玩家探索一个程序生成的块状 3D 世界,几乎无限的地形,并能够发现和开采原材料、制作工具和物品,并建造结构、土方工程和简单的机器。根据游戏模式,玩家可以与电脑控制的小怪战斗,以及与同一世界的其他玩家合作或竞争。

游戏模式包括玩家必须获取资源来建造世界并能够生存下去的生存模式,以及玩家拥有无限资源和飞行的创造模式。玩家可以修改游戏,以创造新的游戏机制、物品和资产。

游戏分为国际pe基岩版,以及官方正版pc版,常称java版,游戏的Java版以其强大的第三方拓展模组(Forge / Fabric / Liteloader mod)而知名,它们可以为游戏添加各种新的对象、角色和功能。

官方网站:https://minecraft.net

2、搭建环境选择

Minecraft 服务器端可以是 Windows 或 Linux,Windows 更适用于不熟悉Linux命令的服主,但自带图形窗口的windows对服务器cpu内存资源有一定消耗,因此对于资深的 linux 服务器玩家linux才是更好的选择。

下面准备一台linux服务器,配置2核CPU、8G内存,发行版本选择Ubuntu、Debain、CentOS等,推荐使用Ubuntu Server,如果需要通过互联网访问还需要购买1个公网IP地址,推荐按量付费宽带,可根据需要购买一个域名,绑定到公网IP。

关于云服务器,可选国内三大云厂商阿里云轻量云服务器或ECS、腾讯云、华为云,不过价格过于昂贵,性能要求不高可以购买他们的轻量应用服务器类型,其他VPS云厂商也数不胜数,比如淘宝搜索Minecraft服务器,购买面板服,如果只是本地测试则更简单,可以使用 VMware Workstation 或 Virtualbox 创建虚拟机。

本篇文章介绍在Linux系统上搭建Minecraft服务端,以及如何使用bungeecord配置为群组模式,本文采用传统的应用部署方式,方便熟悉minecraft服务器端的部署原理和流程,但当前 docker 容器技术大行其道,更推荐使用 docker,能够仅用一条命令几分钟搭建起一个服务端。

docker容器方式搭建请移步:https://blog.csdn.net/networken/article/details/84945172

3、服务器基本配置

服务器准备就绪后,执行以下操作,做一些初始化配置,操作系统版本:Ubuntu Server 22.04 LTS。

1、首先需要使用SSH工具连接到服务器,下载ssh连接工具 tabby 或 xshell ,以xshell为例,勾选两者,下载安装Xshell和Xftp。

新建ssh连接,输入服务器IP地址,点击连接输入用户名及密码,登录到命令行界面:

2、修改服务器主机名,执行exit命令退出重新连接使配置生效

root@ubuntu:~hostnamectl set-hostname mcserver


3、minecraft服务端依赖java环境,安装java环境,以openjdk为例:

sudo apt update -y
sudo apt install -y openjdk-17-jdk

确认安装成功

mc@mcserver:~$ java --version
openjdk 17.0.3 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)

4、搭建单个服务端

1、创建服务端安装目录

root@mcserver:~mkdir -p /opt/minecraft/{jars,instances}

2、下载服务端jar包,下载地址:https://mcversions.net/,选择STABLE RELEASE稳定正式版本,以1.19为例:

下载后使用 xftp 或 winscp 工具上传到服务器/opt/minecraft/jars目录下。

root@mcserver:~ls /opt/minecraft/jars/
server.jar

3、创建minecraft服务启动文件,复制粘贴以下内容到命令行

mkdir -p /opt/minecraft/instances/survival

cat >/lib/systemd/system/minecraft-survival.service<<'EOF'
[Unit]
Description=Minecraft Server
Wants=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/minecraft/instances/survival
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui
RestartSec=30
Restart=on-failure
KillMode=process
KillSignal=SIGINT
SuccessExitStatus=130
StandardInput=null

[Install]
WantedBy=default.target
EOF

4、执行以下命令启动minecraft服务端

echo "eula=true" > /opt/minecraft/instances/survival/eula.txt

systemctl enable minecraft-survival.service

systemctl start minecraft-survival.service

查看服务运行状态,等待服务端完全启动

root@mcserver:~systemctl status minecraft-survival.service 
● minecraft-survival.service - Minecraft Server
     Loaded: loaded (/lib/systemd/system/minecraft-survival.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-08-04 23:07:02 CST; 1min 33s ago
   Main PID: 4521 (java)
      Tasks: 31 (limit: 4538)
     Memory: 2.8G
        CPU: 2min 12.737s
     CGroup: /system.slice/minecraft-survival.service
             └─4521 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui

Aug 04 23:08:28 mcserver java[4521]: [23:08:28] [Worker-Main-1/INFO]: Preparing spawn area: 42%
Aug 04 23:08:29 mcserver java[4521]: [23:08:29] [Worker-Main-1/INFO]: Preparing spawn area: 54%
Aug 04 23:08:29 mcserver java[4521]: [23:08:29] [Worker-Main-1/INFO]: Preparing spawn area: 54%
Aug 04 23:08:29 mcserver java[4521]: [23:08:29] [Worker-Main-1/INFO]: Preparing spawn area: 54%
Aug 04 23:08:30 mcserver java[4521]: [23:08:30] [Worker-Main-1/INFO]: Preparing spawn area: 68%
Aug 04 23:08:31 mcserver java[4521]: [23:08:31] [Worker-Main-1/INFO]: Preparing spawn area: 78%
Aug 04 23:08:31 mcserver java[4521]: [23:08:31] [Worker-Main-1/INFO]: Preparing spawn area: 78%
Aug 04 23:08:31 mcserver java[4521]: [23:08:31] [Worker-Main-1/INFO]: Preparing spawn area: 78%
Aug 04 23:08:34 mcserver java[4521]: [23:08:34] [Server thread/INFO]: Time elapsed: 61824 ms
Aug 04 23:08:34 mcserver java[4521]: [23:08:34] [Server thread/INFO]: Done (80.392s)! For help, type "help"

5、管理服务启停命令

启动服务端
systemctl start minecraft-survival

停止服务端
systemctl stop minecraft-survival

重启服务端
systemctl restart minecraft-survival

查看服务运行状态
systemctl status minecraft-survival

查看服务启动日志
journalctl -xe

5、客户端登录server端

官方客户端下载地址:https://minecraft.net/zh-hans/download/

这里选择使用第三方客户端HMCL,下载地址:https://hmcl.huangyuhui.net/

本地选择一个目录解压安装即可,安装完成以后需要执行两个操作:添加游戏账户、下载游戏版本。

1、点击添加账户,如果已购买游戏选择微软账户或Mojang账户,否则选择离线模式


这里采用离线模式,添加一个本地用户,用户名自定义,在高级设置中可以查看到默认生成的UUID:

注意,采用离线模式,需要修改服务端配置文件,关闭online-mode,找到以下选项改为false

root@mcserver:~vim /opt/minecraft/instances/survival/server.properties 
...
online-mode=false
...

重启服务端使配置生效

systemctl restart minecraft-survival

2、返回客户端首页,点击下载,点击一个游戏版本进行安装,与服务端版本一致


3、账号和游戏版本准备好后,返回客户端首页,点击启动游戏


选择多人游戏


点击添加服务器


输入服务器名称和服务器地址,名称可自定义,服务器地址可以是公网IP地址或域名:

完成后可以看到已成功添加服务器

点击列表成功登入服务器,执行/list命令可以显示在线的玩家

查看服务器后端日志,有 steve 用户登录记录

root@mcserver:~journalctl -f
Jun 09 21:19:44 mcserver java[5581]: [21:19:44] [Worker-Main-1/INFO]: Preparing spawn area: 4%
Jun 09 21:19:45 mcserver java[5581]: [21:19:45] [Server thread/INFO]: Time elapsed: 7130 ms
Jun 09 21:19:45 mcserver java[5581]: [21:19:45] [Server thread/INFO]: Done (20.208s)! For help, type "help"
Jun 09 21:20:45 mcserver java[5581]: [21:20:45] [Server thread/INFO]: steve[/192.168.93.229:10391] logged in with entity id 110 at (-28.5, 70.0, -29.5)
Jun 09 21:20:45 mcserver java[5581]: [21:20:45] [Server thread/INFO]: steve joined the game
Jun 09 21:20:51 mcserver java[5581]: [21:20:51] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2017ms or 40 ticks behind
Jun 09 21:21:54 mcserver java[5581]: [21:21:54] [Server thread/INFO]: steve lost connection: Disconnected
Jun 09 21:21:54 mcserver java[5581]: [21:21:54] [Server thread/INFO]: steve left the game
Jun 09 21:44:37 mcserver java[5581]: [21:44:37] [Server thread/INFO]: steve[/192.168.93.229:6745] logged in with entity id 410 at (-34.35809642546795, 63.0, -0.6483614176174147)
Jun 09 21:44:37 mcserver java[5581]: [21:44:37] [Server thread/INFO]: steve joined the game

6、配置ops权限

可以通过修改ops.json文件为用户添加ops权限,添加前需要获取用户名称及UUID,在线用户可以通过https://namemc.com/这个网站查看某个用户的UUID,离线模式可以在创建用户时高级模式中查看,或在服务端 usercache.json 文件中查看已登录到服务器的用户UUID

1、服务端查看离线用户的UUID

root@mcserver:~cat /opt/minecraft/instances/survival/usercache.json 
[{"name":"steve","uuid":"53909932-f794-33c0-9329-948045a4c1ce","expiresOn":"2022-07-09 21:44:37 +0800"}]

2、配置 ops.json 文件,将用户steve设为op

root@mcserver:~vim /opt/minecraft/instances/survival/ops.json 
[
  {
    "uuid": "53909932-f794-33c0-9329-948045a4c1ce",
    "name": "steve",
    "level": 4
  }
]

重启服务端使配置生效

systemctl --user restart minecraft-survival

重新使用客户端登录,执行/op steve提示该steve用户已经是管理员,如果需要取消管理员权限执行/deop steve命令:

op具有很高权限,比如可以修改游戏模式为创造模式,可以使用任何方块和飞行等等:

/gamemode creative

双击空格我们的steve就可以起飞了:

7、搭建群组服务器

前置要求:单台服务器运行多个服务端,需要调整机器配置,建议至少2核CPU、8G内存,否则很可能因为资源不足导致服务器启动失败。

下面我们使用bungeecord代理软件搭建由多个服务端组成的群组服务器,这里仅仅进行测试,BC代理软件和所有子服全部运行在一台服务器上。

其架构原理如下图所示:

1、目前已经创建了生存服,在创建一个lobby登录服

创建服务启动文件

mkdir -p /opt/minecraft/instances/lobby

cat >/lib/systemd/system/minecraft-lobby.service<<'EOF'
[Unit]
Description=Minecraft Server
Wants=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/minecraft/instances/lobby
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui
RestartSec=30
Restart=on-failure
KillMode=process
KillSignal=SIGINT
SuccessExitStatus=130
StandardInput=null

[Install]
WantedBy=default.target
EOF

尝试首次启动服务

echo "eula=true" > /opt/minecraft/instances/lobby/eula.txt
systemctl enable minecraft-lobby
systemctl start minecraft-lobby

由于在同一台服务器启动多个服务端,使用journalctl -xe命令查看日志,提示默认端口25565已被占用导致启动失败,需要修改lobby服务端端口号,修改以下两项:

root@mcserver:~vim /opt/minecraft/instances/lobby/server.properties
...
online-mode=false
...
server-port=25566
...

重新启动lobby服务端

systemctl restart minecraft-lobby

等待服务端完全启动

root@mcserver:~systemctl status minecraft-lobby.service 
● minecraft-lobby.service - Minecraft Server
     Loaded: loaded (/lib/systemd/system/minecraft-lobby.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-08-04 23:20:21 CST; 3min 45s ago
   Main PID: 5103 (java)
      Tasks: 31 (limit: 4538)
     Memory: 2.2G
        CPU: 2min 38.201s
     CGroup: /system.slice/minecraft-lobby.service
             └─5103 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui

Aug 04 23:22:12 mcserver java[5103]: [23:22:12] [Worker-Main-6/INFO]: Preparing spawn area: 95%
Aug 04 23:22:13 mcserver java[5103]: [23:22:13] [Worker-Main-6/INFO]: Preparing spawn area: 95%
Aug 04 23:22:13 mcserver java[5103]: [23:22:13] [Worker-Main-6/INFO]: Preparing spawn area: 95%
Aug 04 23:22:14 mcserver java[5103]: [23:22:14] [Worker-Main-6/INFO]: Preparing spawn area: 96%
Aug 04 23:22:14 mcserver java[5103]: [23:22:14] [Worker-Main-6/INFO]: Preparing spawn area: 96%
Aug 04 23:22:15 mcserver java[5103]: [23:22:15] [Worker-Main-6/INFO]: Preparing spawn area: 96%
Aug 04 23:22:15 mcserver java[5103]: [23:22:15] [Worker-Main-6/INFO]: Preparing spawn area: 97%
Aug 04 23:22:16 mcserver java[5103]: [23:22:16] [Worker-Main-6/INFO]: Preparing spawn area: 98%
Aug 04 23:22:20 mcserver java[5103]: [23:22:20] [Server thread/INFO]: Time elapsed: 88438 ms
Aug 04 23:22:20 mcserver java[5103]: [23:22:20] [Server thread/INFO]: Done (107.973s)! For help, type "help"

客户端添加服务器登录验证,非默认端口时需要添加端口号

2、下载bungeecord jar包到本地,bungeecord代理端下载地址:https://ci.md-5.net/job/BungeeCord/

点击右侧BungeeCored.jar,下载并上传到服务器

上传到linux对应目录下:

root@mcserver:~ls /opt/minecraft/jars/
BungeeCord.jar  server.jar

3、创建BungeeCord服务启动文件,复制粘贴以下内容到命令行

mkdir -p /opt/minecraft/instances/bungeecord

cat >/lib/systemd/system/minecraft-bungeecord.service<<'EOF'
[Unit]
Description=Minecraft Server
Wants=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/minecraft/instances/bungeecord
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/BungeeCord.jar nogui
RestartSec=30
Restart=on-failure
KillMode=process
KillSignal=SIGINT
SuccessExitStatus=130
StandardInput=null

[Install]
WantedBy=default.target
EOF

4、启动BungeeCord服务端

systemctl enable minecraft-bungeecord.service
systemctl start minecraft-bungeecord.service

查看服务运行状态,等待服务端完全启动

root@mcserver:~systemctl status minecraft-bungeecord.service 
● minecraft-bungeecord.service - Minecraft Server
     Loaded: loaded (/lib/systemd/system/minecraft-bungeecord.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-08-04 23:34:23 CST; 11s ago
   Main PID: 5300 (java)
      Tasks: 26 (limit: 4538)
     Memory: 154.5M
        CPU: 3.643s
     CGroup: /system.slice/minecraft-bungeecord.service
             └─5300 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/BungeeCord.jar nogui

Aug 04 23:34:31 mcserver java[5300]: [104B blob data]
Aug 04 23:34:31 mcserver java[5300]: [104B blob data]
Aug 04 23:34:31 mcserver java[5300]: [57B blob data]
Aug 04 23:34:31 mcserver java[5300]: [117B blob data]
Aug 04 23:34:31 mcserver java[5300]: [105B blob data]
Aug 04 23:34:31 mcserver java[5300]: [109B blob data]
Aug 04 23:34:31 mcserver java[5300]: [107B blob data]
Aug 04 23:34:31 mcserver java[5300]: [105B blob data]
Aug 04 23:34:31 mcserver java[5300]: [105B blob data]
Aug 04 23:34:31 mcserver java[5300]: [44B blob data]

5、修改BungeeCord配置文件,改动配置项如下,其他默认即可:

root@mcserver:~vim /opt/minecraft/instances/bungeecord/config.yml 
listeners:
......
online_mode: false
......
servers:
  lobby:
    motd: '&1Just another BungeeCord - Forced Host'
    address: localhost:25566
    restricted: false
  survival:
    motd: '&1Just another BungeeCord - Forced Host'
    address: localhost:25565
    restricted: false

重新启动服务

systemctl restart minecraft-bungeecord

6、客户端添加服务器验证

登录后执行/server命令,将提示你当前所在的服务器,执行/server survival将切换到survival服务器

查看此时的数据目录结构:

root@mcserver:~sudo apt install -y tree

root@mcserver:~tree -L 3 /opt/minecraft/
/opt/minecraft/
├── instances
│   ├── bungeecord
│   │   ├── config.yml
│   │   ├── locations.yml
│   │   ├── modules
│   │   ├── modules.yml
│   │   ├── plugins
│   │   ├── proxy.log.0
│   │   └── proxy.log.0.lck
│   ├── lobby
│   │   ├── banned-ips.json
│   │   ├── banned-players.json
│   │   ├── crash-reports
│   │   ├── eula.txt
│   │   ├── libraries
│   │   ├── logs
│   │   ├── ops.json
│   │   ├── server.properties
│   │   ├── usercache.json
│   │   ├── versions
│   │   ├── whitelist.json
│   │   └── world
│   └── survival
│       ├── banned-ips.json
│       ├── banned-players.json
│       ├── eula.txt
│       ├── libraries
│       ├── logs
│       ├── ops.json
│       ├── server.properties
│       ├── usercache.json
│       ├── versions
│       ├── whitelist.json
│       └── world
└── jars
    ├── BungeeCord.jar
    └── server.jar

16 directories, 21 files

查看当前服务器列表

以上就是单个服务器及群组服务器的基本搭建方法,在实际搭建时仍有很多参数和配置需要调整,以及不计其数的插件集成。

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/73033.html