1. 程式人生 > >泰拉瑞亞Linux主機打造指南

泰拉瑞亞Linux主機打造指南

![image.png](http://antzuhl.cn/upload/2020/3/image-0559d061f86a4b018043e8463b3c0b66.png) 最近玩了泰拉瑞亞,一個2D版的`我的世界`,但苦於steam的聯機太過不靠譜,經常會出現和朋友之間聯機失敗的問題,所以我把伺服器放到了部署我部落格的伺服器,這樣就可以通過IP直接讓好友加入遊戲了! 首先是購買伺服器,因為我們需要一個大家都能訪問的公網IP,所以... Vultr最近伺服器在做活動,衝10美元送50美元,而且伺服器你除了用來放泰拉瑞亞的服務,還可以給自己搭建Vxx。 新使用者註冊才有的福利,隨便搞一個郵箱註冊就可以了。 [http://bwg.yiqimaila.com/vt/](http://bwg.yiqimaila.com/vt/) ## 前置準備 首先要解決的一個問題是伺服器記憶體問題,為了支援數百人加入,需要較高的記憶體配置,但是伺服器記憶體太貴了,啟用swap倒是不錯的選擇。 確認下SWAP設定了多少 ``` free -m ``` 如果足夠1GB則跳過這一步直接開始搭建遊戲! 刪除SWAP分割槽 ``` swapoff -a ``` 新增SWAP分割槽 ``` dd if=/dev/zero of=/root/swapfile bs=1M count=1024 ``` 格式化交換分割槽檔案: ``` mkswap /root/swapfile ``` 啟用swap分割槽檔案 ``` swapon /root/swapfile ``` 新增開機啟動 ``` vi /etc/fstab ``` 在最後一行新增 ``` /root/swapfile swap swap defaults 0 0 ``` 重啟下是否生效 ``` reboot ``` 重啟後輸入指令檢視下SWAP是否增加 ``` free -m ``` ## 搭建服務 首先下載需要用到的工具庫。 ``` # yum install wget # yum install screen # yum install unzip ``` 因為泰拉瑞亞需要用到7777埠,所以我們要讓防火牆允許。 ``` # firewall-cmd --permanent --add-port=7777/tcp success # firewall-cmd --reload success ``` 建立一個用來存放泰拉瑞亞伺服器的資料夾 ``` # cd /opt/ # mkdir terraria # mkdir terraria/{bin,downloads} # chown -R root:root terraria ``` 下載泰拉瑞亞官方提供的伺服器包。 ``` $ cd /opt/terraria/downloads $ wget http://terraria.org/server/terraria-server-1353.zip ``` 解壓軟體包。 ``` $ unzip terraria-server-1353.zip -d /opt/terraria/bin ``` 然後需要一個配置檔案。 ``` $ vi serverconfig.txt ``` 檔案內容如下: ``` world=/opt/terraria/Worlds/世界的名字.wld autocreate=2 worldname=世界的名字 difficulty=0 maxplayers=4 password=設定一個密碼 worldpath=/opt/terraria/Worlds ``` 具體世界的名字和密碼自定。 autocreate 是沒有發現世界自動生成世界的大小 1、2、3分別對應小、中、大 difficulty 對應的是0為普通,1為專家 maxplayers是最大人數 給執行檔案設定許可權 ``` $ cd /opt/terraria/bin/1353/Linux $ chmod 744 TerrariaServer.bin.x86_64 ``` 啟動伺服器 ``` $ ./TerrariaServer.bin.x86_64 -config /opt/terraria/serverconfig.txt ``` 初次執行因為要建立世界需要一定時間當看到 ``` Terraria Server v1.3.5.3 Listening on port 7777 Type 'help' for a list of commands. : ``` 表示生成成功! 此時可以在遊戲的多人模式通過IP進入遊戲看看是否成功。 確認成功後退出伺服器 ``` : exit ``` 重新編輯配置檔案防止重新生成世界 ``` $ cd /opt/terraria $ cp -p serverconfig.txt serverconfig.txt_yyyymmdd $ vi serverconfig.txt ``` 將三個配置註釋掉 ``` autocreate=2 worldname=世界的名字 difficulty=1 ``` 改為 ``` # autocreate=2 # worldname=Terraria # difficulty=1 ``` 再次執行一次看看是否成功。 ## 優化體驗 每次啟動都要輸入這麼多資料夾路徑很麻煩,所以我們可以製作一個自動啟動的指令碼: ``` $ vi terra_script.sh ``` 內容如下: ``` #!/bin/bash USERNAME='root' SCNAME='terraria' TERA_VER='1353' BIN_PATH="/opt/terraria/bin/$TERA_VER/Linux/" SERVICE='TerrariaServer.bin.x86_64' CONFIG='/opt/terraria/serverconfig.txt' ME=`whoami` if [ $ME != $USERNAME ] ; then echo "Please run the $USERNAME user." exit fi start() { if pgrep -u $USERNAME -f $SERVICE > /opt/terraria/logs/start.txt ; then echo "$SERVICE is already running!" exit fi echo "Starting $SERVICE..." screen -AmdS $SCNAME $BIN_PATH$SERVICE -config $CONFIG exit } stop() { if pgrep -u $USERNAME -f $SERVICE > /opt/terraria/logs/stop.txt ; then echo "Stopping $SERVICE " else echo "$SERVICE is not running!" exit fi screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. "\015' sleep 10 screen -p 0 -S $SCNAME -X eval 'stuff "exit"\015' exit } save() { echo 'World data saving...' screen -p 0 -S $SCNAME -X eval 'stuff "say World saveing..."\015' screen -p 0 -S $SCNAME -X eval 'stuff "save"\015' exit } status() { if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then echo "$SERVICE is already running!" exit else echo "$SERVICE is not running!" exit fi } case "$1" in start) start ;; stop) stop ;; save) save ;; status) status ;; *) echo $"Usage: $0 {start|stop|status|save}" esac ``` 這樣就分別有了「啟動」「關閉」「儲存」「重啟」了。 分別對應: ``` 伺服器啟動 /opt/terraria/terra_script.sh start 伺服器停止 /opt/terraria/terra_script.sh stop 伺服器重啟 /opt/terraria/terra_script.sh restart 確認狀態 /opt/terraria/terra_script.sh status 儲存世界存檔 /opt/terraria/terra_script.sh save ``` 給檔案提升許可權 ``` $ chmod 744 terra_script.sh ``` 確認下啟動 ``` $ sh -x ./terra_script.sh start ``` 通過「screen -ls」確認下是否開啟了視窗 ``` $ screen -ls There is a screen on: 883.terraria (Detached) 1 Socket in /var/run/screen/S-terraria. ``` 確認下關閉 ``` $ sh -x ./terra_script.sh stop ``` 確認關閉是否成功 ``` $ screen -ls No Sockets found in /var/run/screen/S-terraria. ``` 這樣就算是完成了,世界的存檔就在Worlds目錄中,如果你用了MobaXterm這種支援檔案傳輸的工具連線伺服器,可以直接把遊戲存檔拉出來儲存到你自己電腦上,還可以上傳你自己單機玩的存檔。 ![image.png](http://antzuhl.cn/upload/2020/3/image-691b7f9db4a34d82b32182b4f8b27