CentOS 7 安装与配置 Minecraft Java 服务器(详细教程)

48次阅读
没有评论

适用范围:CentOS Linux 7.x(最常见为最小化安装 / 云服务器)。

CentOS 7 安装与配置 Minecraft Java 服务器(详细教程)

0. 你需要准备什么

  • 一台 CentOS 7 服务器(建议:2 核 4G 起步;多人/大型地图建议更高)
  • 能通过 SSH 登录(root 或具备 sudo 权限的用户)
  • 公网 IP(或内网环境可被客户端访问的 IP)
  • 你计划运行的 Minecraft 服务器版本:
    • Vanilla 官方服务端(本文默认)
    • 也可替换为 Paper/Spigot/Fabric/Forge(安装方式类似,替换 jar 即可)

1. 系统基础设置(可选但强烈建议)

1.1 更新系统与基础工具

sudo yum -y update
sudo yum -y install wget curl unzip vim

1.2 校时(避免证书/下载异常、日志时间错乱)

sudo yum -y install chrony
sudo systemctl enable --now chronyd
chronyc tracking

2. 安装 Java(推荐 OpenJDK 17 / 适配新版本 MC)

Minecraft 版本对 Java 版本有要求(大致规律):

  • 1.20+ 通常推荐 Java 17
  • 老版本(如 1.12)可能只支持 Java 8

2.1 安装 OpenJDK 17

sudo yum -y install java-17-openjdk java-17-openjdk-headless
java -version

如果你的 yum 源没有 OpenJDK 17(部分较老镜像会出现),建议先启用 EPEL 或使用更合适的源;或者安装 OpenJDK 11/8 并选择兼容的 Minecraft 版本。


3. 创建专用用户与目录(安全 + 可维护)

不要用 root 跑游戏服务器。

3.1 创建用户

sudo useradd -r -m -d /opt/minecraft -s /sbin/nologin minecraft

说明:

  • -r:系统用户
  • -m:创建家目录
  • -d /opt/minecraft:目录统一放在 /opt
  • -s /sbin/nologin:禁止交互登录(更安全)

3.2 创建服务器目录结构

sudo mkdir -p /opt/minecraft/server
sudo chown -R minecraft:minecraft /opt/minecraft

后续所有服务端文件都放在 /opt/minecraft/server


4. 下载 Minecraft Java 服务端(Vanilla)

官方服务端 jar 需要从 Mojang 官方渠道获取。

由于官方链接会随版本变化,且不同版本下载页结构可能调整,本文给出“通用做法”:
1)先在本地/浏览器找到目标版本的 server.jar 下载链接
2)再在服务器上用 wget/curl 下载

4.1 切换到 minecraft 用户工作目录

sudo -u minecraft -H bash
cd /opt/minecraft/server

4.2 下载 server.jar

将下面的 URL 替换成你要的版本的直链:

wget -O server.jar "https://example.com/path/to/minecraft_server.版本.jar"

下载后建议校验文件存在:

ls -lh

如果你计划使用 Paper/Spigot:

  • Paper:下载 paper-xxx.jar,然后命名为 server.jar(或在启动脚本里改 jar 名)

退出 minecraft 子 shell(可暂时不退,继续下一步也行):

exit

5. 首次启动:生成配置并接受 EULA

5.1 以 minecraft 用户执行一次启动

sudo -u minecraft -H bash -lc 'cd /opt/minecraft/server && java -Xms1G -Xmx2G -jar server.jar nogui'

首次启动会生成 eula.txt,然后提示你需要同意协议并退出。

5.2 接受 EULA

sudo -u minecraft -H bash -lc "cd /opt/minecraft/server && sed -i 's/eula=false/eula=true/' eula.txt"
cat /opt/minecraft/server/eula.txt

6. 配置 server.properties(常用项)

配置文件:/opt/minecraft/server/server.properties

编辑:

sudo -u minecraft -H vim /opt/minecraft/server/server.properties

常见配置建议:

  • server-port=25565:默认端口
  • motd=My CentOS7 Minecraft Server:服务器列表显示信息
  • max-players=20:最大人数
  • online-mode=true:正版验证(公网建议 true)
  • white-list=true:开启白名单(强烈建议公网开启)
  • difficulty=easy|normal|hard:难度
  • view-distance=8:视距(越大越吃内存/CPU)

白名单开启后,需在控制台添加玩家:

  • whitelist add 玩家名

你也可以先不启用白名单,确认能进服后再开启。


7. 配置防火墙与端口放行

Minecraft Java 默认使用 TCP 25565。

7.1 firewalld 放行端口

sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-port=25565/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

7.2 云厂商安全组

如果你在阿里云/腾讯云/华为云等:

  • 还需要在“安全组/防火墙规则”里放行 TCP 25565

8. 使用 systemd 管理:开机自启 + 统一日志

目标:像管理系统服务一样管理 MC:

  • systemctl start/stop/status minecraft
  • 服务器重启自动拉起
  • 日志走 journald(可 journalctl -u minecraft 查看)

8.1 创建启动脚本

创建:/opt/minecraft/server/start.sh

sudo tee /opt/minecraft/server/start.sh > /dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

cd /opt/minecraft/server

# 你可以按机器配置调节内存:
# -Xms:最小堆
# -Xmx:最大堆
# 一般建议 Xms 与 Xmx 相同,减少运行时扩容抖动。
JAVA_OPTS=(
  -Xms2G
  -Xmx2G
  -XX:+UseG1GC
  -XX:+ParallelRefProcEnabled
  -XX:MaxGCPauseMillis=200
  -XX:+UnlockExperimentalVMOptions
  -XX:+DisableExplicitGC
  -XX:+AlwaysPreTouch
)

exec java "${JAVA_OPTS[@]}" -jar server.jar nogui
EOF

sudo chmod +x /opt/minecraft/server/start.sh
sudo chown minecraft:minecraft /opt/minecraft/server/start.sh

内存建议:

  • 2G 机器:-Xmx1G-Xmx1536M
  • 4G 机器:-Xmx2G~-Xmx3G
  • 不要把所有内存都分给 Java,系统也需要缓存和基础服务内存。

8.2 创建 systemd 服务文件

创建:/etc/systemd/system/minecraft.service

sudo tee /etc/systemd/system/minecraft.service > /dev/null <<'EOF'
[Unit]
Description=Minecraft Java Server
After=network.target

[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/opt/minecraft/server/start.sh
Restart=on-failure
RestartSec=10

# 资源限制(可选)
LimitNOFILE=100000

# 安全加固(可选,若遇到权限/写入问题可先注释掉再排查)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
ReadWritePaths=/opt/minecraft/server

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now minecraft

8.3 查看状态与日志

sudo systemctl status minecraft --no-pager
sudo journalctl -u minecraft -f

9. 服务器控制台指令(常用)

通过 journalctl 只能看日志,不能交互输入指令。Vanilla 默认没有“可附着控制台”。常见做法有两种:

方案 A:使用 RCON(推荐:适合远程管理)

1)编辑 server.properties

  • enable-rcon=true
  • rcon.port=25575
  • rcon.password=强密码

2)防火墙:

  • 不要对公网开放 RCON 端口(除非你清楚自己在做什么)
  • 若必须用,建议只允许管理机 IP 访问,或通过内网/VPN

3)使用 rcon 客户端(本地电脑)连接执行命令。

方案 B:使用 screen/tmux 启动(简单可交互)

如果你更想“像本地一样输入指令”,可以不使用 systemd,改用 screen / tmux 常驻运行。不过它在开机自启、异常恢复上不如 systemd 规范。


10. 备份与升级(强烈建议)

10.1 关键备份内容

  • world/world_nether/world_the_end/(取决于版本/配置)
  • server.properties
  • whitelist.jsonops.jsonbanned-players.json

示例:手工打包备份

sudo -u minecraft -H bash -lc 'cd /opt/minecraft && tar -czf backup_$(date +%F).tar.gz server'
ls -lh /opt/minecraft/backup_*.tar.gz

10.2 升级服务端 jar

1)停服:

sudo systemctl stop minecraft

2)替换 /opt/minecraft/server/server.jar

3)开服:

sudo systemctl start minecraft

大版本升级前先备份,并阅读对应版本的变更说明。


11. 常见问题排查

11.1 客户端连不上(Connection timed out)

按顺序检查:

  • 服务器服务是否在跑:sudo systemctl status minecraft
  • 服务端是否监听端口:
    sudo ss -lntp | grep 25565
  • 防火墙是否放行:sudo firewall-cmd --list-ports
  • 云安全组是否放行 TCP 25565
  • server.propertiesserver-ip= 建议留空(绑定错误会导致不可达)

11.2 内存不足 / 卡顿 / 频繁 GC

  • 降低 view-distance
  • 降低 max-players
  • 调整 -Xmx,但不要超过物理内存的 60%~75%
  • 考虑使用 Paper 并做性能配置(如果你允许替换核心)

11.3 “You need to agree to the EULA”

确认 eula.txt 中为:eula=true

11.4 服务启动后马上退出

看日志:

sudo journalctl -u minecraft -n 200 --no-pager

常见原因:

  • jar 下载不完整
  • Java 版本不兼容
  • 内存参数过大导致 OOM

12. 一键快速检查清单(建议收藏)

  • Java:java -version
  • 服务状态:sudo systemctl status minecraft --no-pager
  • 实时日志:sudo journalctl -u minecraft -f
  • 端口监听:sudo ss -lntp | grep 25565
  • 防火墙:sudo firewall-cmd --list-ports

13. 可选增强(不影响基础运行)

  • 把世界目录定期备份到对象存储/另一台机器
  • 使用 RCON + 管理面板工具(注意安全)
  • 使用反向代理/加速不是必须(MC Java 主要走 TCP)

正文完
 0
评论(没有评论)

YanQS's Blog