Screeps 使用docker部署游戲服務器

screeps 系列教程

該文已過期

請訪問 Screeps 使用 docker 部署服務器(新) 來查看更詳細的部署教程熬拒。

本文將介紹如何使用 docker 部署一個可用的 screeps 游戲服務器。內容包含 游戲服務器本體安裝秸妥、安裝拓展數(shù)據(jù)庫 以及 如何安裝mod。本文將假設你對 linux 系統(tǒng)及 docker 有基本的認識與了解屑彻。ok砌梆,接下來開始動手!

安裝 docker

這一步很簡單囱稽,執(zhí)行如下命令進行安裝:

curl -fsSL get.docker.com -o get-docker.sh && \
sudo sh get-docker.sh --mirror Aliyun

然后將/etc/docker/daemon.json的內容修改成如下來更換為國內源容客,提高下載速度:

{
  "registry-mirrors": [
    "https://reg-mirror.qiniu.com",
    "https://quay-mirror.qiniu.com"
  ]
}

最后重啟 docker 即可:

systemctl daemon-reload && \
systemctl restart docker

如果安裝有問題的話請參閱 docker 官方安裝流程秕铛。

安裝游戲服務鏡像

安裝玩 docker 之后就可以正式的開始安裝游戲服務器本體了,在 docker hub 上搜索了一番之后我找到了 ags131/screeps-server 這個鏡像缩挑。本來還以為沒有官方鏡像了但两,結果了解了一下之后發(fā)現(xiàn) ags131這個大佬一直在維護 github 上的screepsmod社區(qū),所以這個鏡像也可以說是半個官方的了调煎。接下來我們就使用這個鏡像來部署一個可用的 screeps 服務器镜遣。


—— 鏡像過期警告! ——

由于該鏡像太久沒有維護,所以現(xiàn)在已經無法直接使用(原因是 node 版本過低 ),你需要按照如下步驟重新構建一個新的鏡像:

  • 下載 docker-screeps-docker 項目
  • Dockerfile中的兩處 node:8.11.1-stretch 修改為 node:10.13.0-stretch
  • 執(zhí)行 build.sh 重新構建悲关,之后你就會得到一個可以使用的 docker 鏡像谎僻,然后就可以繼續(xù)如下步驟

首先,我們先找一個干凈的地方來存放我們的服務器文件寓辱,執(zhí)行如下命令來新建并切換至screeps文件夾:

mkdir /home/screeps && \
cd /home/screeps

接下來我們來初始化游戲服務器艘绍,執(zhí)行如下命令即可:

docker run -it --rm -v $PWD:/screeps ags131/screeps-server init

執(zhí)行之后 docker 會花十幾秒的時間來拉取鏡像,然后容器會自動下載游戲服務器本體秫筏。稍等幾分鐘后游戲會讓輸入你的Steam api key诱鞠,你可以在 這里 獲得你的 key (可能需要翻墻),將 key 粘貼到終端然后回車这敬,服務器就初始化完成啦航夺。

...
Done in 111.08s.
A Steam Web API key is required to run the server without the Steam client installed.
You can obtain a key on this page: https://steamcommunity.com/dev/apikey
Enter your Steam API key: 在這里輸入你的 key
Screeps world data created in "/screeps".
Run "screeps start" to launch your server.

如果你發(fā)現(xiàn)你的安裝一直卡在 isolated-vm 構建階段(十多分鐘還沒好 ),或者好不容易等到結束了卻報了錯崔涂。如下圖所示阳掐。

[screeps@server screeps-server]# yarn
yarn install v1.22.10
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.1: The platform "linux" is incompatible with this module.                                                                                                                
info "fsevents@2.3.1" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "linux" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...                                                                                                                                                              
[4/4] Building fresh packages...                                                                                                                                                           
[1/3] ? isolated-vm              <<<<<< 注意這一行,安裝會一直卡在這里 <<<<<<
[-/3] ? waiting...
[-/3] ? waiting...

遇到這種問題大多是由于服務器的內存不足導致的(比如你正在使用阿里或騰訊的學生主機)冷蚂,2G 的內存編譯起來有點難度缭保,你可以按照 這里 提到的方法增加 swap 內存后再安裝試一下。

安裝完成后我們直接執(zhí)行如下命令運行游戲服務器即可蝙茶。

docker run -d \
  --name screeps-server \
  -v $PWD:/screeps \
  -p 21025:21025 \
  ags131/screeps-server

游戲服務將會開放在21025端口上艺骂,這時候我們直接訪問就可以看到游戲服務器的輸出啦:

> curl -s http://localhost:21025

<html><body>
  Screeps server  v3.4.3  is running on 0.0.0.0:21025.
  Use your <a >Steam game client</a> to connect.
</body></html>

你可以執(zhí)行下面命令來打開游戲的命令行工具,這個工具是管理screeps游戲服務器的主要手段隆夯,在啟動后輸入system.resetAllData()就可以將服務器重置為初始狀態(tài):

docker exec -it screeps-server npx screeps cli

然后你就可以通過游戲客戶端钳恕,點擊Private server并輸入你的游戲服務器ip和端口號,在點擊connect即可連接吮廉,我這里是在本地部署的所以填了localhost苞尝。服務器密碼置空即可,默認的游戲服務器沒有身份驗證宦芦。

登錄服務器
成功登入

在樹莓派上部署?

如果你想在樹莓派上部署一個 screeps 服務器轴脐,只需要把鏡像替換成hopgoldy/respberrypi-screeps-server 即可调卑。這個鏡像是我根據(jù)ags131/screeps-server的 Dockerfile 在arm平臺上重新構建的,用法和ags131/screeps-server完全一樣大咱。

如果你不信任這個鏡像的話恬涧,你可以從 github - HoPGoldy/docker-screeps-server 里的Dockerfile中重新構建。

使用 mongo 和 redis

screeps 服務器默認是使用自帶的LokiJS數(shù)據(jù)庫存放數(shù)據(jù)碴巾,但是這樣對于以后拓展服務器會比較麻煩溯捆,在服務器運行久了之后也會拖累服務器的運行速度。官方提供的教程中介紹了可以使用mongodbredis來保存數(shù)據(jù)厦瓢,并提供了支持這兩個數(shù)據(jù)庫的插件screepsmod-mongo提揍。雖然叫screepsmod-mogo啤月,但是游戲服務器對redis的支持也是它提供的

需要注意的是劳跃,雖然mongoredis會提升你的服務器運行效率谎仲,但是同時這兩個數(shù)據(jù)庫也會吃掉不少的資源,所以如果你的服務器性能不是很好的話刨仑,請酌情考慮要不要進行安裝郑诺。

接下來我們就著手使用docker-compose將剛才搭建的原生服務器改造成可以使用mongoredis來保存數(shù)據(jù)。下面是應用的結構圖:

docker-compose 應用結構

下面開始動手杉武,首先我們先終止正在運行的screeps-server辙诞,執(zhí)行如下命令即可,一會我們會用docker-compose重新部署它:

docker container stop screeps-server && \
docker container rm screeps-server

然后我們使用 docker 鏡像來安裝數(shù)據(jù)庫拓展插件screepsmod-mongo

docker run -it --rm \
  -v $PWD:/screeps \
  ags131/screeps-server \
  yarn add screepsmod-mongo

安裝了插件還沒完轻抱,因為我們是用docker-network將 screeps 服務器和數(shù)據(jù)庫連接在一起的飞涂,所以 screeps 默認的使用localhost地址來訪問數(shù)據(jù)庫就行不通了。接下來我們就配置一下數(shù)據(jù)庫連接地址十拣,在/home/screeps里執(zhí)行下面命令即可封拧。詳細的配置說明參加 npmjs - screepsmod-mongo

# 這是一條命令 直接復制完執(zhí)行即可
cat >> .screepsrc << EOF

[mongo]
host = mongo
[redis]
host = redis
EOF

然后我們就要在服務器開啟時啟用這個 mod,打開/home/screeps/mods.json文件夭问,里面mods字段的值可能為空泽西,將 mod 的訪問路徑node_modules/screepsmod-mongo/index.js添加進去即可:

{
  "mods": [
    "node_modules/screepsmod-mongo/index.js"
  ],
  "bots": {
    "simplebot": "node_modules/@screeps/simplebot/src"
  }
}

好了,做到這一步 mod 的安裝和配置就已經完成了缰趋,接下來我們就用docker-compose部署應用捧杉,首先來安裝docker-compose,直接執(zhí)行如下命令即可秘血,下載有可能比較慢味抖,可以先手動下載然后上傳至服務器

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose

安裝完docker-compose之后再來部署應用,確認在/home/screeps路徑下灰粮,直接執(zhí)行如下命令就可以了:

curl -O https://raw.githubusercontent.com/HoPGoldy/docker-screeps-server/master/docker-compose.yaml && \
docker-compose up -d

當出現(xiàn)下面輸出時即為部署成功:

Creating screeps_mongo_1 ... done
Creating screeps_redis_1 ... done
Creating screeps_server_1 ... done

游戲服務器啟動之后還是使用的默認的LokiJS仔涩,我們來啟用數(shù)據(jù)庫,執(zhí)行如下命令打開服務器終端粘舟,然后輸入mongo.importDB()來啟用數(shù)據(jù)庫熔脂,終端輸出OK后就代表啟用成功,你可以再執(zhí)行一下system.resetAllData()來重置服務器:

# 注意 這里的 screeps_server_1 是你的游戲服務器名稱柑肴,可以通過 docker ps 查看
# 下面的 screeps_redis_1 和 screeps_mongo_1 同理
docker exec -it screeps_server_1 npx screeps cli

> mongo.importDB()
"OK"

然后按兩次ctrl + c退出終端霞揉,之后我們可以通過下面的命令來檢查是否已經成功啟用了mongoredis數(shù)據(jù)庫:

mongodb - 執(zhí)行如下命令,出現(xiàn)screeps數(shù)據(jù)庫即為成功晰骑。

docker exec -it screeps_mongo_1 mongo

> show dbs

redis - 執(zhí)行如下命令适秩,刷新出一大堆screepskey即為成功晚唇。

docker exec -it screeps_redis_1 redis-cli

> keys *

至此庐杨,使用mongodbredis拓展的 screeps 服務器就搭建好了灌闺,如果你想停止服務器的話切換到/home/screeps執(zhí)行docker-compose down即可像捶。

安裝 mod

其實上一小節(jié)安裝screepsmod-mongo就是個安裝 mod 的具體例子,接下來我們就講一下通用的安裝過程是什么樣的蚂会。注意淋样!每次安裝 mod 前都要先使用如下命令停用服務器。

# 僅服務器本體運行時
docker container stop screeps-server && \
docker container rm screeps-server

# 使用 mongo 和 redis 運行時
docker-compose down

所有 screeps 的 mod 在npm上都是以screepsmod-前綴開頭的胁住,安裝共分為三步:安裝 mod趁猴、配置 mod啟用 mod。咱們一步一步的講:

1. 安裝 mod

這一步很簡單彪见,比如你想安裝screepsmod-auth(用于提供用戶登錄驗證)儡司,只需要執(zhí)行如下命令即可:

docker run -it --rm \
  -v $PWD:/screeps \
  ags131/screeps-server \
  yarn add screepsmod-auth

將最后的yarn add xxx替換成你想安裝的 mod 名即可。當你看到如下輸出時即為安裝成功:

...
info Direct dependencies
└─ screepsmod-auth@2.4.7
info All dependencies
├─ base64url@3.0.1
├─ basic-auth@1.1.0
├─ oauth@0.9.15
├─ openid@1.0.4
├─ passport-github@1.1.0
├─ passport-local@1.0.0
├─ passport-oauth2@1.5.0
├─ passport-openid@0.4.0
├─ passport-steam@1.0.10
├─ screepsmod-auth@2.4.7
├─ steam-web@0.4.0
└─ uid2@0.0.3
Done in 117.23s.

然后就可以進行下一步了余指。

2. 配置 mod

一些 mod 是需要進行配置才能使用的捕犬,當然大部分 mod 都有默認配置項可以直接使用,比如上一小節(jié)的screepsmod-mongo酵镜,建議在安裝完之后先訪問 npmjs 或者 github.com - ScreepsMods 搜索你想安裝的 mod碉碉,然后閱讀一下官方提供的 readme 來獲得更詳細的信息。

例如我們剛才安裝的screepsmod-auth淮韭,文檔地址為 github.com - screepsmod-auth 我們可以發(fā)現(xiàn)垢粮,這個 mod 可以在.screepsrc中通過添加[auth]字段來設置一些初始用戶的個人信息。并沒有什么必須的配置項靠粪,所以我們就可以忽略這一步了蜡吧。

screepsmod-auth 的配置項

3. 啟用 mod

如果你使用npm安裝的 mod 的話這一步會自動執(zhí)行,但是我們是使用的yarn安裝的 mod占键,所以需要手動配置一下昔善,輸入vi mods.json打開 mod 配置文件,然后 mods字段里添加你的 mod 啟動文件路徑即可畔乙,啟動文件的路徑格式一般為node_modules/mod名稱/index.js君仆。

例如我們安裝的screepsmod-admin-utils,其路徑就為"node_modules/screepsmod-auth/index.js"牲距,注意mods數(shù)組的最后一個值后面不能有,不然會無法解析袖订。

{
  "mods": [
    "node_modules/screepsmod-mongo/index.js",
    "node_modules/screepsmod-auth/index.js"
  ],
  "bots": {
    "simplebot": "node_modules/@screeps/simplebot/src"
  }
}

添加完之后:wq保存即可。

檢查. 重新啟動

經過以上三步之后嗅虏,我們已經完成了 mod 的安裝,接下來就可以重啟服務器看一下效果了:

# 僅服務器本體運行時
docker run -d \
  --name screeps-server \
  -v $PWD:/screeps \
  -p 21025:21025 \
  ags131/screeps-server

# 使用 mongo 和 redis 運行時
docker-compose up -d

啟動完成之后輸入下面命令來查看服務器啟動日志上沐,只要沒有出現(xiàn)無限重啟的情況皮服,mod 基本上就算安裝成功了:

# 僅服務器本體運行時
docker logs -f screeps-server

# 使用 mongo 和 redis 運行時
docker logs -f screeps_server_1

日志輸出

Server version 3.4.3
Starting all processes. Ports: 21025 (game), 21026 (cli)
[storage] process 15 started
[backend] process 25 started
[engine_main] process 26 started
[engine_runner1] process 31 started
[engine_processor1] process 33 started
[engine_processor2] process 38 started
# 這里雖然重啟了幾次但很快停了下來,木有問題
[backend] process 25 exited with code 0, restarting...
[backend] process 75 started
[backend] process 75 exited with code 0, restarting...
[backend] process 85 started
[backend] process 85 exited with code 0, restarting...
[backend] process 95 started

然后我們就可以訪問readme中提到的網址來實驗一下 mod 是否安裝成功了:

訪問密碼設置界面

可以正常使用,至此龄广,mod 安裝完成硫眯。

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市择同,隨后出現(xiàn)的幾起案子两入,更是在濱河造成了極大的恐慌,老刑警劉巖敲才,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裹纳,死亡現(xiàn)場離奇詭異,居然都是意外死亡紧武,警方通過查閱死者的電腦和手機剃氧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阻星,“玉大人朋鞍,你說我怎么就攤上這事⊥谆” “怎么了滥酥?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畦幢。 經常有香客問我坎吻,道長,這世上最難降的妖魔是什么呛讲? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任禾怠,我火速辦了婚禮,結果婚禮上贝搁,老公的妹妹穿的比我還像新娘吗氏。我一直安慰自己,他們只是感情好雷逆,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布弦讽。 她就那樣靜靜地躺著,像睡著了一般膀哲。 火紅的嫁衣襯著肌膚如雪往产。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天某宪,我揣著相機與錄音仿村,去河邊找鬼。 笑死兴喂,一個胖子當著我的面吹牛蔼囊,可吹牛的內容都是我干的焚志。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼畏鼓,長吁一口氣:“原來是場噩夢啊……” “哼酱酬!你這毒婦竟也來了?” 一聲冷哼從身側響起云矫,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膳沽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后让禀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挑社,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年堆缘,在試婚紗的時候發(fā)現(xiàn)自己被綠了滔灶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吼肥,死狀恐怖录平,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情缀皱,我是刑警寧澤斗这,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站啤斗,受9級特大地震影響表箭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜钮莲,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一免钻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崔拥,春花似錦极舔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慈俯,卻和暖如春渤刃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贴膘。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工卖子, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刑峡。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓揪胃,卻偏偏與公主長得像璃哟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喊递,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容