该文已过期
请访问 Screeps 使用 docker 部署服务器(新) 来查看更详细的部署教程。
本文将介绍如何使用 docker 部署一个可用的 screeps 游戏服务器。内容包含 游戏服务器本体安装、安装拓展数据库 以及 如何安装mod。本文将假设你对 linux 系统及 docker 有基本的认识与了解。ok,接下来开始动手!
安装 docker
这一步很简单,执行如下命令进行安装:
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 这个镜像。本来还以为没有官方镜像了,结果了解了一下之后发现 ags131
这个大佬一直在维护 github 上的screepsmod
社区,所以这个镜像也可以说是半个官方的了。接下来我们就使用这个镜像来部署一个可用的 screeps 服务器。
—— 镜像过期警告! ——
由于该镜像太久没有维护,所以现在已经无法直接使用(原因是 node 版本过低 ),你需要按照如下步骤重新构建一个新的镜像:
- 下载 docker-screeps-docker 项目
- 将 Dockerfile中的两处
node:8.11.1-stretch
修改为node:10.13.0-stretch
- 执行 build.sh 重新构建,之后你就会得到一个可以使用的 docker 镜像,然后就可以继续如下步骤
首先,我们先找一个干净的地方来存放我们的服务器文件,执行如下命令来新建并切换至screeps
文件夹:
mkdir /home/screeps && \
cd /home/screeps
接下来我们来初始化游戏服务器,执行如下命令即可:
docker run -it --rm -v $PWD:/screeps ags131/screeps-server init
执行之后 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.
如果你发现你的安装一直卡在 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 内存后再安装试一下。
安装完成后我们直接执行如下命令运行游戏服务器即可。
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 href="http://store.steampowered.com/app/464350">Steam game client</a> to connect.
</body></html>
你可以执行下面命令来打开游戏的命令行工具,这个工具是管理screeps
游戏服务器的主要手段,在启动后输入system.resetAllData()
就可以将服务器重置为初始状态:
docker exec -it screeps-server npx screeps cli
然后你就可以通过游戏客户端,点击Private server
并输入你的游戏服务器ip
和端口号,在点击connect
即可连接,我这里是在本地部署的所以填了localhost
。服务器密码置空即可,默认的游戏服务器没有身份验证。
在树莓派上部署?
如果你想在树莓派上部署一个 screeps 服务器,只需要把镜像替换成
hopgoldy/respberrypi-screeps-server
即可。这个镜像是我根据ags131/screeps-server
的 Dockerfile 在arm
平台上重新构建的,用法和ags131/screeps-server
完全一样。如果你不信任这个镜像的话,你可以从 github - HoPGoldy/docker-screeps-server 里的
Dockerfile
中重新构建。
使用 mongo 和 redis
screeps 服务器默认是使用自带的LokiJS
数据库存放数据,但是这样对于以后拓展服务器会比较麻烦,在服务器运行久了之后也会拖累服务器的运行速度。官方提供的教程中介绍了可以使用mongodb
和redis
来保存数据,并提供了支持这两个数据库的插件screepsmod-mongo
。虽然叫screepsmod-mogo
,但是游戏服务器对redis
的支持也是它提供的。
需要注意的是,虽然mongo
和redis
会提升你的服务器运行效率,但是同时这两个数据库也会吃掉不少的资源,所以如果你的服务器性能不是很好的话,请酌情考虑要不要进行安装。
接下来我们就着手使用docker-compose
将刚才搭建的原生服务器改造成可以使用mongo
和redis
来保存数据。下面是应用的结构图:
下面开始动手,首先我们先终止正在运行的screeps-server
,执行如下命令即可,一会我们会用docker-compose
重新部署它:
docker container stop screeps-server && \
docker container rm screeps-server
然后我们使用 docker 镜像来安装数据库拓展插件screepsmod-mongo
:
docker run -it --rm \
-v $PWD:/screeps \
ags131/screeps-server \
yarn add screepsmod-mongo
安装了插件还没完,因为我们是用docker-network
将 screeps 服务器和数据库连接在一起的,所以 screeps 默认的使用localhost
地址来访问数据库就行不通了。接下来我们就配置一下数据库连接地址,在/home/screeps
里执行下面命令即可。详细的配置说明参加 npmjs - screepsmod-mongo:
# 这是一条命令 直接复制完执行即可
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
,直接执行如下命令即可,下载有可能比较慢,可以先手动下载然后上传至服务器:
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
路径下,直接执行如下命令就可以了:
curl -O https://raw.githubusercontent.com/HoPGoldy/docker-screeps-server/master/docker-compose.yaml && \
docker-compose up -d
当出现下面输出时即为部署成功:
Creating screeps_mongo_1 ... done
Creating screeps_redis_1 ... done
Creating screeps_server_1 ... done
游戏服务器启动之后还是使用的默认的LokiJS
,我们来启用数据库,执行如下命令打开服务器终端,然后输入mongo.importDB()
来启用数据库,终端输出OK
后就代表启用成功,你可以再执行一下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
数据库:
mongodb - 执行如下命令,出现screeps
数据库即为成功。
docker exec -it screeps_mongo_1 mongo
> show dbs
redis - 执行如下命令,刷新出一大堆screeps
的key
即为成功。
docker exec -it screeps_redis_1 redis-cli
> keys *
至此,使用mongodb
和redis
拓展的 screeps 服务器就搭建好了,如果你想停止服务器的话切换到/home/screeps
执行docker-compose down
即可。
安装 mod
其实上一小节安装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
(用于提供用户登录验证),只需要执行如下命令即可:
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 都有默认配置项可以直接使用,比如上一小节的screepsmod-mongo
,建议在安装完之后先访问 npmjs 或者 github.com - ScreepsMods 搜索你想安装的 mod,然后阅读一下官方提供的 readme 来获得更详细的信息。
例如我们刚才安装的screepsmod-auth
,文档地址为 github.com - screepsmod-auth 我们可以发现,这个 mod 可以在.screepsrc
中通过添加[auth]
字段来设置一些初始用户的个人信息。并没有什么必须的配置项,所以我们就可以忽略这一步了。
3. 启用 mod
如果你使用npm
安装的 mod 的话这一步会自动执行,但是我们是使用的yarn
安装的 mod,所以需要手动配置一下,输入vi mods.json
打开 mod 配置文件,然后 在mods
字段里添加你的 mod 启动文件路径即可,启动文件的路径格式一般为node_modules/mod名称/index.js
。
例如我们安装的screepsmod-admin-utils
,其路径就为"node_modules/screepsmod-auth/index.js"
,注意mods
数组的最后一个值后面不能有,
不然会无法解析。
{
"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
启动完成之后输入下面命令来查看服务器启动日志,只要没有出现无限重启的情况,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 安装完成。
网友评论