ChrisKim
Do not go gentle into that good night.
颢天

从零开始使用云服务器搭建 Minecraft 服务器

视频

b 站在线观看:https://www.bilibili.com/video/BV1pa411G7zy

视频文件下载:https://www.aliyundrive.com/s/TNhChprmXWQ

视频与本文都采用 CC BY-NC-SA 4.0 许可,转载和二次创作请遵守该协议。请前往协议网站,或查看视频分享文件夹内的 LISENCE.txt 文件查看详细协议。

## 提问前请前往文章底部以及评论区,查看是否有相同问题已经被解答 ##

资料

P1 全套基本流程

① 服务器购买

② 远程登录服务器

Xshell 官网:https://www.xshell.com/zh/

③ 配置服务器环境

  1. 更新软件包列表:apt update
  2. 安装 Java 运行时环境:apt install openjdk-17-jre (数字即版本,可对照下表更改)
Minecraft 版本Java 版本
1.18 ~ 1.2017
1.1716
1.12 ~ 1.168+
1.11 以下8(再老则需要 7)
  1. 检查环境是否正常:java -version (若输出了安装的版本即正常)
  2. 安装 MCSManager:sudo wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup_cn.sh | sudo bash

官方 Gitee 仓库:https://gitee.com/mcsmanager/MCSManager
官方 GitHub 仓库:https://github.com/mcsmanager/MCSManager

  1. 启用 MCSManager 服务:systemctl enable mcsm-{daemon,web}.service
  2. 运行 MCSManager 服务:systemctl start mcsm-{daemon,web}.service
  3. 检查 MCSManager 服务状态:systemctl status mcsm-{daemon,web}.service(绿色即正常,按 q 退出页面)
  4. 放通防火墙:需要放通 23333 与 24444 端口(TCP 协议)
  5. 访问 MCSManager 面板:浏览器打开 http://<公网IP>:23333/

warning 请记住你设置的账号密码
从教程发出到现在一直有人询问忘记密码怎么办,面板是没有可视化重置功能的。在此提醒请记住你设置的账号密码,如果忘记请自行查阅官方文档使用指令进行重置。

④ 配置 Minecraft 服务端

  1. Minecraft 官方原版服务端:https://run.sh.cn/mcs
  2. 放通防火墙:需要放通 25565 端口(TCP 协议)

配置文件重点:

  • gamemode
    • survival – 生存
    • creative – 创造
    • adventure – 冒险
  • difficulty
    • peaceful – 和平
    • easy – 简单
    • normal – 中等
    • hard – 困难
  • max-players
    • 最大玩家数量
  • online-mode
    • true – 只有正版能进服
    • false – 无正版验证
  • white-list
    • true – 只有白名单玩家能进服
    • false – 任何玩家能进服

warning 自行负责服务器安全
从教程发出到现在一直有人反馈服务器被恶意攻击破坏,在此提醒服务器安全自行负责,遭到破坏我不提供任何协助。以下配置是高风险的:正版服务器不开启白名单、盗版服务器不安装任何登陆插件(盗版服务器白名单无意义).

⑤ 尝试连接服务器

开启游戏,添加多人服务器,服务器地址填写服务器的公网 IP。

P2 域名购买和解析

① 域名购买

阿里云域名购买:https://wanwang.aliyun.com/

新用户域名一般都非常便宜,后缀对使用没有影响,选择便宜的即可。

购买后可能需要实名认证,认证完成后就可以进行解析了。

② 域名解析

阿里云域名列表:https://dc.console.aliyun.com/#/domain-list/all

进入解析后,点击添加记录:

  • 记录类型:A
  • 主机记录:任意,若填写 @ 则代表无前缀
  • 解析线路:默认
  • 记录值:填写服务器公网 IP
  • TTL:默认 10 分钟,意思是解析记录修改后的生效时间

P3 Java 版 Mod 服

① 下载安装并测试 Forge

注:我的云盘只收集了主流版本的目前最新版,想要最新请前往官网。

启动脚本示例:java -Xms1G -Xmx4G -jar forge-1.12.2-14.23.5.2859.jar nogui

参数解释(请根据自身情况修改,不可复制示例):

  • -Xms*G:虚拟机最低内存 *GB,不是很重要,设置 1G 即可。
  • -Xmx*G:虚拟机最高内存 *GB,不能超过服务器内存上限,根据自己调整。
  • -jar *:指定需要启动的 jar 文件,后面接文件名。
  • nogui:指定不需要可视化界面。

② 上传 Forge 服务端到服务器并测试启动

(视频中 Java 版本的卸载与安装内容移至另一个专题来讲解)

没啥其他要说的

③ 下载安装并测试 Fabric

注:我的云盘只收集了主流版本的目前最新版,想要最新请前往官网。

④ 上传 Fabric 服务端到服务器并测试启动

没啥其他要说的

P4 基岩版服务器

① 下载基岩版服务端

官网:https://www.minecraft.net/en-us/download/server/bedrock

② 上传到服务器

启动命令填写:./bedrock_server

③ 赋予服务端执行权限

  1. 复制当前服务器的工作路径,下文用 <Directory> 表示
  2. 使用 Xshell 连接到服务器,进行下面的操作。
  3. 进入服务器目录:cd <Directory>
  4. 查看当前目录的文件:ll
  5. 给服务端赋予执行权限:chmod +x bedrock_server
  6. 查看当前目录的文件:ll,若服务端变绿即拥有执行权限

④ 运行服务器

点击开启实例,正常运行。

放通防火墙:需要放通 19132 端口(UDP 协议

⑤ 尝试连接服务器

开启游戏,添加多人服务器,服务器地址填写服务器的公网 IP,端口默认 19132

P5 切换服务器 Java 版本

① 卸载旧的版本

  1. 检查当前安装的版本:java -version
  2. 卸载当前版本:apt remove openjdk-17-jre(以 Java 17 为例)
  3. 清理残留依赖包:apt autoremove
  4. 检查是否完全卸载:java -version(若报错则卸载成功)

② 安装新的版本

  1. 安装新的版本:apt install openjdk-8-jre(以 Java 8 为例)
  2. 检查当前安装的版本:java -version

P6 开启交换分区

对于 Linux 系统,如果出现系统内存不足的情况,内核会启用 OOM Killer 选择进程将其杀死,这就是为什么有时候服崩了/面板崩了。

开启交换分区后,若系统内存紧张,内核将会把内存中不活动的内存页面写入交换分区(磁盘)从而释放内存空间,缓解内存压力。可以一定程度防止进程被杀死。

注意:交换分区只是妥协方式,磁盘 I/O 性能和内存是天壤之别,内存不足会导致严重卡顿。

创建文件

指令结尾数字即 SWAP 大小,2048 即 2GB,一般 2~4G 就够用了。

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

设置权限

sudo chmod 600 /swapfile

设置文件为交换分区

sudo mkswap /swapfile

启用交换分区

sudo swapon /swapfile

启用自动挂载

echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

检查状态

swapon -s

FAQ (常见问题)

1. Unable to access jarfile xxx.jar

压缩包多了一层,正确的压缩包结构根目录就是服务端文件,而不是多了一层文件夹。具体解释在视频 P3 的 11:53 处。

2. MCSM 安装脚本报错 / 脚本装不上 Node 环境

使用错了脚本版本,MCSM 面板英文网站脚本是国外节点版,中文网站是国内节点版,因此若在国内安装请用国内节点版(gitee.com 开头),否则大概率因为网络问题装不上。本文的脚本便是正确版本。

3. MCSM 安装脚本权限不足,报 Please execute the MCSManager installation command with root permission!

命令需要使用 sudo 管理员权限运行,同时改命令内含有管道运算符,| 前后为两条指令,都得加 sudo,示例:sudo wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup.sh | sudo bash

4. 包含 OutOfMemoryErrorJava heap space 等字样崩服(这种情况常出现在加载地图时爆内存)

内存溢出导致崩服,说明服务器配置不够了,得加钱升级配置了。当然,升级前先看下自己启动脚本写的对不对,-Xmx 参数是否充分利用了服务器内存,别出现 8G 服务器写个 -Xmx4G 这种低级错误。

5. apt install openjdk-7-jre 装不上 Java 7

Java 7 太过于古董,目前的 Ubuntu 软件包仓库已经将其剔除了。如果你真必须得用 Java 7,可以百度下 Ubuntu 安装 Java 7 的教程(因为确实很少情况用得上所以不打算录视频说)

6. 怎么给服务器装插件?

装插件必须使用插件服务端,原版、forge、fabric 均不是插件服务端,不能装插件,后两者只能装 mod!若要装插件,需要自己配插件服务端,也可以找找有没有插件端整合包。

7. 正版连不上 / 盗版连不上

若不关正版验证盗版肯定连不上!若开启正版验证正版连不上,并显示身份验证服务器正在停机维护 / 无效会话 等等错误,说明你游戏的正版账号掉线了,去启动器退出重登正版账号。

8. Xshell 连不上服务器

请确认自己服务器镜像是 Linux 而不是 Windows,不要出现自己装个 Windows Server 连不上 SSH 过来浪费我时间的情况。装错了的话去重置系统镜像。

9. 没有 apt 指令,报错 -bash: apt: command not found

请确认自己服务器镜像是 Ubuntu 20.04 而不是其他 Linux 发行版比如 CentOS 7. 装错了的话去重置系统镜像。

10. 面板安装时 GitHub 连接异常

官方不知何时更换了国内安装脚本的链接,因此需要使用新安装脚本:
sudo wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup_cn.sh | sudo bash

11. 每过一段时间 MC 服务器崩了 / 面板崩了打不开

系统内存严重不足,导致进程被 Linux 内核杀死。可以尝试启用 SWAP 分区,但是治标不治本。建议升级内存配置。

本文链接:https://www.zouht.com/2954.html
本文使用:CC BY-NC-SA 4.0 许可
# # #
首页      教程      从零开始使用云服务器搭建 Minecraft 服务器

发表回复

textsms
account_circle
email

  • Null

    你好 请问为什么我安装MCS的时候在 install node environment这一步卡住了啊

    2 年前 回复
    • ChrisKim博主

      @Null: 用 Gitee 的国内版脚本,就会选择国内镜像源,脚本在上文中有。

      2 年前 回复
  • Tearink

    你好,请问为什么我能创建服务器新地图但不能读取旧存档

    2 年前 回复
    • ChrisKim博主

      @Tearink: 具体问题是什么表现呢?

      2 年前 回复
      • Tearink

        @ChrisKim: 一般,加载到“[12:22:25] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld”时,过一段时间突然报错“Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “Server thread””

        2 年前 回复
        • ChrisKim博主

          @Tearink: 内存溢出了,说明配置不够,得升配

          2 年前 回复
          • Tearink

            @ChrisKim: 但我看我的服务器内存也没超啊

            2 年前
          • Tearink

            @ChrisKim: 好吧,看错了,超了,谢谢

            2 年前
          • Tearink

            @ChrisKim: 但是我的服务器内存是2g,它加载没超过1g啊,请问这个能调吗?

            2 年前
    • ChrisKim博主

      @Tearink: 修改 java 启动指令参数 -Xmx 即可,比如调成 -Xmx2G

      2 年前 回复
  • Cen_Jim

    请问如何使用种子创建世界?

    2 年前 回复
    • ChrisKim博主

      @Cen_Jim: 首先删掉现在的存档文件夹,然后在server.properties里面的seed参数上填写种子,再启动服务器新生成的地图就是这个种子了。

      2 年前 回复
  • CWHHH

    请问如何指定安装java8的小版本?openjdk-8-jre指令安装的是java8_352,但是跑不了我装的mod,要用java8_251。

    2 年前 回复
    • ChrisKim博主

      @CWHHH: 先用 sudo apt-cache madison [软件包名称] 查询当前软件包的所有版本,然后使用 sudo apt install [软件包名称]=[软件包版本] 安装特定版本的软件包。
      经过查询,目前 Ubuntu 20.04 软件包仓库 openjdk-8-jre 最旧版本为 8u252-b09-1ubuntu1,251 版本应该已经被删除了。你可以先试下 252 版本能不能用:
      sudo apt install openjdk-8-jre=8u252-b09-1ubuntu1

      2 年前 回复
      • CWHHH

        @ChrisKim: 感谢解答。不过我在服务器上查询不到该版本,我想自行上传安装包进行安装

        2 年前 回复
        • @CWHHH: 可以前往 https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 里面找到旧版本下载,具体操作方式可以查看我的旧版文字教程的第 6 节,也非常详细:https://www.zouht.com/2603.html

          2 年前 回复
          • CWHHH

            @ChrisKim: 感谢您的热心帮助,服务器已经成功开启。惭愧,我把两个整合包搞混了,这个包并不限制java8小版本,而是codechicken的问题,已经通过手动更新解决了。

            2 年前
  • KHA

    请问大佬原版1.19.2服务器出现
    Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “Server thread”

    Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “IO-Worker-3”

    Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “Worker-Main-1”

    Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “IO-Worker-2”
    这样怎么办呢
    之前还能玩突然游戏崩溃再重启就这样了

    2 年前 回复
  • 我想开一个1.19.2的mod服务器,但是看你的教程教的是1.12的版本,forge服务端下载的东西似乎有些不同,原本的服务端应该在最外面的目录,但是1.19.2的服务端放在里比较里面的目录,而且run.bat已经为我创建好了,所以在启动命令这里卡壳了,希望大佬能教教我

    2 年前 回复
  • KK

    楼主,我想问一下,新版forge的run.bat找不到或无法加载类@user_jvm_args.txt怎么办啊

    2 年前 回复
  • 我没有installer.log,咋办

    2 年前 回复
    • ChrisKim博主

      @鱼: 这有什么影响吗?

      2 年前 回复
      • @ChrisKim: 没问题了,好了,谢谢楼主!不过就是mod下载后直接放到mods文件夹里是吗?怎么在游戏界面查看有没有加mod成功?

        2 年前 回复
  • KK

    楼主您好,我按照您的教程开了mod服,但是加入mod之后显示需要forge,您知道这个如何安装吗?

    2 年前 回复
    • 夏令

      @KK: 教程中教你下载的就是forge,我推测你可能是在run.bat调用了原版的jar启动了服务器

      2 年前 回复
  • August

    请问这个咋解决?
    MCSManager 启动实例后显示这个 我已经安装了 Java 18

    [MCSMANAGER] [ERROR] 检测到实例进程/容器启动失败(PID 为空),其可能的原因是:
    1. 实例启动命令编写错误,请前往实例设置界面检查启动命令与参数。
    2. 系统主机环境不正确或缺少环境,如 Java 环境等。
    原生启动命令:
    java -jar server_1.19.2.jar
    仿真终端中转命令:
    程序:/opt/mcsmanager/daemon/lib/pty_linux_x64
    参数:[“-dir”,”/opt/mcsmanager/daemon/data/InstanceData/bc2d9bd1dc1f4537ae9e748304132837″,”-cmd”,”[\”java\”,\”-jar\”,\”server_1.19.2.jar\”]”,”-size”,”140,40″,”-color”,”-coder”,”UTF8″]
    请将此信息报告给管理员,技术人员或自行排查故障。
    如果您认为是面板仿真终端导致的问题,请在左侧终端设置中关闭“仿真终端”选项,我们将会采用原始输入输出流的方式监听程序。
    [MCSMANAGER] [Error] 实例启动失败,请检查启动命令,主机环境和配置文件等

    2 年前 回复
    • ChrisKim博主

      @August: 本地运行没有问题吗?

      2 年前 回复
      • August

        @ChrisKim: 什么在本地运行? 1.9 服务吗?

        2 年前 回复
        • @August: 嗯,本地测试服务器是否能正常启动。如果可以的话,你就对比下本地和云服务器上环境有啥区别。

          2 年前 回复
          • August

            @ChrisKim: 我选择的是那个 上传单个服务端软件 那个服务jer文件 点击没反应 我这个昨天还是可以正常跑的今天就不行了

            2 年前
          • August

            @ChrisKim: 我在B站私信你了,发了图片麻烦帮忙看一下 那个八月无雪就是我。

            2 年前
          • 奇怪的奈

            @ChrisKim: 同问 我的也是跳这两个原因

            2 年前
    • zstzst

      @August: 您好,我今天在安装基岩版的时候也遇到了同样的问题,请问您是如何解决的?

      2 年前 回复
      • 亦梦亦实

        @zstzst: 我也有一样的问题,没有解决,最后直接在服务器上手动输入命令把服务器起起来的,可以装screen,这样下次还能看到服务器启动的log界面

        2 年前 回复
        • zstzst

          @亦梦亦实: 您好我已经解决了,是要把启动命令改成下方的文件位置再加原本的启动命令(注意没有“.”只有“/”)

          2 年前 回复
          • 何曦辞

            @zstzst: 我今天也遇到了这个情况请问具体怎么解决

            2 年前
          • SF

            @zstzst: 您好,我今天也遇到这种情况了,想请问一下具体怎么解决

            2 年前
          • 58784

            @zstzst: 你好,我也遇到类似问题了 可以问一下具体怎么解决吗

            2 年前
          • 十三

            @zstzst: 我的也是这样1.18.2的

            2 年前
  • TTI

    upup 我想请问一下,从你的云盘中下载到的forge是一个压缩软件的格式,解压后没有找到安装的文件

    2 年前 回复
  • snorlax

    请问为什么我朋友联机进来后方块挖掉后没反应

    2 年前 回复
  • 灯灯

    我上传了一个java11的1.16.5整合包,在MCSManager开启实例时出现了这条,然后实例停止了,请问您能看出这是什么地方出现了问题吗?或者有我提供得不够细的地方还请您指出,非常谢谢!
    [22:29:05] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1050]: java.lang.NoSuchMethodError: ‘void sun.security.util.ManifestEntryVerifier.(java.util.jar.Manifest)’

    2 年前 回复
  • Rain

    你好,我想请问在配置服务端那一步上,上传服务端软件的Java在哪里啊,我用的官网的应该上传那个Java啊

    2 年前 回复
    • ChrisKim博主

      @Rain: 啥意思?你说的这句话我都读不懂

      2 年前 回复
    • 夏令

      @Rain: java的下载与安装全部在Ubuntu中通过输入命令来完成,而且up已经描述得很详细。

      2 年前 回复
  • SenLinQX

    你好,为什么我的zip文件它没有自动解压,并且在MCS里也解压不了?

    2 年前 回复
  • Meteor

    你好,请问一下我装完fabric以后,启动服务器的时候就会卡死是为什么呀

    2 年前 回复
    • ChrisKim博主

      @Meteor: 卡死?显示什么吗

      2 年前 回复
      • Meteor

        @ChrisKim: 就是在Preparing start region for dimension minecraft:overworld后不加载世界,然后整个实例白了动不了,显示一个加载的圈,停止实例、强制停止实例都无效

        2 年前 回复
  • Meteor

    博主,请问一下固定带宽1m够用吗,现在这个阿里云的新人优惠只有1m的

    2 年前 回复
  • Weak

    我的是Xshell找不到命令

    2 年前 回复
  • chunjiazz

    upup 出现这个怎么办This crash report has been saved to: /opt/mcsmanager/daemon/data/InstanceData/7c4fae8267304446a0dc75b4da776da9/./crash-reports/crash-2022-12-11_22.23.58-server.txt,b站已经私信三联

    2 年前 回复
  • kiwi

    从b站来的,这篇文章看来很受欢迎啊,很多人还是想开个自己的服务器 [脱单doge]

    2 年前 回复
  • ccao

    具体怎么配置插件服务器呢?

    2 年前 回复
  • ccao

    配置服务器的时候显示“在极短时间内推出,启动命令或者配置文件错误”。我是用您网页里的1.19.2上传的,是哪里不对呢?

    2 年前 回复
    • ccao

      @ccao: 没事了,同样是您给的网站上下载的1.19.2server,重新下了一个就又可以了,很玄学

      2 年前 回复
      • 陈安

        @ccao: 确实很玄学,到处找办法总算看见你这条,谢谢好哥们,我这边也是重新下一个就好了

        2 年前 回复
  • kiki

    启动时显示“无效的个人信息公钥签名”
    版本:1.19
    账号:littleskin和离线都不行
    启动器:pcl2

    2 年前 回复
    • kiki

      @kiki: 正版验证已关,用1.19.2和hmcl启动器试了,有时出现的是验证用户名失败
      请问是什么原因呀 谢谢博主

      2 年前 回复
      • ccao

        @kiki: 按理说正版验证关了不会出现验证用户名失败,但是我是没关的时候显示的验证用户名失败,关了之后内存貌似不够了,就没能再打开服了。

        2 年前 回复
  • ccao

    为什么它让我开正版验证啊?不开服务器就启动不了,开了我没买正版就进不去,离谱

    2 年前 回复
  • waiforain

    佬,能用一个云服务器同时开两个使用不同java版本的服务器吗,还有就是一个域名只能对应一个服务器吗,我同一个二级域名下分的两个三级域名如果不加端口号只能指向同一个服务器。能否做到两个三级域名在不额外输入端口号的情况下分别对应两个服务器呢(视频讲一个服务器讲的很完整,只是我这个内容有点超纲)

    2 年前 回复
    • ChrisKim博主

      @waiforain: 对于第一个问题,如果同时运行两个 Java 版本的话,我觉得最方便的方法就是不安装安装到系统环境了,直接把 Java 可执行文件丢到服务器文件夹里面,启动脚本就直接调用文件夹的 /bin/java,这么说有点抽象,正好之前给朋友用这种方法配了一个服务端过,就给你参考参考:https://cloud.chriskim.cn/s/Ke3Ul(链接 1 天有效,只可下载 5 次)

      解压后关注点是 jdk-18.0.2.1 文件夹和 run.bat 启动脚本的写法,就是在脚本中使用文件夹里的 Java 环境运行服务器。注意我用的这是 Windows 版本的 Java,如果你要上传服务器,需要去 Java 官网下载 Linux 版本的 Java 可执行文件。

      对于第二个问题,可以将不同的 Minecraft 服务器开不同的端口,再用 Nginx 反向代理到公网 25565 端口的一个域名。例如 A 服务器运行在本地端口 12345 上,B 服务器运行在本地端口 12346 上,通过 Nginx,将 aaa.sample.com:25565 反向代理到本地 12345 端口,将 bbb.sample.com:25565 反向代理到本地 12346 端口上即可。

      不过想实现这种操作你要对 Nginx 比较了解,况且服务器还没有装宝塔面板,你只能使用命令行的方式配置 Nginx,如果没有一定基础可能会比较困难。

      2 年前 回复
      • waiforain

        @ChrisKim: OKOK十分感谢,我参考参考

        2 年前 回复
      • Sherlott

        @ChrisKim: 大佬,我准备开的mod服务器需要一个较早版本的java8,于是我打算像这样把java可执行文件丢到服务器文件夹里,我下载了您分享的linux版本jdk1.8.0_291文件,并把它解压到服务器文件夹里了,我该怎样修改run.bat启动脚本,让他可以使用文件夹里的java环境呢?

        2 年前 回复
        • ChrisKim博主

          @Sherlott: 启动脚本的 java 改成你目录内 java 可执行程序的相对目录就行了,应该是 ./jdk1.8.0_291/bin/java

          2 年前 回复
          • Sherlott

            @ChrisKim: 谢谢大佬|・ω・`),不过我还是通过在系统手动安装低版本JAVA的方式解决了,以后要是开更多服务器也许会考虑这种方式

            2 年前

颢天

从零开始使用云服务器搭建 Minecraft 服务器
视频 b 站在线观看:https://www.bilibili.com/video/BV1pa411G7zy 视频文件下载:https://www.aliyundrive.com/s/TNhChprmXWQ 视频与本文都采用 CC BY-NC-SA 4.0 许…
扫描二维码继续阅读
2022-08-23