如何搭建mc服务器?(重制版)

发布于 2023-02-08  3.33k 次阅读


老生常谈的问题。

在文章开始之前,请确保您有服务器的管理员权限,如果您使用的是Linux,请确保您有使用root用户的权限,或者您的用户有使用sudo指令的权限。否则,您可能无法使用接下来的教程。

精简版

  1. 装个Java(最好是64位)
  2. 从官网下个服务端
  3. 写个启动脚本,比如“java -jar -Xmx2G -Xms1G xxx.jar” xxx.jar是你刚下的服务端的名字。
  4. 记得把eula.txt中的false改成true。
  5. 双击运行你刚才写的脚本。
  6. 记得打开25565端口,tcp协议。
  7. 快乐的玩耍。

完整版

服务器挑选并不在本文章的包含范围之内。可能之后会另写一篇文章来细讲。

零、服务器系统选择

服务器系统其实也分很多种,在这里的话我推荐使用Debian 11或者Centos7。

一、Java环境配置

如果您连Java如何安装都不明白,那么我认为这篇教程也不会太适合您。

Red Hat系

(包括Centos7在内的使用yum/dnf包管理的Linux发行版)

请在命令行输入:

sudo yum search openjdk

如果您使用的服务端版本小于等于1.12.2,请输入:

sudo yum install -y java-1.8.0-openjdk-devel.x86_64

以安装Java8

如果您使用的服务端版本大于等于1.17,请输入

sudo yum install -y java-latest-openjdk-devel.x86_64

以安装Java17

注:由于此处我们选用的软件包为java-latest-openjdk-devel.x86_64,所以yum会选择您输入命令的那天所能查询到的最新版Java来进行安装。在本篇教程写定时,Java最新已发布到Java19。

如果版本号是介于这两者中间的mc服务端,理论上来说Java19是可以做到向下兼容的。但是如果您不放心的话您也可以选择在命令行输入:

sudo yum install -y java-11-openjdk-devel.x86_64

以安装Java11

这样,Java的安装也是基本完成了

注意!请确保服务器中没有预装其他版本的Java,否则可能会出现版本冲突等问题!!!

解决方法:

sudo rpm -qa|grep java

查看目前系统中安装的Java

然后使用

sudo rpm -e –nodeps 上一个命令显示的软件包名称

以卸载Java

然后用yum重新安装Java

应该就可以解决了。

当然你也可以通过改环境变量大法来切换Java版本,但是如果没改好可能会导致亿些问题。

Debian系

(包括Ubuntu在内的使用apt包管理的Linux发行版)

(Aug.28th.2022补充:apt用的ustc源,没有查到java8的包,你可以尝试用java11代替)

在执行所有命令前先执行

sudo apt update

安装java11

sudo apt install openjdk-11-jdk -y

安装java17

sudo apt install openjdk-17-jdk -y

一.五、mc服务端选择

如果你喜欢原汁原味,那我推荐:minecraft server。Download server for Minecraft | Minecraft

如果你想要安装mod,那我推荐:原版+forge(注:仅适用于mc版本≤1.12.2)

如果你希望能使用插件,那么我认为您有以下几款服务端可供选择:

  1. Spigot  Spigot (getbukkit.org)
  2. Papermc  Downloads – PaperMC
  3. MiraiMC etil2jz/Mirai: Mirai 未来 - A powerful Minecraft Server Software coming from the future (github.com)

注:就spigot目前的性能而言仅为“可用”状态,作者建议您直接更换为PaperMC服务端及其下游分支的服务端。

如果你希望使用插件的同时可以使用mod,那么我认为您有以下几款服务端可供选择:

  1. CatServer  GitHub - Luohuayu/CatServer: 高性能与高兼容性的1.12.2版本Forge+Bukkit+Spigot服务端 (A high performance and high compatibility 1.12.2 version Forge+Bukkit+Spigot server)
  2. Mohist  MohistMC — Minecraft Forge Server software implementing Paper/Spigot/Bukkit API
  3. Arclight [1.18.2/1.19.3]Arclight ⚡ —— 高版本 Forge+Bukkit 服务端实现 - 软件资源 - Minecraft(我的世界)中文论坛 - (mcbbs.net)

在这里我不方便过多的介绍。

在接下来的教程中我只会着重讲原版server端/Spigot/Papermc。

二、服务端安装以及运行

请再次确保您有服务器的管理员权限,如果您使用的是Linux,请确保您有使用root用户的权限,或者您的用户有使用sudo指令的权限。否则,您可能无法使用接下来的教程。

1、创建非root用户以及安装必要的工具

(1)安装必要的开发工具

RH系的请在命令行中输入并运行以下命令

sudo yum install git
sudo yum group install "Development Tools"

Debian系的请在命令行输入

sudo apt install git -y
(2)创建Minecraft用户

基于对安全性的考虑,我并不建议您直接使用root用户或者使用root权限直接运行mc。所以我们需要一个无密码、不能通过ssh登录的普通用户来进行进一步操作。

请在命令行中输入并运行以下命令

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

然后你就可以正式开始进行下一步操作了

(3)安装Minecraft Server

在正式开始之前,请确保您已经安装好了Screen软件,这个软件可以使您在断开ssh连接后您创建的会话不被系统清理掉。

如果没有安装,请在命令行中输入并运行以下命令:

sudo yum install screen -y

Debian系请使用

sudo apt install screen -y

然后再进行下一步操作

首先需要切换到我们刚才创建的minecraft用户

请在命令行中输入并运行以下命令

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

所以我们将使用/opt/minecraft/server作为mc服务器的目录

请在命令行中输入并运行以下命令

cd ~/server

这样我们就切换进了/opt/minecraft/server目录

此时,您就可以选择您所需要的服务端类型/以及版本了。

这里以spigotmc为例:

wget https://api.papermc.io/v2/projects/paper/versions/1.19.3/builds/388/downloads/paper-1.19.3-388.jar

(此处的例子为paper-1.19.3,实际命令按您所需服务端的下载链接为准)

运行这段命令之后,wget就会为您下载这个名为paper-1.19.3-388.jar的文件,而这就是mc服务端文件。

为了方便理解,我们需要将这个文件重命名为mc.jar:

mv paper-1.19.3-388.jar mc.jar

到这一步,我们就可以开始准备一下mc服务端的启动脚本了

您可以选用您喜欢的文本编辑器,在这里的话我使用的是nano

如果您尚未安装nano,可以使用其他拥有sudo权限的用户输入

sudo yum install nano -y

进行安装

在nano的界面上,ctrl+o即为保存,ctrl+x即为退出nano

命令行中输入

nano start.sh

以编辑启动脚本

内容可以如下:

java -jar -Xmx4096M -Xms1024M mc.jar nogui

其中-Xmx后面跟的数字即为mc服务端可用的最大内存(单位为MB),-Xms后面跟的数字即为mc服务端可用的最小内存(单位为MB)。mc.jar即为您mc服务端的名称,nogui指的是无图形化界面,因为我们并没有安装桌面环境,所以不需要gui。

命令行中输入

chmod +x start.sh
./start.sh

即可启动服务端。

在第一次启动时可能会提示例如:

[14:33:44] [main/ERROR]: Failed to load properties from file: server.properties
[14:33:45] [main/WARN]: Failed to load eula.txt
[14:33: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中的false改为true即可。

(可以通过“nano eula.txt”使用nano进行修改)

然后在命令行中输入:

screen -S mc
./start.sh

您的服务器就开始运作啦!!!

按ctrl+a+d退出会话,使mc在后台运行,这时您断开ssh连接,服务端也不会被强制终止了。如果您想进入mc服务端后台的话,只需要再次输入

screen -r mc

就可以进入后台了。

三、服务器防火墙配置

出于安全性的考虑,我们并不建议您在使用mc时关闭防火墙。所以,您可能需要使用拥有sudo权限的用户对防火墙配置进行修改。

请先确保您现在建立ssh连接的端口已被防火墙放行,否则之后可能会出现无法连接服务器的问题。

请先检查防火墙服务是否处于开启状态。

请在命令行运行以下命令:

sudo systemctl status firewalld

以检查防火墙服务状态。

请确保firewalld服务处于running状态(指图的下半部分那样),如果和图中上半部分一样firewalld服务处于inactive状态,请在命令行输入并运行以下命令:

sudo systemctl start firewalld

此时,您服务器上的防火墙就已经启动了!

由于本文的教程是针对mc Java版的,而mc Java版所使用的默认端口是25565端口,tcp协议。

所以请在命令行输入并运行以下命令:

sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp
sudo firewall-cmd –reload

至此,玩家就可以通过您服务器的25565端口来连接进入您的服务器。

您和其他玩家就可以开心的玩耍啦!

关于Debian系的防火墙

建议是自己百度一下,因为我自己的机子都没装防火墙(

一般都是默认没有或者是用的ufw,可以在终端输入

sudo ufw allow 25565
sudo ufw reload

四、服务端进入后台以指令/备份

这里的话我就只讲述两种方法了。

当然,在进行下文的操作前,国际惯例:

su - minecraft
(1)使用screen直接进入后台(不能直接备份)

还记得我们之前安装的screen和输入的 screen -S mc吗?

现在他派上用场了!

在按照上文创建screen后并在内部启动了您的mc服务端之后,您可以在命令行输入

screen -r mc

就可以进入您的mc服务器的后台了!

(2)配置mc rcon连接后台,并基于linux的计划任务来进行备份

首先,我们需要安装mcrcon。

RCON是一个协议允许您连接到Minecraft服务器并执行命令。mcrcon是C语言构建的RCON客户端。我们将从GitHub下载源码并构建mcrcon二进制文件。首先使用cd命令切换到~/tools目录,然后使用以下命令从GitHub克隆Tiiffi/mcrcon仓库:

cd ~/tools && git clone https://github.com/Tiiffi/mcrcon.git

克隆仓库后,请导航到~/tools/mcrcon目录,使用GCC编译器构建mcrcon客户端:

cd ~/tools/mcrcon
gcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c

编译完成后,输入以下命令验证mcrcon是否安装成功。

./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

现在,您就可以通过输入:

/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password -t

来连接您的mc服务端后台并执行指令了

Logged in. Type "Q" to quit!
>

(记得把strong-password替换成你在server.properties里面设置的rcon-password)

此时,我们就可以创建一个用来备份的脚本了。

在命令行输入以下指令以创建脚本:

nano /opt/minecraft/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"

## 删除老旧备份
find /opt/minecraft/backups/ -type f -mtime +7 -name '*.gz' -delete

在命令行输入以下chmod命令使脚本可执行:

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

打开crontab文件,然后创建一个cronjob计划任务,它将在固定时间每天自动运行一次。

当然,时间也可以是不固定的,您也可以搜索crontab以实现更多用法。

crontab -e

我们每天都会在23:00运行备份脚本:

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

五、服务端设置

目前的话这个区域仅会展示server.properties的相关配置的翻译,其他的配置文件(例如spigot.yml,bukkit.yml等)请自行查阅,感谢理解。

(不要直接复制,复制的话记得把 # 以及 #后面的内容去掉)

#Minecraft server properties
#Sat Dec 31 22:16:49 CST 2022
allow-flight=false #是否允许复制
allow-nether=true #是否开启下界/地狱
broadcast-console-to-ops=true #是否向op广播控制台信息
broadcast-rcon-to-ops=true #是否向op广播rcon信息
debug=false #是否启用调试
difficulty=easy #难度
enable-command-block=false
 #是否启用命令方块
enable-jmx-monitoring=false #是否启用jmx监视 
enable-query=false #是否启用query查询(给gamespy4用)
enable-rcon=true #是否启用rcon连接
enable-status=true #是否向客户端发送服务器状态
enforce-secure-profile=true #是否开启安全配置(1.19.x特有内容,如果online-mode为true的话建议开启,但是聊天被举报可能封号)
enforce-whitelist=false #是否强制白名单
entity-broadcast-range-percentage=100 #不管
force-gamemode=false #是否强制设置玩家的游戏模式
function-permission-level=2 #指令权限等级
gamemode=survival #游戏模式
generate-structures=true #生产建筑
generator-settings={} #不管
hardcore=false #是否启用硬核模式
hide-online-players=false #隐藏正版玩家
level-name=world #加载的主世界的名字(默认world)
level-seed= #世界种子(仅在第一次生成世界时生效
level-type=minecraft\:normal #地图类型
max-chained-neighbor-updates=1000000
  #不管
max-players=20 #最大玩家数
max-tick-time=60000 #一个tick最长时间(单位ms,超过此时间会判定为服务器卡死,自动结束服务端)
max-world-size=29999984 #地图最大尺寸(不管
motd=A Minecraft Server #服务器描述
network-compression-threshold=256 #网络数据包大于该值是进行压缩
online-mode=true #是否启用正版验证
op-permission-level=4 #op权限等级
player-idle-timeout=0 #玩家允许挂机时间,0为无限制
prevent-proxy-connections=false #组织开启了代理(七根木棍)的玩家进入服务器
previews-chat=false #是否预览聊天
pvp=true #是否启用pvp
query.port=25565 #不管
rate-limit=0 
rcon.password=strong-password #rcon密码
rcon.port=25575 #rcon监听端口
require-resource-pack=false #是否启用服务器资源包
resource-pack= #服务器资源包
resource-pack-prompt=
resource-pack-sha1= #服务器资源包sha1值
server-ip= #mc服务端监听ip,不管
server-port=25565 #mc服务端监听的端口
simulation-distance=10 #模拟距离
spawn-animals=true #是否生成动物
spawn-monsters=true #是否生成怪物
spawn-npcs=true #是否生成npc
spawn-protection=16 #出生点保护格数设置
text-filtering-config= #文本过滤设置
use-native-transport=true #是否启用原生数据传输
view-distance=10 #视距
white-list=false #是否启用白名单

结语

感谢您的阅读。

本篇为如何搭建mc服务器? - BWMC社区的重制版。

如果您对本篇文章有更好的改进建议,

请在评论区留言或者发送邮件到 illusorynight@qq.com或kusu@kusu.moe

Spread the love
届ける言葉を今は育ててる
最后更新于 2023-02-09