Linux搭建minecraft伺服器
本篇文章介紹使用常規方式和docker容器方式在linux作業系統上搭建最新版本的minecraft伺服器,並使用bungeecord配置為群組伺服器模式。
Minecraft簡介
官方網站:https://minecraft.net
minecraft是什麼?
搭建環境介紹
1.作業系統版本
本次搭建使用CentOS7.5版本的linux作業系統,版本資訊如下:
# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
2.伺服器配置
本次搭建使用一臺阿里雲ECS伺服器,配置如下:
3.放通服務端通訊埠
訪問minecraft服務端時,預設連線25565埠(可自定義),這裡使用預設埠,因此防火牆需要放通該埠:
- Linux關閉防火牆或者放通25565埠
- 阿里雲伺服器配置安全規則,放通25565埠
關閉linux的firewalld防火牆
[root@willcentos ~]# systemctl stop firewalld && systemctl disable firewalld
關閉linux的selinux
[root@willcentos ~]# vim /etc/selinux/config
SELINUX= disabled #改為disabled
[root@willcentos ~]# setenforce 0
setenforce: SELinux is disabled
阿里雲主機放通25565埠:
4.本次搭建服務端整體結構:
BC代理端和所有子服全部執行在一臺伺服器上,邏輯結構如下圖:
常規方式搭建minecraft伺服器
這裡介紹在centos7.5系統上直接安裝mc服務端,並配置為跨服群組伺服器:
1.首先安裝java並建立服務端安裝目錄
mc服務端是一個jar檔案,執行mc服務端需要java環境支援。在/opt目錄下建立3個目錄mcowrld1、mcworld2和bungeecord,分別存放mc服務端和bungeecord的資料:
#安裝java
[root@willcentos ~]# yum install -y java
#建立服務端安裝目錄
[root@willcentos ~]# mkdir -p /opt/{mcworld1,mcworld2,bungeecord}
#檢視建立的目錄
[root@willcentos ~]# ll /opt/
total 16
drwxr-xr-x 2 root root 4096 Nov 27 13:48 bungeecord
drwx--x--x 4 root root 4096 Nov 13 10:25 containerd
drwxr-xr-x 2 root root 4096 Nov 27 13:48 mcworld1
drwxr-xr-x 2 root root 4096 Nov 27 13:48 mcworld2
2.下載mc服務端jar包
MC服務端核心分為官方版本和其他版本,下面列出部分服務端下載連結:
- 官方服務端:https://minecraft.net/zh-hans/download/server/
- 官方服務端:https://mcversions.net/
- papermc服務端:https://papermc.io/downloads
- spigot服務端:https://hub.spigotmc.org/jenkins/job/BuildTools/
- sponge服務端:https://www.spongepowered.org/
- bungeecord代理端:https://ci.md-5.net/job/BungeeCord/
下載papermc,由於要搭建bg群組伺服器,這裡使用papermc服務端,訪問papermc官網,點選下圖紅色區域直接下載,或者右鍵獲取下載連結:
下載bungeecord,選擇紅色區域所有檔案下載,或者右鍵獲取下載連結:
這裡在官網獲取下載連結,直接下載到linux對應目錄下:
#下載papermc服務端
wget -P /opt/mcworld1 https://papermc.io/ci/job/Paper-1.13/469/artifact/paperclip-469.jar
wget -P /opt/mcworld2 https://papermc.io/ci/job/Paper-1.13/469/artifact/paperclip-469.jar
#下載bungeecord代理端
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/module/cmd-alert/target/cmd_alert.jar
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/module/cmd-find/target/cmd_find.jar
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/module/cmd-list/target/cmd_list.jar
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/module/cmd-send/target/cmd_send.jar
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/module/cmd-server/target/cmd_server.jar
wget -P /opt/bungeecord/ https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/module/reconnect-yaml/target/reconnect_yaml.jar
檢視對應目錄下載的檔案:
[root@willcentos ~]# ll /opt/mcworld1/
total 42420
-rw-r--r-- 1 root root 43435563 Nov 28 12:23 paperclip-469.jar
[root@willcentos ~]# ll /opt/mcworld2/
total 42420
-rw-r--r-- 1 root root 43435563 Nov 28 12:23 paperclip-469.jar
[root@willcentos ~]# ll /opt/bungeecord/
total 10108
-rw-r--r-- 1 root root 10297582 Nov 24 06:26 BungeeCord.jar
-rw-r--r-- 1 root root 5899 Nov 24 06:26 cmd_alert.jar
-rw-r--r-- 1 root root 4151 Nov 24 06:26 cmd_find.jar
-rw-r--r-- 1 root root 4629 Nov 24 06:26 cmd_list.jar
-rw-r--r-- 1 root root 5579 Nov 24 06:26 cmd_send.jar
-rw-r--r-- 1 root root 7525 Nov 24 06:26 cmd_server.jar
-rw-r--r-- 1 root root 6149 Nov 24 06:27 reconnect_yaml.jar
[root@willcentos ~]#
3.啟動mc伺服器端和代理
啟動命令格式:
# java -Xms**m -Xmx**m -jar [path]/minecraft_server.[version].jar nogui
# 1.13.2版本啟動命令
# java -Xmx1024M -Xms1024M -jar minecraft_server.1.13.2.jar nogui
-Xms:初始啟動分配的記憶體(-Xms1024m)
-Xmx:最大分配的記憶體(-Xmx2048m)
nogui:用於以基於文字的介面來顯示,可減少記憶體使用。如果使用圖形化介面,移除nogui選項。
同意終端使用者許可協議 EULA
首次啟動不會成功啟動,會生成一個eula.txt 檔案。用vim開啟,將行 eula = false 更改為 eula = true,並儲存檔案,表示同意許可協議。
# sed -i 's/eula=false/eula=true/g' eula.txt
第二章 安裝Docker
官方參考連結:https://docs.docker.com/install/linux/docker-ce/centos/
1.安裝必要的軟體包
# yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2.配置Docker yum源
這裡使用國內阿里雲Yum源:
# yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安裝Docker CE最新版本
# yum install docker-ce -y
4.檢視docker版本,確認安裝成功
# docker --version
Docker version 18.06.1-ce, build e68fc7a
5.啟動Docker服務並設為開機啟動
# systemctl start docker.service && systemctl enable docker.service
6.安裝docker-compose工具
docker-compose負責實現對 Docker 容器叢集的快速編排,它允許使用者通過一個單獨的 docker-compose.yml 模板檔案來定義一組相關聯的應用容器為一個專案.
#安裝epel源
# yum install -y epel-release
#安裝docker-compose
# yum install -y docker-compose
第三章 安裝MC服務端
這裡僅做測試,基於容器方式執行以下三個容器:
- mcworld1
- mcworld2
- mcbungeecord
說明:
- mcworld1和mcworld2是minecraft的兩個服務端,也即兩個子服,mcbungeecord為服務端代理軟體。
- 使用的容器映象為dockerhub映象:
https://hub.docker.com/r/itzg/minecraft-server/
https://hub.docker.com/r/itzg/bungeecord/ - 安裝的服務端版本為PaperSpigot 1.13.2。
1.執行mcworld1服務端容器:
docker run -d -e EULA=TRUE \
-v /mcworld1_data:/data \
-e TYPE=PAPER \
-e VERSION=1.13.2 \
-e OPS=willminec \
-e ONLINE_MODE=FALSE \
-p 25566:25565 \
--restart always \
--name mcworld1 \
itzg/minecraft-server --noconsole
2.執行mcworld2服務端容器:
docker run -d -e EULA=TRUE \
-v /mcworld2_data:/data \
-e TYPE=PAPER \
-e VERSION=1.13.2 \
-e OPS=willminec \
-e ONLINE_MODE=FALSE \
-p 25567:25565 \
--restart always \
--name mcworld2 \
itzg/minecraft-server --noconsole
3.執行mcbungeecord容器:
docker run -d -v /mcbg_data:/server \
-p 25565:25577 \
--name mcbungeecord \
--restart always \
itzg/bungeecord
4.使用docker-compose執行容器(可選)
我們也可以使用docker-compose來一次執行多個容器,這裡已經提前安裝了docker-compose,下面我們將執行3個容器的命令寫入yml檔案並使用docker-compose執行。
在/root目錄下建立docker-compose.yml檔案,配置如下內容:
[root@willcentos ~]# vim docker-compose.yml
version: '2'
services:
mcworld1:
image: itzg/minecraft-server
ports:
- 25566:25565
volumes:
- /mcworld1_data:/data
environment:
- EULA=true
- TYPE=PAPER
- VERSION=1.13.2
- OPS=willminec
- ONLINE_MODE=FALSE
container_name: mcworld1
tty: true
stdin_open: true
restart: always
mcworld2:
image: itzg/minecraft-server
ports:
- 25567:25565
volumes:
- /mcworld2_data:/data
environment:
- EULA=true
- TYPE=PAPER
- VERSION=1.13.2
- OPS=willminec
- ONLINE_MODE=FALSE
container_name: mcworld2
tty: true
stdin_open: true
restart: always
mcbg:
image: itzg/bungeecord
ports:
- 25565:25577
volumes:
- /mcbg_data:/server
links:
- mcworld1
- mcworld2
container_name: mcbungeecord
restart: always
執行docker-compose檔案,執行容器:
[root@willcentos ~]# docker-compose up -d
執行效果與前三步執行3個容器一樣。
5.檢視下載的容器映象:
[root@willcentos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
itzg/minecraft-server latest c6a0d0b8e7e5 4 weeks ago 309MB
itzg/bungeecord latest e9aff248403a 6 months ago 86.5MB
6.檢視容器執行狀態:
STATUS列全部為UP(healthy)說明容器已經正常執行
[root@willcentos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b73c30462d8d itzg/bungeecord "/usr/bin/run-bungee…" 7 minutes ago Up 7 minutes 0.0.0.0:25565->25577/tcp mcbungeecord
bea699ee3242 itzg/minecraft-server "/start" 7 minutes ago Up 7 minutes (healthy) 25575/tcp, 0.0.0.0:25567->25565/tcp mcworld2
7c3cd9e03326 itzg/minecraft-server "/start" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:25566->25565/tcp, 25575/tcp mcworld1
7.檢視三個容器配置檔案和資料在主機上的存放目錄:
服務端的配置檔案全部存放在主機本地根目錄下,刪除容器資料不會被刪除。
[root@willcentos ~]# ll /
total 16
...
drwxr-xr-x 4 1000 1000 158 Nov 25 12:10 mcbg_data
drwxrwxr-x 6 1000 1000 125 Nov 25 11:57 mcworld1_data
drwxrwxr-x 6 1000 1000 125 Nov 25 12:01 mcworld2_data
...
第四章 修改配置檔案
修改bungeecord配置檔案
1.檢視bungeecord目錄下有哪些配置檔案:
[root@willcentos ~]# ll /mcbg_data/
total 10084
-rw-r--r-- 1 1000 1000 10297582 Nov 25 15:57 BungeeCord.jar
-rw-r--r-- 1 1000 1000 989 Nov 25 15:57 config.yml
-rw-r--r-- 1 1000 1000 3 Nov 25 15:57 locations.yml
drwxr-xr-x 2 1000 1000 4096 Nov 25 15:57 modules
-rw-r--r-- 1 1000 1000 155 Nov 25 15:57 modules.yml
drwxr-xr-x 2 1000 1000 4096 Nov 25 15:57 plugins
-rw-r--r-- 1 1000 1000 3911 Nov 25 15:59 proxy.log.0
-rw-r--r-- 1 1000 1000 0 Nov 25 15:57 proxy.log.0.lck
2.首先獲取雲伺服器網絡卡IP地址,我這裡是172.31.112.2
[root@willcentos ~]# ip a
......
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:0a:26:84 brd ff:ff:ff:ff:ff:ff
inet 172.31.112.2/20 brd 172.31.127.255 scope global dynamic eth0
valid_lft 315270699sec preferred_lft 315270699sec
3.需要修改的配置檔案為config.yml,,修改如下內容:
[root@localhost ~]# vim /mcbg_data/config.yml
online_mode: true #預設ture
......
ip_forward: true #預設為false,改為true
......
#複製lobby內容,增加一個子伺服器create,注意修改IP和埠
servers:
lobby:
motd: 'Welcome the lobby world!'
address: 172.31.112.2:25566
restricted: false
create:
motd: 'Welcome the create world!'
address: 172.31.112.2:25567
restricted: false
......
修改mcworld服務端配置檔案
需要修改mcworld1和mcworld2配置檔案,這裡以mcworld1為例:
1.檢視mcworld1服務端目錄下有哪些配置檔案
[root@willcentos ~]# ll /mcworld1_data/
total 42508
-rw-rw-r-- 1 1000 1000 2 Nov 25 15:57 banned-ips.json
-rw-rw-r-- 1 1000 1000 2 Nov 25 15:57 banned-players.json
-rw-rw-r-- 1 1000 1000 1053 Nov 25 15:57 bukkit.yml
drwxrwxr-x 2 1000 1000 4096 Nov 25 15:57 cache
-rw-rw-r-- 1 1000 1000 598 Nov 25 15:57 commands.yml
drwxrwxr-x 2 1000 1000 4096 Nov 25 15:57 config
-rw-rw-r-- 1 1000 1000 65 Nov 25 15:57 eula.txt
-rw-rw-r-- 1 1000 1000 2576 Nov 25 15:57 help.yml
drwxrwxr-x 2 1000 1000 4096 Nov 25 15:57 logs
drwxrwxr-x 2 1000 1000 4096 Nov 25 15:57 mods
-rw-rw-r-- 1 1000 1000 137 Nov 25 15:57 ops.json
-rw-rw-r-- 1 1000 1000 11 Nov 25 15:57 ops.txt.converted
-rw-rw-r-- 1 1000 1000 43431489 Nov 25 15:57 paper_server.jar
-rw-rw-r-- 1 1000 1000 5473 Nov 25 15:58 paper.yml
-rw-rw-r-- 1 1000 1000 0 Nov 25 15:57 permissions.yml
drwxrwxr-x 3 1000 1000 4096 Nov 25 15:57 plugins
-rw-r--r-- 1 1000 1000 912 Nov 25 15:58 server.properties
-rw-rw-r-- 1 1000 1000 3358 Nov 25 15:58 spigot.yml
-rw-rw-r-- 1 1000 1000 108 Nov 25 15:57 usercache.json
-rw-rw-r-- 1 1000 1000 47 Nov 25 15:57 version_history.json
-rw-rw-r-- 1 1000 1000 2 Nov 25 15:57 whitelist.json
drwxrwxr-x 8 1000 1000 4096 Nov 25 16:13 world
drwxrwxr-x 4 1000 1000 4096 Nov 25 16:13 world_nether
drwxrwxr-x 4 1000 1000 4096 Nov 25 16:13 world_the_end
[root@willcentos ~]#
2.需要修改的配置檔案為server.properties和spigot.yml:
[root@willcentos ~]# vim /mcworld1_data/server.properties
......
online-mode=false #此項如果為true需要改為false
修改spigot.yml配置檔案:
[root@willcentos ~]# vim /mcworld1_data/spigot.yml
......
config-version: 11
settings:
......
bungeecord: true #將false改為true
......
3.mcworld2配置需要做同樣修改,這裡省略
4.修改配置檔案後需要重啟3個docker容器,使配置生效
[root@willcentos