构建理想的 Minecraft 服务器总是不太方便:云主机 VPS 虽然使用方便,但是高配置的机器部署成本通常不低;而本地机器的配置通常足够,但是没有公网 IP,而利用一些现成的内网穿透服务,或者公网 IPv6 等手段,又有各种麻烦的限制。所以我打算利用现有的 VPS 配合一台闲置旧机器,构建一个新的 Minecraft 服务器。
下载配置 frp
工具,这里使用 0.33 版本;
注:frp
最新版本目前是 0.53.2 版,配置文件格式略有不同,而且 release 包中没有现成的 service 文件,不太方便构建 systemctl
自启动服务;
1# 安装路径 /opt/
2cd /opt/
3
4# 下载 frp 工具
5wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
6
7# 解压 frp
8tar -zxvf frp_0.33.0_linux_amd64.tar.gz
9
10# 打开配置文件 frps.ini
11vim frps.ini
修改配置文件 frps.ini
为如下内容:
1[common]
2# frp监听的端口,默认是7000,可以改成其他的
3bind_port = 7000
4# 授权码,这个token之后在客户端会用到
5token = 123456
6
7# frp管理后台端口,请按自己需求更改
8dashboard_port = 7500
9# frp管理后台用户名和密码,请改成自己的
10dashboard_user = admin
11dashboard_pwd = admin
12enable_prometheus = true
13
14# frp日志配置
15log_file = /var/log/frps.log
16log_level = info
17log_max_days = 3
可以先执行一次 frps
服务,若执行成功说明配置无误;
1./frps -c ./frps.ini
设置 frps
服务自启动
1sudo mkdir -p /etc/frp
2sudo cp frps.ini /etc/frp
3sudo cp frps /usr/bin
4sudo cp systemd/frps.service /usr/lib/systemd/system/
5sudo systemctl enable frps
6sudo systemctl start frps
开放防火墙端口,我这里使用 ufw
管理本地防火墙,另外 VPS 端的安全组管理也要打开相应的端口;
1# 开启 frps 等端口
2# 7000 为通信端口,7500 为控制台端口
3ufw allow 7000/tcp
4ufw allow 7500/tcp
在浏览器端输入 http://your_ip:7500
可以查看 frp
服务端的连接状态,如果一切正常,说明服务端已经正常开启。
同样的,在本地机器端下载相同的 frp
工具;
1# 安装路径 /opt/
2cd /opt/
3
4# 下载 frp 工具
5wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
6
7# 解压 frp
8tar -zxvf frp_0.33.0_linux_amd64.tar.gz
9cd frp_0.33.0_linux_amd64
10
11# 打开配置文件 frps.ini
12vim frps.ini
修改配置文件 frpc.ini
为如下内容:
1# 客户端配置,其中
2# server_addr 修改为你的云主机端IP
3# token 修改为与你的云主机端 token 相同
4[common]
5server_addr = <your_ip>
6server_port = 7000
7token = 123456
8
9# 配置ssh服务,方便远程登陆
10# remote_port 为自定义的 ssh 端口,避免与云主机本身的 ssh 服务端口冲突
11[ssh]
12type = tcp
13local_ip = 127.0.0.1
14local_port = 22
15remote_port = 6022
16
17# 配置 Minecraft 服务
18# 端口 25565 为默认 MC 端口服务号
19[minecraft]
20type = tcp
21local_ip = 127.0.0.1
22local_port = 25565
23remote_port = 25565
可以先执行一次 frpc
服务,若执行成功说明配置无误;
1./frpc -c ./frpc.ini
设置 frpc
服务自启动
1sudo mkdir -p /etc/frp
2sudo cp frpc.ini /etc/frp
3sudo cp frpc /usr/bin
4sudo cp systemd/frpc.service /usr/lib/systemd/system/
5sudo systemctl enable frpc
6sudo systemctl start frpc
开放ufw
防火墙端口;
1# 开启 ssh, frpc, mc 等端口
2ufw allow 21/tcp
3ufw allow 22/tcp
4ufw allow 7000/tcp
5ufw allow 6022/tcp
6ufw allow 25565/tcp
此时查看 frp
服务端,可以看到Client Counts
和Current Connections
增加了两个连接,一个是 ssh
服务,一个是 mc 服务,都已经准备就绪了。
1Minecraft 服务端有很多版本,除了官方服务端之外,还有很多适配不同插件和模组的版本,这里我选择 Mohist 服务端最新的 1.20.2 版本,既可以兼容原版生存,也能在未来方便的扩充各种模组;
官方服务端:https://mcversions.net/
Mohist 服务端:https://new.mohistmc.com/downloadSoftware?project=mohist&projectVersion=1.20.2
服务端配置主要在本地机器进行,VPS 端只需要做一些简单设置即可。
Minecraft 服务端依赖 Java 环境运行,所以如果本地机器没有,则需要安装 Java 环境,安装方法比较简单,不多赘述;
1# 安装 Java
2sudo apt update
3sudo apt install openjdk-17-jdk
1# 安装路径 /opt/minecraft/mohist-1.20.2
2mkdir -p /opt/minecraft/mohist-1.20.2
3cd /opt/minecraft/mohist-1.20.2
4
5# 下载 mohist 1.20.2 服务端
6# 如果下载失败,请进入官网下载后,通过 sftp 传输
7wget https://mohistmc.com/api/v2/projects/mohist/1.20.2/builds/128/mohist-1.20.2-128-server.jar
8
9# 下载完成后,可以直接启动服务端
10java -jar -Xmx4G mohist-1.20.2-128-server.jar
第一次启动服务端,需要确认同意 EULA 协议,此时服务端会自动下载、生成配置文件、世界地图等文件,需要一定的时间;
另外针对服务器的各种详细配置,主要通过修改 server.properties
文件实现,这里就简单做一些基础修改,详细配置方法不再赘述;
1# 修改服务器配置文件
2vim server.properties
3
4# 修改 server.properties 的内容
5# 关闭正版验证
6online-mode=false
7
8# 设置白名单
9white-list=true
为了方便启动和管理,我们需要设置一个 shell 脚本,这里我利用 screen
来控制服务端的后台运行和管理,方便随时在 ssh
中随时切入查看;
1# 构建服务端启动脚本
2vim start_server.sh
编辑 shell 脚本内容如下:
1#!/bin/bash
2
3# 检查名为 "mc" 的 screen 会话是否存在
4if screen -list | grep -q "\.mc"; then
5 # 如果存在,则发送停止命令到 Minecraft 服务器
6 screen -S mc -X stuff "stop $(printf '\r')"
7 sleep 7 # 等待服务器停止,根据需要调整等待时间
8
9 # 等待 5 秒钟后,杀死可能未正常停止的服务器进程
10 screen -S mc -X quit
11fi
12
13# 创建一个名为 "mc" 的新 screen 会话,并在其中启动 Minecraft 服务器
14screen -S mc -d -m java -jar -Xmx4G mohist-1.20.2-128-server.jar
该脚本会自动判断当前是否存在名为 mc
的屏幕会话,若不存在,则会新建名为mc
的虚拟屏幕,然后在这个屏幕中,启动服务端;若mc
会话已存在,则会重启这个服务端;
screen
控制后台的方式很简单:
1# 恢复 mc 会话
2screen -r mc
3
4# 退出当前会话
5# 按下 Ctrl + A 然后按下 D 键来将 screen 会话放入后台运行
最后可以利用 systemctl
将启动脚本文件,加入开机自启动,方便管理;
1# 使用文本编辑器创建一个 .service 文件
2sudo vim /etc/systemd/system/minecraft.service
将以下内容粘贴到该文件中:
1[Unit]
2Description=Minecraft Server
3After=network.target
4
5[Service]
6WorkingDirectory=/opt/minecraft/mohist-1.20.2
7ExecStart=/bin/bash start_server.sh
8ExecReload=/bin/bash start_server.sh
9Restart=on-failure
10
11[Install]
12WantedBy=multi-user.target
然后重新启动 systemd
服务
1sudo systemctl daemon-reload
2sudo systemctl enable minecraft.service
3sudo systemctl start minecraft.service
好了,至此整个 Minecraft 服务器的搭建工作已经完成,此时服务端已经一切准备就绪了,可以下载客户端连接服务器了;
HCML 启动器:https://hmcl.huangyuhui.net/download/
选择 1.20.2 版本下载安装
启动客户端,选择多人游戏,添加服务器,输入服务器名称,地址填写 VPS 的 IP 或者域名,如果自定义了端口号,则添加端口号
点击“加入服务器”,一切顺利的话,恭喜,这就算成功开服了。