更多操作
小 (→下载使用第三方JDK) |
|||
(未显示2个用户的23个中间版本) | |||
第79行: | 第79行: | ||
=== 下载使用第三方JDK === | === 下载使用第三方JDK === | ||
''据说一些第三方JDK 比 OpenJDK 性能要好。'' | |||
请阅读:[https://docs.papermc.io/misc/java-install Papermc的java安装教程] | |||
1. | === 使用数据盘而不是系统盘 === | ||
''有些[[云服务商]]会把系统盘和数据盘分开,你希望把服务端存档放在数据盘上。'' | |||
1. 使用<code>fdisk -l</code>查看系统中所有磁盘信息。(用<code>lsblk</code>显示所有块设备信息也行) | |||
/* 这里省略掉一些 /dev/loop* 块 */ | |||
Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors | |||
Units: sectors of 1 * 512 = 512 bytes | |||
Sector size (logical/physical): 512 bytes / 512 bytes | |||
I/O size (minimum/optimal): 512 bytes / 512 bytes | |||
Disklabel type: gpt | |||
Disk identifier: 1446C59D-B388-4F17-9F44-E4B60CCC0FAC | |||
Device Start End Sectors Size Type | |||
/dev/vda1 2048 4095 2048 1M BIOS boot | |||
/dev/vda2 4096 2101247 2097152 1G Linux filesystem | |||
/dev/vda3 2101248 41940991 39839744 19G Linux filesystem | |||
Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors | |||
Units: sectors of 1 * 512 = 512 bytes | |||
Sector size (logical/physical): 512 bytes / 512 bytes | |||
I/O size (minimum/optimal): 512 bytes / 512 bytes | |||
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 18.102 GiB, 20396900352 bytes, 39837696 sectors | |||
Units: sectors of 1 * 512 = 512 bytes | |||
Sector size (logical/physical): 512 bytes / 512 bytes | |||
I/O size (minimum/optimal): 512 bytes / 512 bytes | |||
从这个示例输出上我们可以看出,/dev/vdb 是还没使用的数据盘,/dev/vda 是已挂载的数据盘。(接下来的教程将以 vdb 和 vda 做例子,实际使用时请以你的块设备名字(如/dev/sdb)为准。) | |||
2. 用 <code>cfdisk</code> 对 /dev/vdb 进行一个分区(下面是分区完毕的截图)。(和 <code>fdisk</code> 相比,有TUI,使用“方便”点) | |||
[[文件:Minecraft开服-cfdisk.png|边框|284x284像素]] | |||
3. | 3. 分区完毕。使用 <code>mkfs.ext4 /dev/vdb1</code>指令给这个分区创建一个[https://wiki.archlinuxcn.org/wiki/Ext4 Ext4文件系统]。 | ||
4. | 4. OK!现在你就可以把这个分区挂载到一个文件夹看看效果了。 | ||
<code>mkdir test</code> ''':新建一个test文件夹''' | |||
<code>mount /dev/vdb1 ./test</code> ''':挂载 /dev/vdb1 到 该目录下的 test 文件夹''' | |||
用 <code>lsblk</code> 看看挂载上没有: | |||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | |||
loop0 7:0 0 55M 1 loop /snap/core18/1880 | |||
loop1 7:1 0 55.7M 1 loop /snap/core18/2812 | |||
loop2 7:2 0 63.9M 1 loop /snap/core20/2105 | |||
loop3 7:3 0 71.3M 1 loop /snap/lxd/16099 | |||
loop4 7:4 0 91.9M 1 loop /snap/lxd/24061 | |||
loop5 7:5 0 29.9M 1 loop /snap/snapd/8542 | |||
sr0 11:0 1 364K 0 rom /mnt/cdrom | |||
vda 252:0 0 20G 0 disk | |||
├─vda1 252:1 0 1M 0 part | |||
├─vda2 252:2 0 1G 0 part /boot | |||
└─vda3 252:3 0 19G 0 part | |||
└─ubuntu--vg-ubuntu--lv 253:0 0 19G 0 lvm / | |||
vdb 252:16 0 20G 0 disk | |||
└─vdb1 252:17 0 20G 0 part /root/test | |||
vdb1 右边的 MOUNTPOINT 值不为空,而是<code>/root/test</code>,说明已经挂载上了。 | |||
<code>cd test</code> ''':转到 test 文件夹。''' | |||
目前 test 文件夹被 vdb1 挂载,所以你在 test 文件夹里面做的新建、删除等操作就是对 vdb1 设备的根目录下做的操作。 | |||
原 test 文件夹下内容会被“屏蔽”。 | |||
<code>ls test</code> ''':显示 test 文件夹下的内容。''' 由于 test 文件夹被 vdb1 挂载,所以这个指令实际上显示的是 vdb1 设备根目录下的内容。 | |||
<code>umount test</code> :'''把''' '''挂载在 test 文件夹下的文件系统 卸载掉。'''简单理解就是把 vdb1 卸载。这里不仅可以用 <code>umount test</code> 还能用 <code>umount /dev/vdb1</code>。 | |||
5. 测试完毕!不过 mount命令 挂载的vdb1,重启就失效了 。。。 | |||
好消息! 我们可以修改 <code>/etc/fstab</code> 文件,让系统在启动时把 vdb1 自动挂载上,避免重启就失效的问题。 | |||
用 <code>cfdisk /dev/vdb</code>指令获取<code>/dev/vdb</code>硬盘下的分区信息(包括文件系统UUID)。。 | |||
[[文件:Minecraft开服-cfdisk2.png|180x180像素]] | |||
<code>nano /etc/fstab</code> :用 <code>nano</code> 编辑器'''打开 <code>/etc/fstab</code> 这个文件''',这里也可以用你喜欢的编辑器如 vim。 | |||
<code>> | 向<code>/etc/fstab</code>添加下面一行,来让系统在启动时自动把 <code>[你分区文件系统的UUID]</code> 对应的文件系统挂载到<code>[你想要挂载到的目录]</code>。 | ||
UUID=[你分区文件系统的UUID] [你想要挂载到的目录] ext4 defaults 0 2 | |||
参见 https://wiki.archlinuxcn.org/wiki/Fstab<nowiki/>,了解<code>/etc/fstab</code>以及你添加的那行文字的含义。 | |||
</ | |||
* 用 MCSManager 的话,可以把实例的“工作目录”设定为 vdb1 挂载的文件夹,或者直接把 vdb1 挂载到实例当前正在使用的工作目录上 | |||
* 可以将defaults按需修改为其他值来获取一些性能提升,参见 https://wiki.archlinuxcn.org/wiki/Fstab#atime 参数 | |||
=== 以非root账户运行mc服务端 === | |||
mc服务端 或许还有未被发现的安全漏洞,服务端插件也可能存在 恶意代码/安全漏洞/后门。 | |||
以root账户运行 mc服务端 有可能导致主机上的其他业务(例如数据备份脚本)被入侵。 | |||
另见 [https://madelinemiller.dev/blog/root-minecraft-server/ Why you shouldn't run a Minecraft server as root]、[https://unix.stackexchange.com/questions/372850/how-to-run-command-as-different-user how-to-run-command-as-different-user] 、[https://wiki.archlinuxcn.org/wiki/Su su]。 | |||
<references /> | <references /> |
2024年7月27日 (六) 05:42的最新版本
开MC服指的是 建立Minecraft多人游戏服务的行为。
该条目旨在以简明、通俗易懂的方式讲解开MC服的多种常用方式。
想要开MC服,先拥有下列基本的“物资”。
- 一个可以稳定运行MC服务端软件的环境。
- 一个可以将你运行的MC服务端软件暴露在互联网(公网)上,方便你MC服未来的玩家们与其建立连接的网络环境。
其中,MC服务端软件负责模拟世界的运行,它还开放了一个通讯端口,监听来自玩家的连接请求。玩家与MC服务端软件建立连接后,MC服务端就会处理玩家发送的各种交互动作,并将世界状态实时更新到玩家客户端上。[1]
接下来为你讲述常用的多种开MC服的方式。
方法一:租用云服务器
这类物资(24x7稳定运行xx的环境、把你的MC服务端软件暴露在互联网上的网络环境)通常可以通过云服务商购得。
云服务商是指提供基于互联网的各种计算资源和服务的公司。它们允许个人、企业和组织通过网络访问和使用计算能力、存储空间以及其他服务,而无需在本地购买和维护硬件设备。云服务商通常提供多种服务,包括计算实例、存储、数据库、网络、人工智能服务等。[1]
1. 云服务器
我们可以把 "云服务器" 想象成一种在互联网上可租用的计算机。它不同于你的常规电脑,你无法实物接触到它,但是你可以通过互联网来控制和操作它。
云服务器也被称为 "虚拟私人服务器"(Virtual Private Server, VPS),它的操作方式类似于你家里或者办公室的电脑。你可以安装操作系统、运行应用程序、存储数据、在网络上访问等。
具体来说,云服务器有以下几个主要特点:
- 弹性资源: 你可以根据需要增加或减少云服务器的 (CPU, 内存, 磁盘存储)等资源,而不需要关闭或重装系统。
- 按需付费: 你只需要为你实际使用的资源付费,而不是所有资源。这种 "按需付费" 的价格模式使得云服务器成为一种非常高效且经济的解决方案。
- 可靠性和安全性: 由于云服务器是在数据中心中提供的,因此它们通常比传统的服务器更安全、更可靠。如果硬件发生故障,服务提供商通常会自动将你的云服务器迁移到其他硬件,以避免服务中断。
- 全球访问: 由于云服务器位于互联网上,因此无论你在世界的哪个角落,只要有互联网连接,你就可以访问并操作云服务器。
这些特点使云服务器成为网站托管、数据存储、数据分析、远程工作和学习、互联网应用开发等许多应用的理想选择。[1]
看完了GPT对云服务器的介绍,相信你对云服务器这个概念已经有不少了解了!!那么,对开MC服这个需求来讲,云服务器
- 不仅可以稳定地运行你的MC服务端软件,
- 它的 全球访问 的特点也可以让你MC服的玩家们轻松地访问你开的服!
[TODO]
相关链接 | MCSM面板管理软件介绍页 |
相关云服务商链接 | [TODO] |
2. 面板服
一些云服务商注意到了小白开MC服的需求,推出了所谓的面板服。
面板服基于云服务器,但是是预先为你调试配置好了。有些云服务商甚至还有按天付费的套餐,专门针对偶尔与朋友玩一次的这种需求的人。
一般购买面板服后,只需要进入管理网站,填入云服务商给你的账号和密码登录就能使用了,甚是方便。
相关云服务商链接 | 简幻欢长期免费开服 雨云 |
方法二:内网穿透
1. 使用家里的多余计算设备 + 内网穿透
就是把设备当上面的云服务器使了,但家里的网一般不能“将你运行的MC服务端软件暴露在互联网(公网)上”,所以需要内网穿透才能让你服务器的玩家访问到你的服务端。
特点 | 长期开服挺省钱 |
相关链接 | MCSM面板项目介绍页 |
相关内网穿透服务商链接 | Openfrp Sarufa Frp |
2.
[ToDO]
提示和技巧(Linux)
下载使用第三方JDK
据说一些第三方JDK 比 OpenJDK 性能要好。
请阅读:Papermc的java安装教程
使用数据盘而不是系统盘
有些云服务商会把系统盘和数据盘分开,你希望把服务端存档放在数据盘上。
1. 使用fdisk -l
查看系统中所有磁盘信息。(用lsblk
显示所有块设备信息也行)
/* 这里省略掉一些 /dev/loop* 块 */ Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 1446C59D-B388-4F17-9F44-E4B60CCC0FAC Device Start End Sectors Size Type /dev/vda1 2048 4095 2048 1M BIOS boot /dev/vda2 4096 2101247 2097152 1G Linux filesystem /dev/vda3 2101248 41940991 39839744 19G Linux filesystem Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 18.102 GiB, 20396900352 bytes, 39837696 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
从这个示例输出上我们可以看出,/dev/vdb 是还没使用的数据盘,/dev/vda 是已挂载的数据盘。(接下来的教程将以 vdb 和 vda 做例子,实际使用时请以你的块设备名字(如/dev/sdb)为准。)
2. 用 cfdisk
对 /dev/vdb 进行一个分区(下面是分区完毕的截图)。(和 fdisk
相比,有TUI,使用“方便”点)
3. 分区完毕。使用 mkfs.ext4 /dev/vdb1
指令给这个分区创建一个Ext4文件系统。
4. OK!现在你就可以把这个分区挂载到一个文件夹看看效果了。
mkdir test
:新建一个test文件夹
mount /dev/vdb1 ./test
:挂载 /dev/vdb1 到 该目录下的 test 文件夹
用 lsblk
看看挂载上没有:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 55M 1 loop /snap/core18/1880 loop1 7:1 0 55.7M 1 loop /snap/core18/2812 loop2 7:2 0 63.9M 1 loop /snap/core20/2105 loop3 7:3 0 71.3M 1 loop /snap/lxd/16099 loop4 7:4 0 91.9M 1 loop /snap/lxd/24061 loop5 7:5 0 29.9M 1 loop /snap/snapd/8542 sr0 11:0 1 364K 0 rom /mnt/cdrom vda 252:0 0 20G 0 disk ├─vda1 252:1 0 1M 0 part ├─vda2 252:2 0 1G 0 part /boot └─vda3 252:3 0 19G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 19G 0 lvm / vdb 252:16 0 20G 0 disk └─vdb1 252:17 0 20G 0 part /root/test
vdb1 右边的 MOUNTPOINT 值不为空,而是/root/test
,说明已经挂载上了。
cd test
:转到 test 文件夹。
目前 test 文件夹被 vdb1 挂载,所以你在 test 文件夹里面做的新建、删除等操作就是对 vdb1 设备的根目录下做的操作。
原 test 文件夹下内容会被“屏蔽”。
ls test
:显示 test 文件夹下的内容。 由于 test 文件夹被 vdb1 挂载,所以这个指令实际上显示的是 vdb1 设备根目录下的内容。
umount test
:把 挂载在 test 文件夹下的文件系统 卸载掉。简单理解就是把 vdb1 卸载。这里不仅可以用 umount test
还能用 umount /dev/vdb1
。
5. 测试完毕!不过 mount命令 挂载的vdb1,重启就失效了 。。。
好消息! 我们可以修改 /etc/fstab
文件,让系统在启动时把 vdb1 自动挂载上,避免重启就失效的问题。
用 cfdisk /dev/vdb
指令获取/dev/vdb
硬盘下的分区信息(包括文件系统UUID)。。
nano /etc/fstab
:用 nano
编辑器打开 /etc/fstab
这个文件,这里也可以用你喜欢的编辑器如 vim。
向/etc/fstab
添加下面一行,来让系统在启动时自动把 [你分区文件系统的UUID]
对应的文件系统挂载到[你想要挂载到的目录]
。
UUID=[你分区文件系统的UUID] [你想要挂载到的目录] ext4 defaults 0 2
参见 https://wiki.archlinuxcn.org/wiki/Fstab,了解/etc/fstab
以及你添加的那行文字的含义。
- 用 MCSManager 的话,可以把实例的“工作目录”设定为 vdb1 挂载的文件夹,或者直接把 vdb1 挂载到实例当前正在使用的工作目录上
- 可以将defaults按需修改为其他值来获取一些性能提升,参见 https://wiki.archlinuxcn.org/wiki/Fstab#atime+参数
以非root账户运行mc服务端
mc服务端 或许还有未被发现的安全漏洞,服务端插件也可能存在 恶意代码/安全漏洞/后门。
以root账户运行 mc服务端 有可能导致主机上的其他业务(例如数据备份脚本)被入侵。
另见 Why you shouldn't run a Minecraft server as root、how-to-run-command-as-different-user 、su。