0x00 前言

这是一种使用对象存储以及内容分发网络为基础的一种特殊模组包,使用改造模组无需DM服务器自身提供模组资源加载,所以有效的缓解Fvtt系统加载模组包过程中的网络带宽压力,提升加载速度。
由于V11版本数据库不再以NoDB为引擎,所以这种修改方式目前暂时不支持V11及以上的Fvtt版本,仅能在V10或者V10版本以下使用。


0x01 原理

Fvtt世界包的图片加载方式可以采用相对路径和绝对路径,在默认设置中为相对路径,一般为”world/Curse of Strahd/scene/xxx.jpg”。
相对路径加载方式需要PC从DM服务器上读取素材,PC数量越多,对DM服务器加载压力就越大。由于DM服务器的总带宽是有限的,所以多人同时读取时会显著降低速度,让系统产生不稳定甚至掉线的情况。
所以我们可以将图片交给一个特殊的空间,使用绝对路径进行图像加载,以提升整体效率。同时这个方案也可以使原本无法修改按量计费的轻量云主机获得一部分按量计费的能力,以提升整体加载速度的功效。


0x02 费用情况和条件

流量费

  • 使用内容分发网络+对象存储流量费约为0.15元/G
  • 若单纯使用对象存储流量费为0.5元/G

资源费

  • 空间费用:一个正常的模组,拥有2GB的资源包一个月空间费用大约为0.3元/月
  • 请求费用:正常一个月的4-8场团,大约请求费用为0.1-0.2元/月
  • 从存储桶内删除资源可以停止空间费用和请求费用的计费。

特殊条件

  • 若内容分发网络+对象存储需要进行网站备案
  • 单纯使用对象存储则不需要网站备案

0x03 开始进行近代化改造模组(V10及V10以前版本可用)

新建存储桶

我们需要创建一个对象存储桶,选择【标准存储】类型,创建的对象存储桶会给你一个默认的域名【桶名-序号.cos.区域.myqcloud.com】。
新建存储桶
【可选】创建内容分发网络配置信息,并在回源地址配置为对象存储回源。此时你不在使用上方的对象存储域名,改为使用内容分发网络的域名。
【可选】配置内容分发网络的缓存信息,将所有类型配置为强制缓存,周期为365天。

配置存储桶

修改对象存储的【安全管理】中的【跨域访问CORS设置】,来源框输入【】,并且允许所有请求。
修改跨域规则
【可选】如果配置了内容分发网络则在【高级配置】中,配置【HTTP响应头配置】,输入参数【Access-Control-Allow-Origin】并取值为【

向存储桶转移文件

然后我们需要下载对象存储浏览工具,并在电脑上安装。
使用我们的账号登录这个存储桶,然后将【/world】目录拷贝到对象存储桶根目录下
复制世界文件

修改FVTT的noDB数据库

然后我们需要修改FVTT主机上,世界包的DB文件,一般修改actors、scenes、journal、items这四个DB文件。在查找目标输入【”worlds/世界包名称/】、在替换目标中输入【”http://域名/worlds/世界包名/】。(注意这两个框前面都有一个半角”)
批量修改DB文件

替换并保存生效

最后将Fvtt系统关闭,然后把修改过的DB文件替换到服务器上原来的世界包中,并打开系统即可使用。


0x04 通过反向代理和规则重定向使用近代化(所有版本可用)

⚠️WARNING:以下内容涉及运维知识,如果你没有相关知识储备和合适的工具,请勿进行修改使用。

创建存储桶,并上传world目录,等同于上方近代化改造1-3步

安装nginx(或者使用面板工具/预设包安装nginx)

前往【Nginx官网的下载分页】,并下载合适对应的版本。
安装/解压缩到一个合适的目录,比如【c:\nginx-1.24.0】
然后使用【命令控制台cmd】启动nginx(注意和FVTT一样,不要关闭这个窗口,否则程序会停止)

c:\nginx-1.24.0\nginx.exe

接下来访问本地页面确认nginx是否运行。

http://127.0.0.1:80

配置nginx支持vhost(如果使用面板/预设工具则跳过此步)

找到【c:\nginx-1.24.0\conf\nginx.conf】主配置文件。在低端添加以下内容

include vhost/*.conf;

配置nginx反代Fvtt(如果使用面板/预设工具,则在对应工具中创建一个www站点,并修改配置文件)

打开目录【c:\nginx-1.24.0\conf\vhost\】(如果没有则创建一个)
在根目录下创建一个你自己的配置文件,例如【Fvtt.conf】。然后根据需要输入以下内容。

server {
    server_name 【你的ip地址或者备案过的网址】; 
    listen 【你所需要的端口号,非FVTT的端口号,如30001】; 
    client_max_body_size 300M; 
    
    location ^~ /worlds/ { 
        rewrite ^(.*)【你的COS桶域名,需要http://】$1 permanent; 
    } 
    
location / { 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "Upgrade"; 
    proxy_pass http://localhost:【本机FVTT运行的端口号,如30000】; 
    } 
}

配置FVTT的设置文件以支持反向代理

找到【FVTT用户数据目录/Config/options.json】文件。
定位并修改如下两行内容

"hostname": "【你的外网IP或者域名】",
"proxyPort": "【上方的端口号】",

扫尾工作

nginx和Fvtt主程序关闭页面并重新打开,如果使用面板/预设工具,则在工具中重载nginx然后重启FVTT。
上方重启步骤若无法确定,则可以直接重启云服务器,重启后手动打开nginx和fvtt。
最后前往云服务器页面和防火墙页面,放行上方新设置的fvtt端口【例如30001】即可

(可选)将nginx注册成服务,实现开机自启动

使用winsw(Windows Service Wrapper服务注册程序) 并自行配置xml文件注册。


0x05 使用S3兼容存储

由于FVTT的S3本身属于AWS配件,国内只能使用兼容模式,所以许多国内对象存储特性均无法使用,包括且不仅限于:无法使用CDN加速域名、桶权限管理、文件权限管理等
若需要使用,则需要找到【用户数据目录】/Config目录,新建一个任意json文件(建议取名带有S3以便识别,例如txs3.json)
打开并输入以下内容(以下以腾讯云的对象存储COS,主系统版本V11为例,V10及以下不兼容):

{
    "endpoint": "https://cos.【地区,如ap-shanghai】.myqcloud.com",
    "credentials": {
        "accessKeyId": "【API密钥中的SecretId,如AKIDrWwz1145141919810gOtABpE】",
        "secretAccessKey": "【API密钥中的SecretKey,如NZVDftD1145141919810c1B59x】"
        },
    "region": "【地区,如ap-shanghai】"
}

最后在核心设置中,找到S3配置文件设置,并且输入你的的文件名(txs3.json)。
重启FVTT核心后即可生效


0x06 近代化模组改造项目

为了解决新人Dm加入Fvtt系统的怀抱,尚未能熟练备团,但却想尝试Fvtt带来的全新体验。故本项目将会提供一定数量的One Shot成品汉化模组包,用于测试使用。
详情请见:近代化改造模组项目