Setup a Minecraft server on AWS EC2 with Docker

使用 Docker 在 AWS EC2 上建構 Minecraft 伺服器

前言

Minecraft🔗 是一款全世界最有名的沙盒遊戲,早些年和朋友一起遊玩這款遊戲時連線的方式還是於個人電腦區域網路(LAN)連線,使用 Hamachi🔗 模擬區域網路達成連線,但很明顯有各式各樣的侷限性。

這篇文章探討藉由不同的技術(AWS EC2、Docker)實現快速自建 MC 伺服器的目的:

  1. 穩定獨立專用的伺服器
  2. 更廣更快的設備擴充彈性
  3. 更靈活快速的建構伺服器

創建 EC2 虛擬伺服器

Amazon Elastic Compute Cloud🔗 (EC2) 讓我們設置特定規格的機器在雲端上,可以根據需求調整,本次流程如下,基本與官方部落格範例🔗差不多:

  1. 登入 AWS Console🔗
  2. 在右上角選擇部屬伺服器所在區域(Tokyo ap-northeast-1 亞洲伺服器)
  3. 搜尋 EC2 服務並進入 Dashboard,點擊 Launch Instance
  4. 給新 EC2 實例名稱(minecraft),選擇作業系統映像(Ubuntu Server 64-bit x86)
  5. 選擇 EC2 實例種類,未來硬體規格不夠再升級也不是問題🔗(t3.small)
  6. 創建新的 key pair🔗 方便未來外部透過 SSH 訪問該伺服器(預設,命名隨意)
  7. Network settings 關閉 Auto-assign public IP(可選,為了讓每次伺服器 IP 都是穩定而非臨時指派,可以晚點額外設置 Elastic IPs)
  8. Network settings 新增 Security group rule 2 (TCP, 25565, 0.0.0.0/0) 開放讓 Minecraft 所在的 port 25565 可以通行
  9. Configure store 選擇適當的容量(20 GB)

最終規格範例
最終規格範例

不同機型花費清單比較表格
不同機型花費清單比較表格(根據 AWS Cost optimize your Minecraft Java EC2 Server 文章)

設置 Elastic IPs 實現實例對外固定 IP

如果先前關閉 Auto-assign public IP,可以需要透過 Elastic IPs 來實現固定對外 IP。

  1. Allocate Elastic IP address (預設 Allocate)
  2. Associate Elastic IP address (選擇先前創造的實例)

都完成後應該實例的詳細資料中 Public IPv4 address 會存在。

設置 Elastic IP

進入 EC2 實例

可以選擇各種方式連接,這裡直接在瀏覽器上使用 EC2 Instance Connect。如果使用 SSH 連線的話,先前設定的 key pair 會派上用場。

  1. 選取實例
  2. Connect
  3. EC2 Instance Connect

連接實例

設置 EC2 實例

  1. 更新套件 sudo apt update
  2. 安裝 docker - Install using the apt repository🔗
  3. Manage Docker as a non-root user🔗

執行 Minecraft Docker Image

Terminal window
# 創建與進入 mc-docker 資料夾
mkdir mc-docker
cd mc-docker
# 創立 docker-compose.yml
nano docker-compose.yml

根據 itzg/docker-minecraft-server🔗 設置對應的 docker 映像。

docker-compose.yml
services:
minecraft:
image: itzg/minecraft-server
container_name: minecraft
ports:
- "25565:25565"
environment:
EULA: "TRUE"
VERSION: "1.21.5"
volumes:
- mc-data:/data
restart: unless-stopped
volumes:
mc-data:

執行:

Terminal window
docker compose up -d
docker compose logs -f

總結

如果不熟悉 Minecraft 伺服器,可以先本地設置好 Docker 容器跑起來玩玩看,確定了再丟上 EC2 主持也完全沒有問題。

延伸閱讀