尚未完成。
環境:
雲端平台:Azure, Oracle Cloud
作業系統:Ubuntu 20.04 LTS
Minecraft 版本:1.17
租伺服器
我使用的是 Oracle Cloud,因為有永久免費提供兩台 1G RAM/ 1vCPU 的機器可使用,比起 Google Cloud (永久 670MB RAM/1 vCPU* 1) 和 Azure (12個月 1G RAM/1 vCPU* 2 (Windows 及 Linux 各一)
),算是非常大方了。如果使用自己的機器可以直接跳到事前準備。如果使用其他的雲端服務可以直接跳到 SSH 連線。
前往 Oracle Cloud 的官網,點選
開始免費試用
。註冊一支帳號。
開啟選單,並選擇
Compute
>Instances
。
- 建立機器。
SSH 連線
推薦使用 Windows Terminal。介面美觀、功能強大、微軟親兒子。在 Microsoft Store 即可下載安裝。
開啟後,按下向下箭號,選擇 Settings
,下拉左邊的側邊欄,點擊加號,在 Name 欄輸入你想使用的名稱,接著在 Command Line 欄貼上以下的指令,然後修改指令中的參數。
PowerShell -NoExit -NoLogo -Command ssh -i '私鑰路徑' <使用者名稱>@<伺服器 IP>
(第一次連接會顯示金鑰的指紋,並詢問是否要繼續連接,輸入 yes 就可以)
以後只要開啟 Windows Terminal,按下拉選單,然後選擇剛才設定的名稱便可以快速存取遠端機器。
SFTP 連線
Filezilla 安裝程式爭議:
Be careful if you are using FileZilla for your… (Reddit)
Fw: [黑特] filezilla我這麼相信你結果你藏木馬!
這裡以 Cyberduck 做示範,但更推薦使用 WinSCP (完全免費,不用看到購買金鑰提示),其他程式的流程應該也大同小異。
安裝完 Cyberduck 後,點左上角的 Open Connection
。
即可開啟此視窗。先在最上方的下拉選單選擇 SFTP
,接著在 Server 那欄填寫你的機器的 IP,Username 欄填寫你在系統內的使用者名稱,最後點擊 SSH Private Key 旁的 Choose...
,選擇你之前下載到的私鑰,就可以連接上了。如果接下來有任何關於檔案操作的步驟,不方便 (不習慣) 在終端機中操作,皆可以透過 Cyberduck 完成。
與 SSH 連接相同,第一次連接也會提示指紋,選擇允許就好了。
事前準備
先更新 Ubuntu 的套件:
sudo apt update && sudo apt upgrade -y
Swap 空間
因為我們的機器的 RAM 只有 1G,所以得拿硬碟的一小部分作為 swap 空間。(如果機器的記憶體足夠,可以跳過此部分。且硬碟的速度比 RAM 慢上許多,會影響實際執行的效能)
sudo fallocate -l 3G /swapfile #分配空間
sudo chmod 600 /swapfile #只有 sudo 使用者能存取此空間
sudo mkswap /swapfile #啟用 swap
sudo swapon /swapfile #啟用 swap
調整 fstab,否則下次系統重開機時又要再重新設定一次。
sudo nano /etc/fstab
/swapfile swap swap defaults 0 0 #在 fstab 裡面貼上這行指令
貼上後,按下 Ctrl+X、Y、Enter 就可以儲存並離開了。
防火牆
如果是使用 Oracle Cloud 的話,還要先開啟系統防火牆中 Minecraft 的連接埠。
sudo iptables -I INPUT -p tcp --dport 25565 --syn -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
sudo netfilter-persistent save
開始架設
接著就可以開始架設伺服器,安裝 JDK:
sudo apt install apt-transport-https software-properties-common gnupg
wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
sudo add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
sudo apt update
sudo apt install adoptopenjdk-16-hotspot
前往 Paper 的下載頁面,選擇要架設的版本 (示範為1.17),然後對著最新組建 (目前是 #71) 的按鈕點右鍵,複製連結。
建立一個資料夾,名字可以隨便取,接著進到資料夾。
mkdir <資料夾名稱> # 建立資料夾 Ex: mkdir mcserver
cd <資料夾名稱> # 進入資料夾 Ex: cd mcserver
使用你剛才複製的連結下載組建。
wget <連結> # Ex: wget https://papermc.io/api/v2/projects/paper/versions/1.17/builds/71/downloads/paper-1.17-71.jar
此時當你執行 ls 列出檔案列表的時候,應該就能看到資料夾裡面有一個 .jar 的檔案。
執行伺服器檔:
java -Xms512M -Xmx2G -jar paper-1.17-71.jar --nogui
-Xms 是指定伺服器剛啟動時的記憶體分配大小,-Xmx 則是指定伺服器最多能使用的記憶體大小。我這裡分別分配了 512 MB 和 2GB 給伺服器使用,實際執行時能依自己的情況調整。
第一次開啟時,伺服器會要求簽許可協議,並自動關閉。只要開啟 eula.txt,
nano eula.txt
把裡面的 eula=false 改成 eula=true 就可以了。
再開啟伺服器一次。這次就能順利看到伺服器在載入和產生世界,出現 Done (xx.xxxs)! For help, type “help” 之後,就可以透過 IP 進到伺服器中。
問題
只要關掉終端機,伺服器就會跟著一起關掉
使用 screen。
即使你斷線或是關掉終端,screen 還是會在背景繼續執行你的工作。
Ubuntu 已經有內建 screen,在指令前面加上 screen 就可以了,例如:
screen java -Xms512M -Xmx2G -jar paper-1.17-71.jar --nogui
之後若要返回終端機,只需輸入 screen -r
。
但如果出現以下的錯誤訊息,代表你的終端還綁在其他地方,需要先卸離。輸入 screen -d
,再連接一次就好。
There is a screen on:
38940.pts-0.vm2 (07/16/21 19:44:58) (Attached)
There is no screen to be resumed.
指令太長,每次都要用複製的
使用 .sh 檔,然後在裡面貼上要執行的指令。設定好權限之後,未來只要執行該 .sh 檔就可以快速執行指令。
nano start.sh //建立檔案
screen java -Xms512M -Xmx2G -jar paper-1.17-71.jar --nogui //貼上此行並儲存
chmod +x start.sh //設定執行權限
./start.sh //執行 .sh 檔
安裝插件
只要將下載回來的 .jar 檔放在 plugins/ 資料夾中就可以了,下次開啟伺服器時就會自動產生檔案。
推薦:
CoreProtect:紀錄或還原破壞方塊、放置方塊、儲物箱物品移動、聊天、登入登出…等事件。
/co i #切換檢查器,對方塊點右鍵即可查看紀錄
/co rb <參數> #復原,可使用參數來縮小範圍
/co l <參數> #查詢紀錄,可使用參數來縮小範圍
可使用的參數有:
u:<玩家>
t:<時間> Ex: t:5w,3d,2h,1m,4s
r:<範圍>
a:<動作> Ex:a:block (放置/破壞方塊)
a:+block (放置方塊)
a:-block (破壞方塊)
a:chat (聊天對話)
a:click (互動)
a:command (指令)
a:container (從儲物箱取出或放入物品)
a:+container (放入物品)
a:-container (取出物品)
a:inventory (撿起或扔出物品)
a:+inventory (撿起物品)
a:-inventory (扔出物品)
a:item (從儲物箱取出或放入物品、撿起或扔出物品)
a:+item (放入物品到儲物箱或撿起物品)
a:-item (從儲物箱取出物品或扔出物品)
a:kill (殺死生物)
a:session (登入/登出)
a:+session (登入)
a:-session (登出)
a:sign (告示牌訊息)
a:username (玩家名稱變動)
b:<方塊>
e:<排除方塊>
FastChunkPregenerator:預先生成 chunk,不用等到玩家在附近時才生成,對跑圖時的效能非常有幫助。
/fcp start <範圍> [世界] [chunk 的 X 座標] [chunk 的 Z 座標] #開始生成
/fcp pause #暫停生成
/fcp resume #繼續生成
/fcp cancel #取消生成
可有可無:
TAB:在玩家列表、頭上、計分板…等地方顯示自訂訊息。
Source:TAB Plugin Page
/tab reload
Supported RGB formats:
#******
&#******
{#******}
#<******>
&x&*&*&*&*&*&*
Gradients:
<#******>Text</#******>
{#******>}Text{#******<}
<$#******>Text<$#******>
config.yml
animation.yml
Dynmap:讓世界能像 Google 地圖一樣瀏覽
預設可使用的世界及地圖: world - 世界 (主世界)
-> flat - 地圖 (2D)
-> surface - 地圖 (3D)
-> cave - 地圖 (3D)
world_nether - 世界 (地獄)
-> flat - 地圖 (2D)
-> surface - 地圖 (3D)
world_the_end - 世界 (終界)
-> flat - 地圖 (2D)
-> surface - 地圖 (3D)
指令:
/dynmap render: 渲染目前所在位置的一格區塊。
/dynmap fullrender (世界):(地圖): 從中央開始,渲染指定世界的地圖。
/dynmap radiusrender (範圍) (地圖): 從你所在位置開始,向外渲染你指定的範圍。
/dynmap radiusrender (地圖) x z (範圍): 從 `x, 64, z` 開始,向外渲染你指定的範圍。
/dynmap updaterender (地圖): 渲染需要更新的區塊。
/dynmap updaterender (世界) x z (地圖): 從(x, z)的區塊開始,渲染需要更新的區塊。
/dynmap cancelrender (世界): 取消所有渲染工作。
/dynmap purgequeue: 清除工作隊列。
/dynmap purgemap (世界) (地圖): 刪除該世界的所有地圖檔。若未提供地圖將刪除全部。
/dynmap pause all: 暫停所有渲染工作。
/dynmap pause none: 繼續所有渲染工作。
Multiverse:多個世界,可將個別調整世界的細項,像是遊戲模式、規則…
提升性能
修改時區
根據租的機器的所在位置,時區也會跟著有所不同。在察看伺服器的紀錄檔的時候可能會很麻煩。如果想要把時區改回台灣的話,可以使用下面這條指令。
sudo timedatectl set-timezone Asia/Taipei