SERVER / QUICK START

遊戲伺服器 Linux 開服教學

用 Docker 快速完成 Linux 伺服器部署,包含環境準備、Compose 設定、啟動、維運和常見問題。

本教學將引導您在 Linux 伺服器上透過 Docker 快速部署遊戲伺服器,即使您沒有太多技術背景,也可以依照步驟完成。

1. 準備工作

  • 必須是雲伺服器(阿里雲、騰訊雲、 AWS 等)或者 VPS 虛擬機。
  • 必須:向官方申請有效的 遊戲授權 TOKENGAME_TOKEN),沒有 TOKEN 就無法開啟公開伺服器。
  • 準備一台具有公網 IP 的伺服器(必須可被 ping 通和訪問),否則審核會不通過。
  • 安裝 Docker 與 Docker Compose(建議),或確認伺服器運行環境符合遊戲要求。
  • 申請 TOKEN 時,請將郵件寄到:team@nextindie.cn

TOKEN 申請範本 · 《遊戲許可及服務協議》

Text
一、申請人基本資訊
使用者 UID:[請填寫您的遊戲帳號使用者 ID]
伺服器綁定公網 IP:[請填寫唯一的固定公網 IP 位址,須可被 ping 到]
伺服器物理地區:[例如:亞洲、北美等]
申請用途與社群規模簡述:[例如:個人開服、特定玩家社群伺服器等]
二、【重要】非營利性運營承諾與合規提示
作為幕後開服運營者,我已詳細閱讀並誓必嚴格遵守《遊戲許可及服務協議》第十章之規定,在此鄭重做出以下法律承諾:

【純粹非盈利性質】:本伺服器將保持純粹的非盈利性質。
【僅允許無償捐贈】:本伺服器僅接受玩家出於對社群熱愛而進行的自願、無償、無任何對價回報的捐贈。所有贊助資金將且僅能用於貼補伺服器硬體租賃、網路頻寬、DDoS 防禦等物理託管的直接成本。
【嚴禁販賣遊戲資產與數值】:本伺服器絕不直接、間接或變相售賣遊戲內的任何虛擬生物/恐龍、角色數據、等級、屬性加成、武器裝備、建築材料、遊戲代幣或任何影響數值平衡的虛擬道具。
【嚴禁變相特權交換】:本伺服器絕不以「贊助抽獎」、「贊助滿贈」、「充值定制角色/生物」、「進入伺服器的付費門檻/入群費」等名義,將遊戲內的虛擬物品或遊戲特權作為贊助的交換條件。
【禁止博彩機制】:本伺服器內及關聯社群(如 QQ 群、Discord 等)中,絕不設立針對遊戲虛擬物資的盲盒、抽獎、輪盤或帶有賭博性質的充值返利機制。
三、隱私隔離與安全知情
我知悉並同意,官方收集此伺服器 IP 及生成 TOKEN 是出於「安全防作弊與履行合同所必需」,此數據處理符合隱私合規規範。
我承諾妥善保管配發的授權 TOKEN,絕不以任何形式轉讓、出租或洩露給第三方。因 TOKEN 或 IP 配置管理不當引發的違規後果,由我本人承擔全部責任。
本人明白,向官方傳送此開服申請郵件,即構成了對《遊戲許可及服務協議》所有法律條款的數字簽名與絕對認可。若違反上述任何一項紅線,官方有權在不進行事先通知的情況下,一鍵註銷授權 TOKEN、將 IP 列入黑名單,並對違規帳號執行全平台封號與設備拉黑處理。

2. 安裝 Docker 與 Docker Compose

2.1 安裝 Docker

如果您使用的是雲端伺服器內建的 Docker 容器服務,或目前系統已預先安裝且可正常使用 Docker,可以直接跳過本節,繼續執行下一步。

執行以下命令下載並安裝 Docker(適用於大多數 Linux 發行版):

Bash
curl -fsSL https://get.docker.com | bash

安裝完成後,啟動 Docker 並設定開機自動啟動:

Bash
systemctl start docker
systemctl enable docker

驗證安裝是否成功:

Bash
docker --version

2.2 安裝 Docker Compose

現代 Docker 通常已內建 docker compose 外掛;如果沒有,再安裝獨立的 docker-compose。本教學後續命令統一使用 docker-compose。如果您的系統僅支援外掛形式,請自行替換為 docker compose

方法一:檢查內建外掛

Bash
docker compose version

方法二:安裝獨立二進位檔

Bash
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

3. 建立伺服器目錄與設定檔

3.1 直接使用登入後的預設目錄

本教學預設直接使用登入後的預設目錄存放 docker-compose.yml.env,無需額外建立專案資料夾。如果您使用 root 登入,這個目錄通常就是 /root

登入後,兩個設定檔應並排放在您的家目錄中(例如以 root 登入時,該目錄即為 /root):

Text
/root/
├── docker-compose.yml   ← Docker Compose 設定檔
└── .env                  ← 環境變數(伺服器設定)

3.2 建立 .env 環境變數檔案

.env 檔案用於存放伺服器參數。請直接使用系統預設的 vi 編輯器建立:

Bash
vi .env

在開啟的檔案中,以下提供兩份可直接使用的完整設定。請依你想要的模式擇一貼上,並填入 GAME_TOKEN(若要開放公開伺服器,還需將 GAME_IP 改為真實公網 IP):

沙盒模式伺服器

INI
# 遊戲授權 TOKEN(向官方申請,公開伺服器必填)
GAME_TOKEN=
# 伺服器名稱
GAME_NAME=The Sandbox
# 公網 IP(127.0.0.1 僅供本機測試;請填寫真實公網 IP,其他玩家才能連線)
GAME_IP=203.0.113.10
# 伺服器連接埠(UDP)
GAME_PORT=26666

# 屍體消失時間(秒)
GAME_DEAD_TIME=600
# 後代數量:0=禁用,1=允許 1 個,2=允許 2 個……
GAME_CHILD=1

# 啟用沙盒模式
GAME_MODE_SANDBOX=true

# 註冊到全球伺服器列表
GAME_GLOBAL=true
# 最大玩家數
GAME_MAX_PLAYERS=50
# 伺服器節點(僅供玩家判斷所在地區,無實際作用)
GAME_NODE=AS
# 公開伺服器
GAME_PUBLIC=true

# 允許基因熟練度
GAME_GENE_SKILLFUL=true
# 允許擊殺獲得熟練度
GAME_KILL_SKILLFUL=true
# 允許學習基因
GAME_LEARN=true
# 遊戲難度(數值越大越難)
GAME_HARD=1
# 關閉進化蛋(卵永遠只產出當前種族)
GAME_EVOL=false

# 地圖名稱
GAME_MAP=Oasis
# 允許 AI 伴侶
GAME_AI_MATE=true

進化模式伺服器

INI
# 遊戲授權 TOKEN(向官方申請,公開伺服器必填)
GAME_TOKEN=
# 伺服器名稱
GAME_NAME=The Evolution
# 公網 IP(127.0.0.1 僅供本機測試;請填寫真實公網 IP,其他玩家才能連線)
GAME_IP=203.0.113.10
# 伺服器連接埠(UDP)
GAME_PORT=26666

# 屍體消失時間(秒)
GAME_DEAD_TIME=1200
# 後代數量:0=禁用,1=允許 1 個,2=允許 2 個……
GAME_CHILD=1

# 啟用進化模式
GAME_MODE_EVOL=true
# 允許卵中出現進化蛋(這不是進化模式開關)
GAME_EVOL=true
# 啟用原始模式
GAME_MODE_PRIMEVAL=true

# 註冊到全球伺服器列表
GAME_GLOBAL=true
# 最大玩家數
GAME_MAX_PLAYERS=50
# 伺服器節點(僅供玩家判斷所在地區,無實際作用)
GAME_NODE=AS
# 公開伺服器
GAME_PUBLIC=true

# 遊戲難度(數值越大越難)
GAME_HARD=0
# 允許 AI 伴侶
GAME_AI_MATE=true

儲存並離開:先按 i 進入編輯模式,編輯完成後按 Esc,輸入 :wq 並按 Enter。完整參數說明請參考 《遊戲伺服器開服配置手冊》。對於開關型參數,只要寫變數名稱並賦值任意值(例如 1)就表示啟用。

💡 提示:點擊上方程式碼區塊的 下載 按鈕即可將該範例存成檔案。下載的 .env 檔案名稱為 sandbox.envevolution.env,請重新命名為 .env 後再部署。

3.3 建立 docker-compose.yml 檔案

Bash
vi docker-compose.yml
YAML
services:
  # 遊戲應用
  gameserv:
    image: hkccr.ccs.tencentyun.com/mesozoicdawn/gameserver:latest
    container_name: gameserv
    # 環境變數檔案(若檔名不同,例如 sandbox.env,請修改下方檔名)
    env_file:
      - .env
    volumes:
      - /data/Database:/app/GameServ_Data/Database
      - /data/Mods:/app/GameServ_Data/StreamingAssets/Mods
      - /data/Logs:/app/GameServ_Data/Logs
      # 掛載宿主機時區
      - /etc/localtime:/etc/localtime:ro
      # Watchtower 更新通知信號
      - /data/Signals:/app/GameServ_Data/Signals
      - /data/Signals:/signals
    environment:
      - GAME_AUTO_RESTART=1
      - TZ=Asia/Shanghai

    labels:
      - "com.centurylinklabs.watchtower.scope=gameserv"
      - "com.centurylinklabs.watchtower.enable=true"
      # 更新前通知遊戲服自動存檔
      - "com.centurylinklabs.watchtower.lifecycle.pre-update=/usr/local/bin/watchtower-pre-update gameserv"
      - "com.centurylinklabs.watchtower.lifecycle.pre-update-timeout=2"

    restart: unless-stopped
    stop_grace_period: 60s

    healthcheck:
      test: ["CMD-SHELL", "pgrep -f GameServ.x86_64 || exit 1"]
      interval: 50s
      timeout: 5s
      retries: 3
      start_period: 60s

    # 主機模式(降低延遲)
    network_mode: host

    deploy:
      resources:
        limits:
          cpus: '1.8'
          memory: 3800M

  # Watchtower 自動更新
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      # Docker 26+ 需指定 API 版本
      - DOCKER_API_VERSION=1.40
      - WATCHTOWER_POLL_INTERVAL=300
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_TIMEOUT=120s

    command:
      - "--label-enable"
      - "--scope"
      - "gameserv"
      - "--cleanup"
      # 啟用 lifecycle hook
      - "--enable-lifecycle-hooks"

    restart: unless-stopped

    deploy:
      resources:
        limits:
          cpus: '0.2'
          memory: 128M
  • network_mode: host 表示容器直接使用主機網路,因此 .env 中的 GAME_PORT 必須與防火牆放行的連接埠一致。
  • 資料目錄(/data/Database/data/Mods/data/Logs/data/Signals)會保存在宿主機上。Docker 會自動建立這些目錄,您無需手動建立。
  • deploy.resources.limits.memory: 3800M 限制遊戲伺服器最多使用約 3.8G 記憶體,cpus: '1.8' 限制最多 1.8 核 CPU。請依伺服器配置自行調整 deploy.resources.limits 下的數值。

3.4 建立資料目錄(可選)

雖然 Docker 會自動建立綁定目錄,但手動建立可以幫助您更早確認權限是否正確:

Bash
mkdir -p /data/Database /data/Mods /data/Logs

4. 啟動伺服器

確認目前位於存放 docker-compose.yml.env 的目錄後執行。按照本教學預設流程,直接在登入後的預設目錄執行即可;如果您使用 root 登入,通常就是 /root

Bash
docker-compose up -d
  • -d 參數表示在背景執行。
  • 首次啟動會從映像倉庫拉取遊戲伺服器映像,請耐心等待。
  • 可以使用 docker-compose logs -f 檢視即時日誌,按 Ctrl+C 離開日誌檢視,容器不會停止。

如果一切正常,伺服器會完成啟動並向官方大廳註冊(前提是已配置有效的 GAME_PUBLICGAME_TOKEN)。

5. 防火牆放行埠

為了讓其他玩家能夠連線,請務必放行 .env 中設定的 GAME_PORT(預設 26666)對應的 UDP 連接埠。

  • 如果使用雲端伺服器,請在安全群組中新增 UDP 連接埠放行規則。
  • 如果伺服器啟用了系統防火牆(如 ufw),執行以下命令:
Bash
ufw allow 26666/udp

6. 日常管理命令

操作命令
啟動伺服器docker-compose up -d
停止伺服器docker-compose down
重新啟動伺服器docker-compose restart
檢視日誌docker-compose logs -f --tail=100
更新映像並重新啟動docker-compose pull 然後 docker-compose up -d
進入容器內部docker exec -it gameserv bash
  • 停止伺服器時,Docker 會預留 60 秒儲存資料,請勿強制 kill
  • watchtower 容器會自動監測映像更新,並在 5 分鐘間隔內自動拉取新版本並重新啟動服務。

7. 如何修改設定

  1. 執行 cd ~ 後,使用 vi .env 開啟設定檔。
  2. 儲存後執行 docker-compose down,再執行 docker-compose up -d 重新載入環境變數。

必須先 downup,直接 restart 可能不會重新讀取新的環境變數。

8. 常見問題

8.1 伺服器啟動後在大廳找不到?

  • 檢查 .env 中的 GAME_TOKEN 是否填寫正確,並確認已向官方申請。
  • 檢查是否設定了 GAME_PUBLIC=1
  • 檢查伺服器公網 IP 是否與 GAME_IP 一致,可使用 curl ifconfig.me 檢查。
  • 檢查防火牆與安全群組是否已放行 UDP 連接埠。
  • 檢視日誌:docker-compose logs -f gameserv

8.2 連接埠被佔用?

修改 .env 中的 GAME_PORT 為其他連接埠,並同步更新防火牆放行規則。

8.3 記憶體不足導致容器退出?

  • 修改 docker-compose.yml 中的 mem_limit
  • 適度降低 GAME_MAX_PLAYERS 等高消耗參數。

8.4 如何安裝 MOD?

將 MOD 檔案放入宿主機的 /data/Mods 目錄,並在 .env 中新增 GAME_MODS=Mod名稱1,Mod名稱2,然後重新啟動伺服器。

8.5 資料如何備份?

備份宿主機的 /data/Database 目錄即可,該目錄包含玩家角色、巢穴、龍蛋等資料。建議定時打包並上傳至雲端儲存。

9. 取得協助