前陣子朋友揪團玩遊戲時,又陷入誰要當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元
創立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
可以在Dashboard的地方看到instance
點進instance後,我們需要到networking的地方設置兩個東西
- 固定Ip,這樣你重啟instnace後的ip會保持不變,避免Ip地址亂動,導致你朋友每次連線都有問題
- 開啟防火牆的port,讓外部的連線可以連到instane
設置固定Ip
要注意的是這個固定Ip其實是會收費的,只是我們目前讓它attch在一個instance下才不收費,日後如果刪除instance時,記得也要將固定Ip給刪掉
開啟防火牆Port
這部分要查一下,看你要玩的遊戲的Port是哪個Port就開啟
這樣設置就完成了
進入lightsail的instance
點擊Connect using SSH,就會跳一個終端機
這個就是我們建立的instance,這時候就是看每個遊戲架設伺服器的方式是怎麼架的,如果有支援linux架設伺服器的話就按照他說的做,如果沒有的話可能就要用docker來模擬windows的環境,這邊以夜族崛起Vrising這款遊戲為例
在instance安裝docker
依序執行
|
|
|
|
|
|
這個命令 sudo usermod -a -G docker ec2-user
用於將一個用戶添加到一個特定的用戶組。讓我們來詳細解析這個命令:
sudo
: 以超級用戶(root)權限執行後面的命令。usermod
: 這是一個用於修改用戶帳戶屬性的命令。-a
: 這個選項代表"append"(添加)。它確保用戶被添加到新組而不被從其他組中移除。-G
: 指定要將用戶添加到的補充組(secondary group)。docker
: 這是要將用戶添加到的組名。ec2-user
: 這是要被修改的用戶名。
綜合起來,這個命令的作用是:將 ec2-user
用戶添加到 docker
用戶組中,同時保留該用戶原有的組成員身份。
這個命令通常在設置 Docker 環境時使用,特別是在 Amazon EC2 實例上。將用戶添加到 docker 組允許該用戶執行 Docker 命令而無需每次都使用 sudo。
執行此命令後,ec2-user
需要登出並重新登錄,或者重新啟動系統,才能使新的組成員身份生效。
這個命令的使用場景通常是在設置開發或部署環境時,為了方便開發者或系統管理員使用 Docker 而不必每次都輸入 sudo。
|
|
|
|
命令 sudo systemctl enable docker.service
用於設置 Docker 服務在系統啟動時自動啟動。讓我們詳細解析這個命令:
sudo
: 以超級用戶(root)權限執行後面的命令。systemctl
: 這是 systemd 初始化系統的主要命令行工具,用於控制 systemd 系統和服務管理器。enable
: 這個子命令用於啟用一個服務單元,使其在系統啟動時自動啟動。docker.service
: 這是要啟用的服務單元的名稱,在這裡指的是 Docker 服務。
執行這個命令後,系統會:
- 創建必要的符號鏈接,將 Docker 服務單元文件鏈接到 systemd 的自動啟動目錄中。
- 重新配置 systemd,使其在下次系統啟動時加載並啟動 Docker 服務。
這個命令的主要作用是確保 Docker 守護進程(Docker daemon)在系統啟動時自動運行,無需手動啟動。這對於依賴 Docker 運行的服務和應用程序來說非常重要,因為它確保了 Docker 環境在系統啟動後立即可用。
使用這個命令的典型場景包括:
- 在服務器或開發機器上設置 Docker 環境
- 確保 Docker 相關的持續集成/持續部署(CI/CD)流程能夠在系統重啟後自動恢復
- 在需要持續運行 Docker 容器的生產環境中使用
需要注意的是,這個命令只是啟用了服務,並不會立即啟動 Docker。如果你想立即啟動 Docker 服務,你需要運行 sudo systemctl start docker.service
。
|
|
啟動docker服務
|
|
確認docker運行狀態,看到這個畫面就代表docker啟動成功了
執行伺服器docker
我這邊選用的是vrising的伺服器,使用這個人提供的docker
https://github.com/TrueOsiris/docker-vrising
在instance上運行
|
|
這樣就可以囉
備份instance
如果遊戲不玩了,可以選擇將整個instance備份起來,等到之後要用的時候再restore
復原instance
選擇復原instance,會復原一個當初snapshot起來的instance,這樣就可以重新開始玩囉