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

  • 操作系统: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,所以直接进行安装即可

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 文件的路径

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

运行成功提示

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

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

java -version

如果出现了以下报错

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

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

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

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

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

运行如下命令

sudo apt-get update
sudo apt install git
git --version

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

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/
运行如下代码进行构建

java -jar BuildTools.jar --rev 1.16.5

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

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

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

[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 文件,在文件内输入

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

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

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

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

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

[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 ,并重新运行该文件

./start.sh

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

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

如果出现了以下警告信息

[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

sudo apt install screen

创建一个 screen

screen -S [screen的名字]

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

screen -r [screen的名字]

# 后续的配置

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

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

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