# Linux 搭建服务器


:::caution
确保你已经完成了 [**开始前的准备**](./1-1) 这个环节，并安装了合适的 JAVA 环境
:::

>根据不同核心，操作步骤略有不同，但整体非常相似。

## 安装服务端

:::note
不同核心对应的服务端安装逻辑一般相同，但 Neoforge/Forge 这两个核心与其他核心相比略有不同。
:::

下载服务端核心。

在官网选择好合适的版本后，右键并复制链接，使用 wget 进行下载。
```bash
wget 下载链接url
```

下载完成后你的目录下会出现 `xxxxx-xxx-xx.jar` 文件。

:::caution
下载得到的服务器核心一般是一个jar文件，运行命令时请将 `xxxxx-xxx-xx.jar` 替换为实际 jar 文件全称。
:::

创建一个目录，即文件夹，名称随意，如mc-server目录为例,创建后将 `xxxxx-xxx-xx.jar` 移动至新目录并进入该目录。

```bash
mkdir mc-server
mv xxxxx-xxx-xx.jar mc-server 
cd mc-server
```

使用如下命令安装并构建服务端根目录，以及加载协议文件。

### 对于 Paper 及其 Fabric/Spigot 等核心

```bash
java -jar paper-xxx-xx.jar nogui
```
>此命令表示运行jar可执行文件，`nogui` 表示无需图形化。

在安装完成后会输出。

```
[XX:XX:XX INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
```
此时会在服务端根目录生成一个 `eula.txt` 文件，终端输出表示需要你去同意协议，在eula.txt中了解更多信息。

### 对于 Neoforge/Forge 核心

```bash
java -jar neoforge-xx-xx-xx-installer.jar --install-server nogui
```
>此命令表示运行jar可执行文件，`nogui`表示无需图形化。


运行完成后会输出

```
The server installed successfully
You can delete this installer file now if you wish
```

接下来需要运行启动脚本去加载协议文件。

给予启动脚本执行权限，否则我们无法运行脚本。

```bash
sudo chmod 711 run.sh
```

随后运行以下命令来运行脚本。

```bash
./run.sh
```

:::note
Neoforge服务端下载会小概率因为网络原因出现错误，如果在服务端无法正常安装，可以选择在本地电脑进行安装然后上传到服务器，如果仍然无法成功安装，删掉本地服务端根目录除 `neoforge-xx-xx-xx-installer.jar` 以外的所有文件后，更换网络或使用热点重试（有些时候使用魔法报错比使用正常网络还快，这是我至今也搞不懂的，但是在我个人的环境中 **使用热点能很好地解决这一问题** ）
:::

## 配置服务端

使用vim编辑器同意协议,将末行的 `eula=false` 更改为 `eula=true` 如下

```vim
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Sat XXX XX XX:XX:XX CST XXXX
eula=true
```


编辑server.properties文件

该文件已经是预设好的，不需要额外配置即可正常使用，可以根据需求进行对某些配置进行设置此处仅展示一些简单的讲解

关于该文件的更多配置请参阅[**Minecraft Wiki-server.properties详解**](https://minecraft.fandom.com/zh/wiki/Server.properties#Java%E7%89%88_3)

```bash
vim server.properties
```

```properties
#Minecraft server properties
#Sat Jan 10 12:20:36 CST 2026

accepts-transfers=false
#允许通过 /transfer 命令使玩家服务器间传输。

allow-flight=false
#是否允许飞行，与玩家能否飞行无关，若关闭，当玩家在空中停留过久会被踢出服务器。

allow-nether
#服务器是否启用下界维度。

broadcast-console-to-ops=true
#是否向所有在线OP发送所执行命令的输出

broadcast-rcon-to-ops=true
#是否向所有在线OP发送通过RCON执行的命令的输出

bug-report-link=
#bug反馈链接

debug=false
#调试模式

difficulty=easy
#难度

enable-code-of-conduct=false

enable-jmx-monitoring=false

enable-query=false

enable-rcon=false
#允许服务端控制台远程连接

enable-status=true

enforce-secure-profile=true

enforce-whitelist=false

entity-broadcast-range-percentage=100

force-gamemode=false

function-permission-level=2

gamemode=survival

generate-structures=true

generator-settings={}

hardcore=false

hide-online-players=false
#隐藏在线玩家

initial-disabled-packs=

initial-enabled-packs=vanilla

level-name=world
#存档文件夹的名称

level-seed=
#地图种子

level-type=minecraft\:normal
#世界类型，normal 表示普通主世界类型。

log-ips=true

management-server-allowed-origins=

management-server-enabled=false

management-server-host=localhost

management-server-port=0

management-server-secret=0y7vj7nMWbxZz446HCR01sE3f8yiCgLI1yzoc7fh

management-server-tls-enabled=true

management-server-tls-keystore=

management-server-tls-keystore-password=

max-chained-neighbor-updates=1000000

max-players=20
#最大玩家数

max-tick-time=60000

max-world-size=29999984
#最大世界尺寸

motd=A Minecraft Server
#在多人游戏中显示的服务器副标题

network-compression-threshold=256

online-mode=true
#在线模式，若打开，则会进行正版验证，离线玩家将无法进入，如果有离线玩家，建议关闭

op-permission-level=4

pause-when-empty-seconds=-1

player-idle-timeout=0

prevent-proxy-connections=false

query.port=25565

rate-limit=0

rcon.password=
#rcon远程控制台密码

rcon.port=25575

region-file-compression=deflate

require-resource-pack=false

resource-pack=

resource-pack-id=

resource-pack-prompt=

resource-pack-sha1=

server-ip=
#服务器ip，建议留空

server-port=25565
#服务器端口号

simulation-distance=10

spawn-protection=16
#出生点保护范围

status-heartbeat-interval=0

sync-chunk-writes=true

text-filtering-config=

text-filtering-version=0

use-native-transport=true

view-distance=10
#视距

white-list=false
#是否开启白名单模式，开启后只有被添加到白名单的玩家才能加入服务器
```
>请记住端口号，你将通过端口号连接到服务器

## 运行服务端

配置完成后就可以开始开启服务器了，因为ssh远程会话的任务会随着会话关闭而结束，此时需要用到 `screen` 工具使我们的 MC 服务端在后台运行

>screen 是一个强大的后台会话管理工具，可以守护会话在后台运行，在你不需要的时候挂至后台，需要的时候进行重连继续管理。
>使用如下命令创建一个名为 server 的后台会话（你也可以在 -S 后指定自己想要的名称），创建后，会自动进入这个后台新会话。

```bash
screen -S server
```
>此处S要大写

### 对于 Paper 核心，在后台会话中运行

```bash
java -jar paper-xxx-xx.jar nogui
```

来启动服务器


### 对于 Neoforge/Forge 核心

```bash
./run.sh
```

出现以下输出则启动成功

```bash
[12:48:50 INFO]: Done (13.140s)! For help, type "help"
```

如果要临时离开 screen 后台会话，使用 `Ctrl+A 并松开，然后轻敲 D` 来临时离开会话

如果要重新进入这个后台对话，使用如下命令

```bash
screen -r server #此处填写你的会话名称
```

## 加入服务器

随后需要找到设备的公网ip，并确保 Minecraft 服务端端口对应的防火墙规则为开启，在你购买的云服务商控制台主页找到购买的云服务器，找到公网ip并复制，同时寻找安全组/防火墙等字眼，并前往该页面开启放通MC服务端端口对应的防火墙

此时进入与服务端版本相同的Minecraft客户端后，进入多人游戏，添加服务器，地址填写如下
```
你的公网ip:端口号
```
完成后随后即可看到在多人游戏中看到该服务器，此时Paper服务端已经搭建完成


<br/>
<br/>
<br/>

***<center>--- 由 柏茯灵_RsDline 编写 ---</center>***
