該文已過期
請訪問 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ù)碴巾,但是這樣對于以后拓展服務器會比較麻煩溯捆,在服務器運行久了之后也會拖累服務器的運行速度。官方提供的教程中介紹了可以使用mongodb
和redis
來保存數(shù)據(jù)厦瓢,并提供了支持這兩個數(shù)據(jù)庫的插件screepsmod-mongo
提揍。雖然叫screepsmod-mogo
啤月,但是游戲服務器對redis
的支持也是它提供的。
需要注意的是劳跃,雖然mongo
和redis
會提升你的服務器運行效率谎仲,但是同時這兩個數(shù)據(jù)庫也會吃掉不少的資源,所以如果你的服務器性能不是很好的話刨仑,請酌情考慮要不要進行安裝郑诺。
接下來我們就著手使用docker-compose
將剛才搭建的原生服務器改造成可以使用mongo
和redis
來保存數(shù)據(jù)。下面是應用的結構圖:
下面開始動手杉武,首先我們先終止正在運行的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
退出終端霞揉,之后我們可以通過下面的命令來檢查是否已經成功啟用了mongo
和redis
數(shù)據(jù)庫:
mongodb - 執(zhí)行如下命令,出現(xiàn)screeps
數(shù)據(jù)庫即為成功晰骑。
docker exec -it screeps_mongo_1 mongo
> show dbs
redis - 執(zhí)行如下命令适秩,刷新出一大堆screeps
的key
即為成功晚唇。
docker exec -it screeps_redis_1 redis-cli
> keys *
至此庐杨,使用mongodb
和redis
拓展的 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]
字段來設置一些初始用戶的個人信息。并沒有什么必須的配置項靠粪,所以我們就可以忽略這一步了蜡吧。
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 安裝完成硫眯。