一、写作说明
作为一个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版
三、搭建步骤
- 安装构建mcrcon工具所需软件包
1
2sudo apt-get update
sudo apt-get install git build-essential - 安装Java运行环境验证java版本:
1
sudo apt install openjdk-8-jre-headless
输出示例:1
java -version
1
2
3
4# 此处为"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) - 新建Linux用户
出于安全目的,Minecraft不在root用户下运行。我们创建新的系统用户,名为“minecraft”,运行在“/opt/minecraft”下1
sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft
- 切换到minecraft用户,并创建Minecraft游戏目录
1
2sudo su minecraft
mkdir -p ~/{backups,tools,server}
- backups: 服务器备份文件夹
- server: 实际运行目录
- tools:存储mcrcon客户端以及备份恢复脚本
- 下载并编译mcrcon测试编译结果:
1
2
3cd ~/tools && git clone https://github.com/Tiiffi/mcrcon.git
cd ~/tools/mcrcon
gcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c输出示例:1
./mcrcon -h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29# 此处为"./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 - 下载并配置Minecraft服务器
最新JAR包可从Minecraft官网页面获取,本人写作时最新版为1.16.1,下载地址为:https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar
我们使用wget命令将其下载到~/server目录中
1 | wget https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar -P ~/server |
配置Minecraft服务器
1 | cd ~/server |
- -Xmx3072M表示服务器最大允许内存为3072MB(3GB)
- -Xms1024M表示服务器初始内存为1024MB(1GB)
具体数值应根据读者自身服务器配置,适度更改。最大内存不建议小于1GB(不应超过服务器总内存大小),最小内存不建议小于512MB。笔者的服务器总内存为4GB。
首次启动服务器时,它将执行一些操作并创建server.properties和eula.txt文件并停止运行
1 | # 此处为"java -Xmx3072M -Xms1024M -jar server.jar nogui"命令输出内容 |
配置eula.txt文件
1 | nano ~/server/eula.txt |
设置eula=true,文件内容如下:
1 | #By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). |
配置server.properties文件
1 | nano ~/server/server.properties |
设置以下几个值:
1 | rcon.port=25575 # rcon连接端口 |
详细配置及其说明,详见官方文档
7. 配置防火墙
如果您的服务器安装了防火墙,请执行以下代码
1 | sudo ufw allow 25565/tcp |
另外,对于个别服务器提供商,例如阿里云,会提供更低级别的防火墙保护,应前往控制台设置。下面以阿里云为例
- 创建Systemd 服务单位文件粘贴以下内容:
1
2su # 切换回root用户
sudo nano /etc/systemd/system/minecraft.service1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[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管理器配置:
1 | sudo systemctl daemon-reload |
启动Minecraft服务器:
1 | sudo systemctl start minecraft |
查看Minecraft服务状态:
1 | sudo systemctl status minecraft |
输出示例:
1 | # 此处为"sudo systemctl status minecraft"命令输出内容 |
设置Minecraft服务器自启动:
1 | sudo systemctl enable minecraft |
如果您想关闭Minecraft服务器,指令如下(可再次开启):
1 | sudo systemctl stop minecraft # 此命令应在root用户下执行 |
或 通过htop命令,kill相关进程
1 | htop # root用户下执行,比 sudo systemctl stop minecraft 效果更好 |
如果初始不是这个界面,按下”F5”即可。
选中类似上面的条目,按”F9”,然后回车,然后”F10”退出
- 配置备份功能粘贴以下内容:
1
2sudo su minecraft
nano ~/tools/backup.sh通过chmod命令赋予执行权限1
2
3
4
5
6
7
8
9
10
11
12
13
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创建cron作业,使其每天23:00自动运行一次备份1
chmod +x /opt/minecraft/tools/backup.sh
在最后面粘贴以下行1
crontab -e # 如果让选择编辑器,选择nano即可
1
0 23 * * * /opt/minecraft/tools/backup.sh
四、测试连接
- 启动Minecraft服务
1 | # 请确保已经切换到root用户 |
- 启动Minecraft客户端,多人游戏-添加服务器
- ip地址:服务器公网地址,应通过服务器提供商获得,此处假设为” 31.156.24.12”
- 端口号:25565
配置内容方式如下:
- 进入服务器
然后正常情况下你已经可以嗨皮了,后面补充一些内容。
五、备份
1 | # minecraft用户下执行 |
六、访问Minecraft控制台
请确保Minecraft服务器处于开启状态
1 | # minecraft用户下执行 |
在这里可以输入一下op指令,玩Minecraft肯定知道这是啥,应该不用解释了。
七、开启作弊模式(慎选)
很多玩家可能在局域网联机时,习惯打开作弊模式,但是在服务器模式中怎么也找不到配置方案。笔者在这里卡了两个多小时,特别说明配置方法。
根据第六条,进入Minecraft控制台
将某玩家设置为管理员。例如玩家名为”a_flying_fish”,这个在玩家进入游戏后随便输个消息就能看到
1 | Logged in. Type 'quit' or 'exit' to quit. |
- 查看配置文件
1 | nano ~/server/ops.json |
内容如下:
1 | [ |
- name即为玩家名,
- level标识操作权限级别,对应1-4, 4表示拥有所有权限。具体可参考官网说明
然后就会发现用户名为a_flying_fish的玩家可以输入作弊指令了