一、写作说明
作为一个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的玩家可以输入作弊指令了