从零开始用Docker搭建Screeps:World私人服务器
网上已经有了很多关于用docker搭建Screeps:World私服的案例,但是“纸上得来终觉浅,绝知此事要躬行”。看得多了之后也决定自己试试。
- 稳定的梯子。不管是拉取docker镜像还是获取Steam API Key都需要梯子,而且这不光是对PC的要求,也是对手机端的要求,Steam API Key的获取还需要手机验证。
- 系统:带WSL2的windows系统。因为是在Docker里跑,所以具体是什么系统没有很大关系。但一般都在windows下玩Steam,所以我用的windows系统。
- Docker Desktop,更新到最新版本即可,目前是4.26.1版本。
- Steam,Screeps:World Client。
-
如果可以访问dockerhub,可以直接拉取构建完成的镜像:
docker push miniball/screeps-server:latest
-
或者也可以从头开始构建。
基础镜像是官方的debian镜像,debian:buster-slim,在此基础上先搭建基本的node环境,只要有国内镜像源加速应该就可以构建。在
node-10
目录下运行:docker build -t <image name>:<tag> .
根据构建的node镜像名称,修改Dockerfile中第一行的镜像名。再切换到
screeps-server
目录下进行构建docker build -t <image name>:<tag> .
创建docker-compose.yaml
文件,根据docker-compose.yaml.example修改一下即可。注意将其中标记有TODO
的位置。
Server在运行的时候,相关的文件是挂载到镜像上的,这样可以把数据,log都保存在本地。Container释放之后还能保留数据。
配置好docker-compose.yaml
,创建server和db所需的文件夹后就可以运行啦。
docker-compose up -d
-d
选项是为了让server在后台运行。
在docker desktop中可以看到正在运行的container的log,第一次启动可能需要比较长的时间,因为需要下载安装之类的。之后启动就比较快了,看到类似这么几个process起来了就好了。
第一次启动docker后,需要启用mongoDB。同样在docker desktop中找到Exec的Tab,执行命令:
npx screeps cli
在出现的命令行界面中依次输入以下命令来启用MongoDB:
mongo.importDB()
system.resetAllData()
会出现如下结果:
接着停止并删除container,再重新启动即可,至此server就搭建完成啦。
如果想添加其它mod,可以直接在mods.json
文件中改,然后安装相应的mod。而我为了让server轻量一些,就只选择了screepsmod-mongo和screepsmod-auth这两个我认为是必要的mod。前者可以避免很多奇怪的bug,而后者则是出于以下两个目的。
有了screepsmod-auth这个mod后,用户可以设置密码,同时也支持从本地上传代码了,用client里的代码编辑器比较痛苦。我在本地用的是cargo-screeps,要传代码到私服的时候需要注意设置用户名,密码,ssl和port。
还有一个痛点是从steam启动screeps的client需要好久,所以就有了这个可以脱离steam的client:screeps-steamless-client。虽然不用启动steam了,但是它并不是完全脱离steam,还是需要事先在steam上下载好screeps client到本地。但总体来说还是比用steam方便很多。
- 在windows下写shell脚本注意文件的结尾换行符是LF还是CRLF
- 如果无法通过steam client登录server,可能是Steam API Key没有被验证,就是网不好,可以看server的
logs/benkend.log
- 代码无法上传,可能是被错误地代理了,可以用wireshark抓包找一下问题。