少女祈祷中...

自己的服务器搭建时间也有一年了,在此记录一下搭建的过程,以防之后忘记。

  • 操作系统:Ubuntu 16.04 LTS
  • Minecraft版本:1.16.5
  • Java版本1.8

1.17以上mc需要java17及以上版本,部分1.13-1.16插件对于java也有特殊要求,请自行确定安装版本

安装java

由于Minecraft高版本特有的渣优化,渣机建议使用openj9的JVM,能降低内存的占用,但兼容性和稳定性可能会存在一定的问题
如果服务器质量较好,则建议选择hotspot的JVM,能提供更加稳定的服务

hotspot版本

由于openjdk默认使用hotspot,所以直接进行安装即可

1
sudo apt install openjdk-8-jdk

openj9版本

可以去IBM Semeru Runtime官网下载符合对应机器和系统的jre或jdk
https://developer.ibm.com/languages/java/semeru-runtimes/downloads/
如果下载速度较慢,可以选择清华镜像进行下载
https://mirrors.tuna.tsinghua.edu.cn/github-release/ibmruntimes/
本人下载的版本为
https://mirrors.tuna.tsinghua.edu.cn/github-release/ibmruntimes/semeru8-binaries/LatestRelease/ibm-semeru-open-jre_x64_linux_8u332b09_openj9-0.32.0.tar.gz
下载到的tar包解压后放入服务器任意位置,并记住bin文件夹下java对应的路径
本人的java文件路径为/var/jre/jdk8u332-b09-jre/bin/java
运行以下命令进行软连接,注意最后的路径为java文件的路径

1
sudo update-alternatives --install /usr/bin/java java /var/jre/jdk8u332-b09-jre/bin/java 200

运行成功提示

1
update-alternatives: using /var/jre/jdk8u332-b09-jre/bin/java to provide /usr/bin/java (java) in auto mode

运行以下命令测试java是否成功安装

1
java -version

如果出现了以下报错

1
2
root@Ubuntu:~# java -version
-bash: /usr/bin/java: Permission denied

此时说明解压后的文件没有运行权限,为文件增加权限

1
sudo chmod 755 -R /var/jre/jdk8u332-b09-jre

再次运行,如果出现了java版本则说明安装成功

1
2
3
4
5
6
7
root@Ubuntu:~# java -version
openjdk version "1.8.0_332"
IBM Semeru Runtime Open Edition (build 1.8.0_332-b09)
Eclipse OpenJ9 VM (build openj9-0.32.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20220422_370 (JIT enabled, AOT enabled)
OpenJ9 - 9a84ec34e
OMR - ab24b6666
JCL - 0b8b8af39a based on jdk8u332-b09)

安装git

运行如下命令

1
2
3
sudo apt-get update
sudo apt install git
git --version

如果出现了git版本则说明安装成功

1
2
root@Ubuntu:~# git --version
git version 2.7.4

构建spigot

由于log4j的漏洞存在,所以非常不建议使用2021-12月以前构建出的spigot服务器jar包
进入spigot官网下载BuildTools.jar
https://hub.spigotmc.org/jenkins/job/BuildTools/
运行如下代码进行构建

1
java -jar BuildTools.jar --rev 1.16.5

如果卡在如下环节,可以将手动进入该网站下载server.jar,重命名为minecraft_server.[对应版本号].jar后放在work文件夹下,并重新构建

1
Starting download of https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar

如果一切顺利,则构建成功后会显示如下信息,此时除了spigot-[对应版本号].jar外其他文件均可删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Spigot-API 1.16.5-R0.1-SNAPSHOT .................... SUCCESS [ 12.795 s]
[INFO] Spigot-Parent dev-SNAPSHOT ......................... SUCCESS [ 0.018 s]
[INFO] Spigot 1.16.5-R0.1-SNAPSHOT ........................ SUCCESS [ 46.675 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 59.643 s
[INFO] Finished at: 2022-07-01T12:59:46+08:00
[INFO] -----------------------------------------------------------------------
Success! Everything completed successfully. Copying final .jar files now.
Copying spigot-1.16.5-R0.1-SNAPSHOT.jar to /opt/test_spigot/./spigot-1.16.5.jar
- Saved as ./spigot-1.16.5.jar

服务器初始化

在jar包同级目录下新建start.sh文件,在文件内输入

1
java -Xmx[堆最大大小] -Xms[堆初始大小] -jar [构建出的jar包名字] nogui

关于启动参数的配置这里不再赘述,请根据自己的配置自行调节

为该文件增加权限后运行该文件

1
2
sudo chmod +x start.sh
./start.sh

第一次运行会显示如下错误

1
2
3
[13:06:00] [main/ERROR]: Failed to load properties from file: server.properties
[13:06:00] [main/WARN]: Failed to load eula.txt
[13:06:00] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info

此时可以发现同级目录下新增了许多文件。将eula.txt文件中最后一句eula=false修改为eula=true,并重新运行该文件

1
./start.sh

等待地图生成完毕,如果出现以下信息,则说明开服成功

1
[13:08:43] [Server thread/INFO]: Done (91.480s)! For help, type "help"

如果出现了以下警告信息

1
[13:08:48] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 5097ms or 101 ticks behind

则说明了服务器配置较差,开服初期tps较低,待地图加载完毕后tps将会恢复正常

安装screen

若使用ssh远程连接服务器,则在关闭连接后服务器也会自动关闭,此时需要screen让服务器能在后台持续运行
运行如下命令安装screen

1
sudo apt install screen

创建一个screen

1
screen -S [screen的名字]

在screen内部和之前一样运行sh文件进行开服,唯一不同的是当关闭连接后服务器将仍然在后台运行
重新进入该screen

1
screen -r [screen的名字]

后续的配置

bukkit.yml和spigot.yml多用于服务器调优,这里不再赘述

server.properties中几个重要的配置:

  • gamemode 游戏模式
  • difficulty 游戏难度
  • pvp 是否允许pvp
  • max-player 最大玩家数量
  • server-port 服务器端口
    • 如果是私服,不建议使用默认25565端口,防止有陌生人扫IP进入服务器
  • view-distance 服务器视距
    • 过大会造成玩家进入和重生时的卡顿,如果服务器带宽不足建议调整为6或者更低
  • online-mode 正版验证
    • 建议开启
  • motd 服务器简介