Linux搭建 Minecraft 服务器

Linux搭建 Minecraft 服务器本篇文章介绍使用常规方式和docker容器方式在linux操作系统上搭建最新版本的minecraft服务器,并使用bungeecord配置为群组服务器模式。

大家好,又见面了,我是你们的朋友全栈君。

1、Minecraft简介

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

在这里插入图片描述

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。

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

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

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

3、服务器基本配置

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

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

在这里插入图片描述

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

在这里插入图片描述

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

root@ubuntu:~# hostnamectl set-hostname mcserver

在这里插入图片描述

3、创建名为mc的用户组及用户,指定home目录设置为/opt/minecraft,方便使用普通用户管理minecraft

groupadd -r mc
useradd -r -g mc -d "/opt/minecraft" -s "/bin/bash" -m mc

为mc用户设置密码123456

echo "mc:123456" | sudo chpasswd

# 或使用passwd命令交互式设置
passwd mc

为mc用户配置sudo免密

tee /etc/sudoers.d/mc <<< 'mc ALL=(ALL) NOPASSWD: ALL'
chmod 440 /etc/sudoers.d/mc

4、切换到普通用户mc,或退出直接使用该用户ssh登录

root@mcserver:~# su - mc

查看当前所在目录

mc@mcserver:~$ pwd
/opt/minecraft

5、配置使用systemctl命令管理minecraft服务

loginctl enable-linger $(whoami)
echo "export XDG_RUNTIME_DIR=/run/user/$(id -u)" >> ~/.bashrc
source ~/.bashrc

将mc用户加入systemd-journal组增加日志查看权限

sudo usermod -a -G systemd-journal mc

6、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、搭建单个服务端

无特殊说明后续所有操作都以普通用户mc身份执行

1、创建服务端安装目录

mc@mcserver:~$ mkdir -p ~/{ 
   jars,instances}

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

在这里插入图片描述

下载后使用 xftp或 winscp工具上传到服务器/opt/minecraft/jars目录下,也可以获取下载链接后直接使用命令下载:

wget https://launcher.mojang.com/v1/objects/e00c4052dac1d59a1188b2aa9d5a87113aaf1122/server.jar -P ~/jars

如果本地上传需要确认jar包权限属于是否mc用户,否则需要执行以下命令修改权限:

sudo chown -R mc:mc ~/jars/server.jar

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

mkdir -p ~/.config/systemd/user/
cat >~/.config/systemd/user/minecraft@.service<<'EOF' [Unit] Description=Minecraft Server %i Wants=network.target After=network.target [Service] Type=simple WorkingDirectory=/opt/minecraft/instances/%i 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服务端

mkdir -p ~/instances/survival
echo "eula=true" > /opt/minecraft/instances/survival/eula.txt
systemctl --user daemon-reload
systemctl --user enable minecraft@survival
systemctl --user start minecraft@survival

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

mc@mcserver:~$ systemctl --user status minecraft@survival.service 
● minecraft@survival.service - Minecraft Server survival
     Loaded: loaded (/opt/minecraft/.config/systemd/user/minecraft@.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-09 20:58:12 CST; 9min ago
   Main PID: 5402 (java)
      Tasks: 25 (limit: 4538)
     Memory: 2.8G
        CPU: 2min 54.030s
     CGroup: /user.slice/user-998.slice/user@998.service/app.slice/app-minecraft.slice/minecraft@survival.service
             └─5402 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui

Jun 09 20:59:44 mcserver java[5402]: [20:59:44] [Worker-Main-7/INFO]: Preparing spawn area: 60%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:46 mcserver java[5402]: [20:59:46] [Worker-Main-7/INFO]: Preparing spawn area: 72%
Jun 09 20:59:47 mcserver java[5402]: [20:59:47] [Worker-Main-7/INFO]: Preparing spawn area: 88%
Jun 09 20:59:47 mcserver java[5402]: [20:59:47] [Worker-Main-7/INFO]: Preparing spawn area: 88%
Jun 09 20:59:47 mcserver java[5402]: [20:59:47] [Worker-Main-7/INFO]: Preparing spawn area: 88%
Jun 09 20:59:50 mcserver java[5402]: [20:59:50] [Server thread/INFO]: Time elapsed: 66705 ms
Jun 09 20:59:50 mcserver java[5402]: [20:59:50] [Server thread/INFO]: Done (85.783s)! For help, type "help"

5、管理服务启停命令

# 重新加载配置
systemctl --user daemon-reload

# 启动服务端
systemctl --user start minecraft@survival

# 停止服务端
systemctl --user stop minecraft@survival

# 重启服务端
systemctl --user restart minecraft@survival

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

# 查看服务启动日志
journalctl -f

5、客户端登录server端

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

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

mc@mcserver:~$ vim instances/survival/server.properties 
...
online-mode=false
...

重启服务端使配置生效

systemctl --user restart minecraft@survival

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

在这里插入图片描述
3、账号和游戏版本准备好后,返回客户端首页,点击启动游戏

在这里插入图片描述
选择多人游戏

在这里插入图片描述
点击添加服务器

在这里插入图片描述
输入服务器名称和服务器地址,名称可自定义,服务器地址可以是公网IP地址或域名:
在这里插入图片描述
完成后可以看到已成功添加服务器
在这里插入图片描述

点击列表成功登入服务器,执行/list命令可以显示在线的玩家
在这里插入图片描述
查看服务器后端日志,有 steve 用户登录记录

mc@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

mc@mcserver:~$ cat ~/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

mc@mcserver:~$ vim 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、搭建群组服务器

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

其架构原理如下图所示:
在这里插入图片描述

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

mkdir -p ~/instances/lobby
echo "eula=true" > /opt/minecraft/instances/lobby/eula.txt
systemctl --user enable minecraft@lobby
systemctl --user start minecraft@lobby

由于在同一台服务器启动多个服务端,默认端口25565已被占用导致启动失败,需要修改lobby服务端端口号,修改以下两项

mc@mcserver:~$ vim instances/lobby/server.properties
...
online-mode=false
...
server-port=25566
...

重新启动lobby服务端

systemctl --user restart minecraft@lobby

等待服务端完全启动

mc@mcserver:~$ systemctl --user status minecraft@lobby.service 
● minecraft@lobby.service - Minecraft Server lobby
     Loaded: loaded (/opt/minecraft/.config/systemd/user/minecraft@.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-09 22:56:32 CST; 2min 15s ago
   Main PID: 6343 (java)
      Tasks: 25 (limit: 4538)
     Memory: 1.9G
        CPU: 1min 6.759s
     CGroup: /user.slice/user-998.slice/user@998.service/app.slice/app-minecraft.slice/minecraft@lobby.service
             └─6343 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/server.jar nogui

Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:06 mcserver java[6343]: [22:57:06] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:07 mcserver java[6343]: [22:57:07] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:07 mcserver java[6343]: [22:57:07] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Jun 09 22:57:08 mcserver java[6343]: [22:57:08] [Worker-Main-1/INFO]: Preparing spawn area: 54%
Jun 09 22:57:08 mcserver java[6343]: [22:57:08] [Server thread/INFO]: Time elapsed: 10855 ms
Jun 09 22:57:08 mcserver java[6343]: [22:57:08] [Server thread/INFO]: Done (24.147s)! For help, type "help"

客户端添加服务器登录验证,非默认端口时需要添加端口号
在这里插入图片描述

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

点击右侧BungeeCored.jar,下载并上传到服务器
在这里插入图片描述
这里在官网获取下载链接,直接下载到linux对应目录下:

wget https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar -P ~/jars/

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

cat >~/.config/systemd/user/bungeecord.service<<'EOF' [Unit] Description=bungeecord 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服务端

mkdir -p ~/instances/bungeecord
systemctl --user daemon-reload
systemctl --user enable bungeecord.service
systemctl --user start bungeecord.service

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

mc@mcserver:~$ systemctl --user status bungeecord.service 
● bungeecord.service - bungeecord Server
     Loaded: loaded (/opt/minecraft/.config/systemd/user/bungeecord.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-09 23:11:38 CST; 19s ago
   Main PID: 6809 (java)
      Tasks: 25 (limit: 4538)
     Memory: 127.3M
        CPU: 2.473s
     CGroup: /user.slice/user-998.slice/user@998.service/app.slice/bungeecord.service
             └─6809 /usr/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/jars/BungeeCord.jar nogui

Jun 09 23:11:43 mcserver java[6809]: [104B blob data]
Jun 09 23:11:43 mcserver java[6809]: [104B blob data]
Jun 09 23:11:43 mcserver java[6809]: [57B blob data]
Jun 09 23:11:43 mcserver java[6809]: [117B blob data]
Jun 09 23:11:43 mcserver java[6809]: [105B blob data]
Jun 09 23:11:43 mcserver java[6809]: [109B blob data]
Jun 09 23:11:43 mcserver java[6809]: [107B blob data]
Jun 09 23:11:43 mcserver java[6809]: [105B blob data]
Jun 09 23:11:43 mcserver java[6809]: [105B blob data]
Jun 09 23:11:43 mcserver java[6809]: [45B blob data]

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

mc@mcserver:~$ vim 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 --user restart bungeecord.servie

6、客户端添加服务器验证
在这里插入图片描述

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

在这里插入图片描述

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

mc@mcserver:~$ sudo apt install -y tree

mc@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://javaforall.net/150627.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BP神经网络原理推导

    BP神经网络原理推导本文会完成BP神经网络的推导过程,先介绍BP神经网络的历史,然后介绍BP神经网络的结构,然后再开始推导,最后介绍BP神经网络的优缺点以及几个优化的方法。

    2022年7月20日
    13
  • cssText属性的使用「建议收藏」

    cssText属性的使用「建议收藏」cssText是什么?简单来说是设置元素的style属性值,比如 ele.style.cssText = 'display: block';

    2022年7月4日
    29
  • matlab三维图怎么改变颜色_matlab画复杂函数图像

    matlab三维图怎么改变颜色_matlab画复杂函数图像当我们学习surface命令时,已经看到了三维作图的一些端倪。在matlab中我么可以调用mesh(x,y,z)函数来产生三维图像。首先,我们用z=cos(x)sin(y)在-2pi≤x,y≤2pi内的图像来看看:[x,y]=meshgrid(-2*pi:0.1:2*pi);z=cos(x).*sin(y);mesh(x,y,z),xlabel(‘x’),ylabel(‘y’),zla…

    2022年8月31日
    5
  • 【Java-Set转List】

    【Java-Set转List】这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年10月18日
    2
  • Python翻译Excel文件

    Python翻译Excel文件朋友需要翻译大量 Excel 文件内容 看我是否能搭把手 我的思路很简单 就是将 Excel 文件内容读出后 调用翻译软件的 API 然后再爬回翻译好的内容 写入 Excel 读取 Excel 文件内容的方法 我这里要处理的是 xlsx 文件 可以 importopenpy 如果要处理 xls 文件 就不能用这个 而是 importxlrd 或者先将 xks 文件转为 xlsx 文件再使用本文代码 具体这两个包提

    2025年10月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号