基于Ubuntu 20.04搭建Minecraft服务器

一、写作说明

作为一个Minecraft新手,刚尝试了下搭建Minecraft服务器,想要和小伙伴一起玩耍。可是网上的教程对于习惯了局域网联机的我并不友好,经过一番努力终于完成了。在此记录下我的配置过程,也补充下网上的资料。

参考链接:https://www.myfreax.com/how-to-install-minecraft-server-on-ubuntu-18-04/

 

二、安装环境

服务器系统版本:Ubuntu 20.04 64位 (下面以阿里ECS为例)

Minecraft版本:1.16.1 Java版

三、搭建步骤

1、安装构建mcrcon工具所需软件包

sudo apt-get update
sudo apt-get install git build-essential

2、安装Java运行环境

sudo apt install openjdk-8-jre-headless

验证java版本:

java -version

输出示例:

# 此处为"java -version"命令输出内容
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1ubuntu1-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

3、新建Linux用户

出于安全目的,Minecraft不在root用户下运行。我们创建新的系统用户,名为“minecraft”,运行在“/opt/minecraft”下

sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft

4、切换到minecraft用户,并创建Minecraft游戏目录

sudo su minecraft
mkdir -p ~/{backups,tools,server}

backups: 服务器备份文件夹

server: 实际运行目录

tools:存储mcrcon客户端以及备份恢复脚本

5、下载并编译mcrcon

cd ~/tools && git clone https://github.com/Tiiffi/mcrcon.git
cd ~/tools/mcrcon
gcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c

测试编译结果:

./mcrcon -h

输出示例:

# 此处为"./mcrcon -h"命令输出内容
Usage: mcrcon [OPTIONS] [COMMANDS]

Send rcon commands to Minecraft server.

Options:
  -H		Server address (default: localhost)
  -P		Port (default: 25575)
  -p		Rcon password
  -t		Terminal mode
  -s		Silent mode
  -c		Disable colors
  -r		Output raw packets
  -w		Wait for specified duration (seconds) between each command (1 - 600s)
  -h		Print usage
  -v		Version information

Server address, port and password can be set with following environment variables:
  MCRCON_HOST
  MCRCON_PORT
  MCRCON_PASS

- mcrcon will start in terminal mode if no commands are given
- Command-line options will override environment variables
- Rcon commands with spaces must be enclosed in quotes

Example:
	mcrcon -H my.minecraft.server -p password -w 5 "say Server is restarting!" save-all stop

6、下载并配置Minecraft服务器

最新JAR包可从Minecraft官网页面获取,本人写作时最新版为1.16.1,下载地址为:https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar

我们使用wget命令将其下载到~/server目录中

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

配置Minecraft服务器

cd ~/server
java -Xmx3072M -Xms1024M -jar server.jar nogui

-Xmx3072M表示服务器最大允许内存为3072MB(3GB)

-Xms1024M表示服务器初始内存为1024MB(1GB)

具体数值应根据读者自身服务器配置,适度更改。最大内存不建议小于1GB(不应超过服务器总内存大小),最小内存不建议小于512MB。笔者的服务器总内存为4GB。

首次启动服务器时,它将执行一些操作并创建server.properties和eula.txt文件并停止运行

# 此处为"java -Xmx3072M -Xms1024M -jar server.jar nogui"命令输出内容
[23:41:44] [main/ERROR]: Failed to load properties from file: server.properties
[23:41:45] [main/WARN]: Failed to load eula.txt
[23:41:45] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

配置eula.txt文件

nano ~/server/eula.txt

设置eula=true,文件内容如下:

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Fri Jun 26 21:38:36 CST 2020
eula=true

配置server.properties文件

nano ~/server/server.properties

设置以下几个值:

rcon.port=25575                        # rcon连接端口
server-port=25565                      # 游戏端口
rcon.password=strong-password          # rcon连接密码为"strong-password",自行更改设置
enable-rcon=true                       # 允许rcon连接
max-players=8                          # 最多允许八个玩家在线(玩家过多可能导致服务器运行太卡)
op-permission-level=4                  # op操作权限为最高,级别为1-4
online-mode=false                      # 不验证连接Minecraft,设置为false可保证在客户端无法验证账户时正常进入服务器(这也意味着盗版也可入)
level-name=world                       # 存档名字为"world",目录下能找到对应你的文件夹

详细配置及其说明,详见官方文档

7、配置防火墙

如果您的服务器安装了防火墙,请执行以下代码

sudo ufw allow 25565/tcp
sudo ufw allow 25575/tcp

另外,对于个别服务器提供商,例如阿里云,会提供更低级别的防火墙保护,应前往控制台设置。下面以阿里云为例:

8、创建Systemd 服务单位文件

su    # 切换回root用户
sudo nano /etc/systemd/system/minecraft.service

粘贴以下内容:

[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx3072M -Xms1024M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password stop

[Install]
WantedBy=multi-user.target

读者应主动更正"3072"、"1024"、"strong-password"处的内容(上面均有解释过)

重新加载systemd管理器配置:

sudo systemctl daemon-reload

启动Minecraft服务器:

sudo systemctl start minecraft

查看Minecraft服务状态:

sudo systemctl status minecraft

输出示例:

# 此处为"sudo systemctl status minecraft"命令输出内容
minecraft.service - Minecraft Server
     Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-06-27 10:02:37 CST; 2s ago
   Main PID: 12499 (java)
      Tasks: 12 (limit: 4657)
     Memory: 132.9M
     CGroup: /system.slice/minecraft.service
             └─12499 /usr/bin/java -Xmx3072M -Xms1024M -jar server.jar nogui

Jun 27 10:02:37 iZ2zehyj00tfq594l6q5ctZ systemd[1]: Started Minecraft Server.

设置Minecraft服务器自启动:

sudo systemctl enable minecraft

** 如果您想关闭Minecraft服务器,指令如下(可再次开启):

sudo systemctl stop minecraft        # 此命令应在root用户下执行

或 通过htop命令,kill相关进程

htop    # root用户下执行,比 sudo systemctl stop minecraft 效果更好

如果初始不是这个界面,按下"F5"即可。

选中类似上面的条目,按"F9",然后回车,然后"F10"退出

9、配置备份功能

sudo su minecraft
nano ~/tools/backup.sh

粘贴以下内容:

#!/bin/bash

function rcon {
  /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password "$1"
}

rcon "save-off"
rcon "save-all"
tar -cvpzf /opt/minecraft/backups/server-$(date +%F_%R).tar.gz /opt/minecraft/server
rcon "save-on"

## Delete older backups
find /opt/minecraft/backups/ -type f -mtime +7 -name '*.gz' -delete

通过chmod命令赋予执行权限

chmod +x /opt/minecraft/tools/backup.sh

创建cron作业,使其每天23:00自动运行一次备份

crontab -e        # 如果让选择编辑器,选择nano即可

在最后面粘贴以下行

0 23 * * * /opt/minecraft/tools/backup.sh

四、测试连接

1、启动Minecraft服务

# 请确保已经切换到root用户
# 切换命令为 su

# 请确保已经关闭Minecraft服务
# 关闭指令为 sudo systemctl stop minecraft

sudo systemctl start minecraft

2、启动Minecraft客户端,多人游戏-添加服务器

ip地址:服务器公网地址,应通过服务器提供商获得,此处假设为" 31.156.24.12"

端口号:25565

配置内容方式如下:

3、进入服务器

然后正常情况下你已经可以嗨皮了,后面补充一些内容。

五、恢复备份

# minecraft用户下执行
# 切换指令为 su minecraft

cd ~/tools/
./backup.sh

六、访问Minecraft控制台

请确保Minecraft服务器处于开启状态

# minecraft用户下执行
# 切换指令为 su minecraft

~/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password -t    # strong-password替换为前面设置的密码

在这里可以输入一下op指令,玩Minecraft肯定知道这是啥,应该不用解释了。

七、开启作弊模式(慎选)

很多玩家可能在局域网联机时,习惯打开作弊模式,但是在服务器模式中怎么也找不到配置方案。笔者在这里卡了两个多小时,特别说明配置方法。

1、根据第六条,进入Minecraft控制台

2、将某玩家设置为管理员。例如玩家名为"a_flying_fish",这个在玩家进入游戏后随便输个消息就能看到

Logged in. Type 'quit' or 'exit' to quit.
>op a_flying_fish
Made a_flying_fish a server operator
>Q

3、查看配置文件

nano ~/server/ops.json

内容如下:

[
  {
    "uuid": "76c9b67c-7b69-3ffa-abc4-c9e32aa490cf",
    "name": "a_flying_fish",
    "level": 4,
    "bypassesPlayerLimit": false
  }
]

name即为玩家名,

level标识操作权限级别,对应1-4, 4表示拥有所有权限。具体可参考官网说明

然后就会发现用户名为a_flying_fish的玩家可以输入作弊指令了

猜你喜欢

转载自blog.csdn.net/qq_36290650/article/details/106978441