dr4ft 的实现基于 Node.js ,所以需要提前准备好 Node.js 运行环境(也即 node 和 npm 这两个)。如果运行 dr4ft 遇到“Unexpected token ILLEGAL”这类错误信息,那么一般都是 Node.js 的版本不对,升级运行环境到最新版就能解决。

Debian 发行版自带的 Node.js 版本就太老,需要考虑按照 Node.js 官方文档 来升级版本才行。

1.  首先尝试本机成功运行

比较完整的安装配置指令,可参考 README 中的内容。

  1. 执行 node --version 检查本机 Node.js 运行环境版本。
  2. 获取最新版本代码:
     git clone https://github.com/dr4fters/dr4ft.git
  3. 如下指令会自动下载所依赖的第三方模块,以及下载最新的卡牌数据:
     npm install
  4. 执行 npm start ,这时候应该一切成功,可以用浏览器访问 http://localhost:1337 成功访问本机架设起来的服务了。
    • 其实这时候服务绑定的是本机 ip 地址,直接用 http://本机_ip_地址:1337 也能访问,也就是其实已经在提供对外服务了。
    • 以后启动服务也可以用 node app.js 指令,跟 npm start 效果是一样的。

2.  通过 lighttpd 中转到 80 端口

在直接运行 node run 一切正常之后,尝试用 httpd 服务器把服务代理到 80 端口。

2.1  仅允许本机访问 Node.js 的服务

修改 dr4ft 源代码中的 app.js ,把其中第 13 行开始的

var server = http.createServer(function(req, res) {
  send(req, req.url, { root: 'public' }).pipe(res)
}).listen(CONFIG.PORT)

改为

var server = http.createServer(function(req, res) {
  send(req, req.url, { root: 'public' }).pipe(res)
}).listen(CONFIG.PORT, CONFIG.IP)

以及编辑 config.server.js 文件的最后部分,把其中的

module.exports = {
  PORT: 1337,
  VERSION,
  STRINGS: {
    BRANDING: {
      DEFAULT_USERNAME: 'dr4fter',
    }
  }
}

改为

module.exports = {
  IP: '127.0.0.1',
  PORT: 1337,
  VERSION,
  STRINGS: {
    BRANDING: {
      DEFAULT_USERNAME: 'dr4fter',
    }
  }
}

之后重新执行 node run 启动服务就行了,dr4ft 服务就只能在本机通过 127.0.0.1 的 1337 端口访问到了。

2.2  配置 lighttpd 的反向代理

编辑 /etc/lighttpd/lighttpd.conf 文件,在其中加入:

$HTTP["host"] == "你的 dr4ft 服务的域名" {
  proxy.server  = ( "" => ("" => ( "host" => "127.0.0.1", "port" => 1337 )))
}

然后重启 lighttpd 服务就行了。

3.  怎样把新系列的牌更新进来

3.1  跟着官方代码更新

如果时间足够久,跟着 dr4ft 官方代码更新程序和数据就行。具体步骤如下:

  1. git pull 更新 dr4ft 代码
  2. npm run download_allsets 从 mtgjson.com 下载最新牌张数据
  3. npm run update_database 更新本地牌张数据缓存
  4. npm run download_booster_rules 更新特殊的补充包生成规则
  5. 重新执行 npm start 把服务运行起来就行了

注意:记得给 data 目录“读写+执行”权限!dr4ft 会定期自动更新新系列数据,没有写权限会卡在这儿不断重启。

3.2  提前手工补充新系列的牌张数据

现在 dr4ft 在启动的时候可以自动从 mtgjson.com 上更新卡牌数据了,但有时候会因为 GFW 的原因总是更新失败。

4.  用 Supervisor 来启动 dr4ft 服务

更多详细操作,参考 Supervisor 使用笔记

所使用的 /etc/supervisor/conf.d/dr4ft.conf 文件,内容如下:

[program:dr4ft]
directory=/var/www/dr4ft/dr4ft
command=sh -c 'LOGGER_FILE_ENABLED=false node app.js'
autorestart=true
user=nobody

其中 directory 是 dr4ft 源代码所在目录,需要 nobody 账号具有读权限(其中 data 子目录还需要写和执行权限)。如果移动过 dr4ft 源代码的目录位置,那么有可能要重新执行一次 npm install ,来修正安装过程中生成的一些文件软链接的位置。

5.  稍微改善 Dr4ft 容易掉线的问题

有时候在 room 里排队,排一会儿就掉线了,这是服务器底层 engine.io 的 Polling 机制稳定性的问题,按这里的调整方法,似乎能稍稍改善一些。

  • 注意:Safari 似乎怎么调都没用。。Chrome 和 Firefox 基本上没啥问题。

编辑 app.js 文件的第 40 行,把

const io = eio(server);

改成

const io = eio(server, { pingTimeout: 15000, pingInterval: 757 });

这样改完之后,Dr4ft 似乎对浏览器与服务器之间长连接的网络稳定性容忍得更好了,因而掉线的概率也就变低了。

6.  其他可能要调整的

  • 删除 gcc 包和 cmake 包,以避免服务器万一被黑时,黑客能比较容易地编译自己的工具包。
    apt-get remove gcc make
    apt-get auto remove
GlossyBlue theme adapted by David Gilbert
Powered by PmWiki