Featured image of post 如何使用Aws LightSail 結合 docker 建立遊戲伺服器

如何使用Aws LightSail 結合 docker 建立遊戲伺服器

Aws YYDS!

前陣子朋友揪團玩遊戲時,又陷入誰要當Host的問題,記得高中大學時,都是一個網路比較好的人當host,其他人去連,這種方式的缺點也很明顯,就是電腦必須要運行著,一但關機後我們就需要在群組Tag對方,請他上線開房。

於是我突然想到了Aws的服務,邏輯上來講我應該可以在Aws上面運行一個伺服器的終端,然後我們透過Aws的固定Ip去連線,這樣我們就解決了開房問題,並且也不需要仰賴某某人上線才能玩,除此之外也不用處理自己開伺服器要弄的一堆rounter設定、Http Forwarding之類的,查了一下發現Aws本身就有一個叫做lightsail的功能,本質就是一個更輕量化的Ec2,不支援細緻的微調,但好處就是不需要太多基礎知識,只需要稍微設置一下就能在Aws上快速部署。

Lightsail

Lightsail是一個Aws的服務,主要是處理輕量化的需求,提供了一些固定式的雲端機器模板。坊間也有一些類似的產品,比如說Digital Ocean的Droplet,但是Digital Ocean離台灣最近的伺服器在新加坡,而Aws最近的伺服器則是在日本,一來一往之下Aws確實是更好的選擇。

根據所選的方案不同,lightsail的收費也不同,我選擇的是4G memory 2核Cpu,這樣一個月是24元,相當於每啟動一小時需要台幣1元

image-20241003154142527

創立LightSail的Instance

  • Instance Location選日本

  • 作業系統選擇Amazon Linux 2023,這是Amazon的一個LTS版本的Linux,原生支援較完整的Aws服務

  • Size的話選擇4G記憶體 2核CPU 的配置,這樣總共會收$24鎂,換算台幣的話大概就是運行一小時一塊錢,如果已經玩完了,記得將這個instance snapshot備份下來,然後刪除整個instance,因為lightsail只要instance存在,不論運行與否都會收費,這點跟Ec2有差,Ec2是只要stop後就不會繼續收費了。但我Ec2跟lightsail兩邊比較了一下,同樣是2核4G的配置,Ec2的收費會略高lightsail 30%~50%左右,lightsail相較之下是個較Eco的選擇

  • Identify-your instance 就是一個客製化的名稱,就是你愛叫啥就叫啥,我通常是叫OOO game server啦

都選好後就按下Create Instance

image-20241003155315665

可以在Dashboard的地方看到instance

image-20241003161253055

點進instance後,我們需要到networking的地方設置兩個東西

  1. 固定Ip,這樣你重啟instnace後的ip會保持不變,避免Ip地址亂動,導致你朋友每次連線都有問題
  2. 開啟防火牆的port,讓外部的連線可以連到instane

image-20241003161959265

設置固定Ip

要注意的是這個固定Ip其實是會收費的,只是我們目前讓它attch在一個instance下才不收費,日後如果刪除instance時,記得也要將固定Ip給刪掉

image-20241003162225258

開啟防火牆Port

這部分要查一下,看你要玩的遊戲的Port是哪個Port就開啟

image-20241003162629001

這樣設置就完成了

進入lightsail的instance

點擊Connect using SSH,就會跳一個終端機

image-20241003162855055

這個就是我們建立的instance,這時候就是看每個遊戲架設伺服器的方式是怎麼架的,如果有支援linux架設伺服器的話就按照他說的做,如果沒有的話可能就要用docker來模擬windows的環境,這邊以夜族崛起Vrising這款遊戲為例

image-20241003162929500

在instance安裝docker

依序執行

1
sudo yum update
1
sudo yum install docker
1
sudo usermod -a -G docker ec2-user

這個命令 sudo usermod -a -G docker ec2-user 用於將一個用戶添加到一個特定的用戶組。讓我們來詳細解析這個命令:

  1. sudo: 以超級用戶(root)權限執行後面的命令。
  2. usermod: 這是一個用於修改用戶帳戶屬性的命令。
  3. -a: 這個選項代表"append"(添加)。它確保用戶被添加到新組而不被從其他組中移除。
  4. -G: 指定要將用戶添加到的補充組(secondary group)。
  5. docker: 這是要將用戶添加到的組名。
  6. ec2-user: 這是要被修改的用戶名。

綜合起來,這個命令的作用是:將 ec2-user 用戶添加到 docker 用戶組中,同時保留該用戶原有的組成員身份。

這個命令通常在設置 Docker 環境時使用,特別是在 Amazon EC2 實例上。將用戶添加到 docker 組允許該用戶執行 Docker 命令而無需每次都使用 sudo。

執行此命令後,ec2-user 需要登出並重新登錄,或者重新啟動系統,才能使新的組成員身份生效。

這個命令的使用場景通常是在設置開發或部署環境時,為了方便開發者或系統管理員使用 Docker 而不必每次都輸入 sudo。

1
sudo pip3 install docker-compose
1
sudo systemctl enable docker.service

命令 sudo systemctl enable docker.service 用於設置 Docker 服務在系統啟動時自動啟動。讓我們詳細解析這個命令:

  1. sudo: 以超級用戶(root)權限執行後面的命令。
  2. systemctl: 這是 systemd 初始化系統的主要命令行工具,用於控制 systemd 系統和服務管理器。
  3. enable: 這個子命令用於啟用一個服務單元,使其在系統啟動時自動啟動。
  4. docker.service: 這是要啟用的服務單元的名稱,在這裡指的是 Docker 服務。

執行這個命令後,系統會:

  1. 創建必要的符號鏈接,將 Docker 服務單元文件鏈接到 systemd 的自動啟動目錄中。
  2. 重新配置 systemd,使其在下次系統啟動時加載並啟動 Docker 服務。

這個命令的主要作用是確保 Docker 守護進程(Docker daemon)在系統啟動時自動運行,無需手動啟動。這對於依賴 Docker 運行的服務和應用程序來說非常重要,因為它確保了 Docker 環境在系統啟動後立即可用。

使用這個命令的典型場景包括:

  • 在服務器或開發機器上設置 Docker 環境
  • 確保 Docker 相關的持續集成/持續部署(CI/CD)流程能夠在系統重啟後自動恢復
  • 在需要持續運行 Docker 容器的生產環境中使用

需要注意的是,這個命令只是啟用了服務,並不會立即啟動 Docker。如果你想立即啟動 Docker 服務,你需要運行 sudo systemctl start docker.service

1
sudo systemctl start docker.service

啟動docker服務

1
sudo systemctl status docker.service

確認docker運行狀態,看到這個畫面就代表docker啟動成功了

image-20241003164605576

執行伺服器docker

我這邊選用的是vrising的伺服器,使用這個人提供的docker

https://github.com/TrueOsiris/docker-vrising

在instance上運行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run -d --name='vrising' \
--net='bridge' \
--restart=unless-stopped \
-e TZ="Europe/Paris" \
-e SERVERNAME="trueosiris-V" \
-v '/path/on/host/server':'/mnt/vrising/server':'rw' \
-v '/path/on/host/persistentdata':'/mnt/vrising/persistentdata':'rw' \
-p 9876:9876/udp \
-p 9877:9877/udp \
'trueosiris/vrising'

這樣就可以囉

備份instance

如果遊戲不玩了,可以選擇將整個instance備份起來,等到之後要用的時候再restore

image-20241003165649683

復原instance

選擇復原instance,會復原一個當初snapshot起來的instance,這樣就可以重新開始玩囉

image-20241003165734303

Licensed under CC BY-NC-SA 4.0