在VPS上搭建Minecraft服务器,从零开始的详细指南
卡尔云官网
www.kaeryun.com
在VPS(虚拟专用服务器)上搭建Minecraft服务器是一个既有趣又有挑战性的任务,如果你是Minecraft爱好者,或者想为团队创建一个独特的游戏环境,这篇文章将 guides you step by step through the process.
什么是VPS?
VPS,全称为虚拟专用服务器,是为个人或团队提供的虚拟化服务器资源,与共享服务器不同,VPS提供专有资源,适合运行高负载任务,如游戏服务器、虚拟机等,如果你对VPS不太熟悉,可以先了解一下它的优点:
- 安全性高:独立的物理服务器,防止其他用户干扰。
- 资源灵活:根据需求调整CPU、内存和存储。
- 稳定性好:运行稳定的服务器环境,适合游戏服务器。
- 成本效益:比物理服务器便宜,适合个人和小团队使用。
为什么选择VPS搭建Minecraft服务器?
虽然Minecraft可以在本地电脑上运行,但VPS有其独特的优势:
- 多人联机:支持多玩家同时联机,适合团队游戏。
- 自动保存:游戏数据自动保存,减少断联风险。
- 访问控制:可以设置访问权限,限制玩家的访问范围。
- 网络扩展:可以通过端口映射连接到外部网络,方便玩家访问。
搭建步骤
准备工作
在开始搭建之前,确保你有以下工具和软件:
- 操作系统:Windows、macOS或Linux。
- VPS提供商:如AWS、DigitalOcean、HostGator等。
- Minecraft Java Edition:确保安装了最新版本。
- 编辑器:如Notepad++(Windows)、Brackets(macOS/Linux)。
下载和安装Minecraft Java Edition
从Minecraft官方网站下载Java Edition:
- 下载完成后,解压到指定目录,如
/data/minecraft/
。
配置Java NPE
Minecraft需要Java NPE(Notation Public External)来运行,在/data/minecraft/config/
创建以下配置文件:
package org.bukkit.npe; import org.bukkit.npe.NPE; import org.bukkit.npe.NPEProvider; import org.bukkit.npe.NPEProviderBuilder; import java.io.File; import java.io.IOException; import java.util.Map; public class MinecraftNPE extends NPE { @Override public String getProvider() throws IOException { return MinecraftNPEProvider.class; } @Override public String getProviderName() throws IOException { return "minecraft.npe"; } @Override public String getName() throws IOException { return "minecraft"; } @Override public String getDescription() throws IOException { return "Minecraft"; } @Override public String getProviderVersion() throws IOException { return "1.18.0"; } @Override public String getProviderVendor() throws IOException { return "Minecraft"; } @Override public String getProviderVersionCode() throws IOException { return "20210709"; } @Override public String getProviderVendorCode() throws IOException { return "00000000"; } @Override public String getProviderVersionSupportCode() throws IOException { return "00000000"; } @Override public String getProviderVendorSupportCode() throws IOException { return "00000000"; } @Override public String getProviderVersionUpdateCode() throws IOException { return "00000000"; } @Override public String getProviderVendorUpdateCode() throws IOException { return "00000000"; } @Override public String getProviderVersionUpdateSupportCode() throws IOException { return "00000000"; } @Override public String getProviderVendorUpdateSupportCode() throws IOException { return "00000000"; } @Override public String getProviderVersionUpdateMajor() throws IOException { return "1"; } @Override public String getProviderVendorUpdateMajor() throws IOException { return "1"; } @Override public String getProviderVersionUpdateMinor() throws IOException { return "0"; } @Override public String getProviderVendorUpdateMinor() throws IOException { return "0"; } @Override public String getProviderVersionUpdatePatch() throws IOException { return "0"; } @Override public String getProviderVendorUpdatePatch() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuild() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuild() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateSupport() throws IOException { return "0"; } @Override public String getProviderVersionUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } @Override public String getProviderVendorUpdateBuildUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdateUpdate() throws IOException { return "0"; } }
启动Minecraft NPE
在VPS上启动Minecraft NPE:
java -jar /data/minecraft/minecraft-1.18.0-amd64-jar-without-sourceforge.jar
设置端口映射(可选)
如果你希望Minecraft在外部访问,可以设置端口映射:
sudo service network-manager start sudo network-manager network add interface=eth0 protocol=TCP source=0.0.0.0/8 destination=127.0.0.1:25567 sudo network-manager interface=eth0 bind
设置防火墙规则(可选)
为了限制外网访问,可以设置防火墙规则:
sudo service network-manager restart sudo network-manager firewall add rule source=0.0.0.0/8 destination=0.0.0.0/0 protocol=TCP and IPTABLES==0 priority=200 sudo network-manager firewall rule add source=0.0.0.0/8 destination=0.0.0.0/0 protocol=TCP and IPTABLES==0 priority=200 action=ACCEPT sudo network-manager firewall rule add source=127.0.0.1:25567 destination=0.0.0.0/0 protocol=TCP and IPTABLES==0 priority=200 action=ACCEPT
验证配置
确保NPE配置正确,可以打开Minecraft客户端,检查游戏是否能启动。
注意事项
- 权限管理:确保VPS拥有足够的权限,防止其他用户干扰。
- 网络设置:确保网络设置正确,防火墙规则适当。
- 资源分配:根据需求调整VPS的资源,确保游戏运行流畅。
通过以上步骤,你就可以在VPS上成功搭建一个Minecraft服务器了,希望这篇指南能帮助你顺利上手!
卡尔云官网
www.kaeryun.com