美文网首页Screeps 游戏指南
Screeps 使用docker部署游戏服务器

Screeps 使用docker部署游戏服务器

作者: HoPGoldy | 来源:发表于2019-08-01 14:51 被阅读0次
screeps 系列教程

该文已过期

请访问 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数据库存放数据,但是这样对于以后拓展服务器会比较麻烦,在服务器运行久了之后也会拖累服务器的运行速度。官方提供的教程中介绍了可以使用mongodbredis来保存数据,并提供了支持这两个数据库的插件screepsmod-mongo虽然叫screepsmod-mogo,但是游戏服务器对redis的支持也是它提供的

需要注意的是,虽然mongoredis会提升你的服务器运行效率,但是同时这两个数据库也会吃掉不少的资源,所以如果你的服务器性能不是很好的话,请酌情考虑要不要进行安装。

接下来我们就着手使用docker-compose将刚才搭建的原生服务器改造成可以使用mongoredis来保存数据。下面是应用的结构图:

docker-compose 应用结构

下面开始动手,首先我们先终止正在运行的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退出终端,之后我们可以通过下面的命令来检查是否已经成功启用了mongoredis数据库:

mongodb - 执行如下命令,出现screeps数据库即为成功。

docker exec -it screeps_mongo_1 mongo

> show dbs

redis - 执行如下命令,刷新出一大堆screepskey即为成功。

docker exec -it screeps_redis_1 redis-cli

> keys *

至此,使用mongodbredis拓展的 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]字段来设置一些初始用户的个人信息。并没有什么必须的配置项,所以我们就可以忽略这一步了。

screepsmod-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 安装完成。

参考

相关文章

网友评论

    本文标题:Screeps 使用docker部署游戏服务器

    本文链接:https://www.haomeiwen.com/subject/eeverctx.html