部署/安装——极小资源占用多开 FVTT 工具 【高级用户教程】
此教程解决
想开多个FVTT,但不想让几 GB 的模组/系统(图片、音乐)占用双倍硬盘空间,同时还要避免数据库(LevelDB)被跨服共享导致损坏。
理论上每个FVTT副本只需要占用大约200MB的空间,你甚至能给你的每个团都开一个。
前置教程
为什么需要这个工具?
如果你有两套 FVTT 数据目录(例如:一个是A团,一个是B团),如果你直接复制所有内容,会浪费大量硬盘空间;如果使用普通的软链接把整个模组连过去,FVTT 在同时运行时会因为数据库文件锁(LevelDB 锁定)而崩溃报错。
工具说明
-
智能分流:它会自动读取每个模组的
module.json,分辨出哪些文件夹是“数据库(packs)”,哪些是“静态资源”。 -
静态资源建链接:对于图片、音乐等占空间的大文件,它在目标目录只建立一个“影子(目录联接)”。不占多余硬盘容量。
-
数据库物理复制:对于 LevelDB 数据库,它采用真实的物理复制。这样两个服务器各自拥有独立的数据库,不串车、不报错。
-
热更新防爆:如果在 FVTT 正在运行的时候执行此脚本,遇到被系统锁定的数据库文件,它会跳过并提示,而不会导致程序直接崩溃退出。
最为推荐的日常工作流
把你的【主服务器】当成唯一的修改源,【副服务器】对模组和系统应当是“只读”的。
-
安装与更新模组
-
永远只在【主服务器】里打开“附加模组”和“游戏系统”界面进行安装、更新或卸载操作。
-
不要在副服务器的设置界面里去点“更新模组”。因为副服的文件很多是软链接,直接在副服更新可能导致链接失效或权限错乱。
-
执行同步任务
-
当你在主服更新了几个大模组后。
-
推荐做法:关闭【主副服务器】的进程,然后双击
一键同步模组.bat。 -
为什么关副服:虽然脚本有防爆保护(跳过锁定的数据库),但为了让副服能玩到最新版的模组,关闭副服后再同步,能确保全部数据库被完美物理复制。
-
删除废弃模组
-
如果你决定不再使用某个模组,在【主服务器】中将其卸载删除。
-
下次运行同步脚本时,注意:同步脚本默认是覆盖和增量的。如果你想让副服也彻底删掉那个模组,你需要去副服的
modules文件夹里手动删一下那个残留的文件夹。(或者你可以稍微进阶一点,定期清空副服的modules文件夹,然后跑一遍脚本重新生成,这样最干净)。
-
战役世界的管理
-
再次强调,千万不要去同步
worlds文件夹。 -
世界文件夹包含了各自独立的游戏进程、玩家聊天记录和角色卡。主副服应当各自创建、各自管理自己的 world。
配置教程
暂时无法在飞书文档外展示此内容
暂时无法在飞书文档外展示此内容
第一步:环境准备
本工具基于 Node.js 运行(因为 FVTT 也是基于 Node.js,所以只要你能开Node版本的 FVTT,通常就已经有这个环境了)。
-
确认环境:需要 Node.js 16.7.0 或更高版本。
第二步:保存脚本
-
在你的电脑上新建一个文件夹,比如命名为
FVTT_Sync。 -
在该文件夹内新建一个文本文件,将你上面的 Node.js 代码 复制进去。
-
将该文件重命名为
sync.js(注意后缀是.js,不是.txt)。
第三步:修改配置
用记事本或任何代码编辑器(如 VS Code)打开
sync.js,找到开头的 配置区:// ================= 配置区 =================
const SOURCE_DATA = String.raw`C:\wwwroot\fvtt13\fvttdata13\Data`; // 【源数据】路径:这里放拥有最全模组的主力端 Data 目录
const TARGET_DATA = String.raw`C:\wwwroot\fvtt13\fvttdata13-2\Data`; // 【目标数据】路径:这里放需要被同步的测试端/副端 Data 目录
const SYNC_FOLDERS =["modules", "systems"]; // 需要同步的文件夹,一般不需要改
// ==========================================
-
修改路径:把你自己的实际主服务器
Data文件夹路径填在SOURCE_DATA里,副服务器路径填在TARGET_DATA里。 -
提示:保留
String.raw和反引号`不变,这样你可以直接复制 Windows 的路径(带有\),不需要手动转义。
一键执行脚本
为了方便每次运行,不用敲繁琐的命令,你可以根据你的系统创建下面的执行脚本,和
sync.js 放在同一个文件夹下。Windows
新建一个记事本,复制以下代码,保存并重命名为
一键同步模组.bat。使用方法:以后每次主服务器更新了模组,直接双击运行这个
一键同步模组.bat 即可(关闭双端的FVTT)@echo off
:: 设置控制台为UTF-8编码,防止中文乱码
chcp 65001 >nul
title Foundry VTT 数据同步工具
echo ==============================================
echo 检查 Node.js 运行环境...
echo ==============================================
node -v >nul 2>&1
if %errorlevel% neq 0 (
echo [错误] 你的电脑没有安装 Node.js!
echo 请前往 https://nodejs.org 下载并安装长期支持版 (LTS)。
echo.
pause
exit
)
echo 环境正常,准备开始同步数据...
echo.
:: 执行同目录下的 sync.js
node sync.js
echo.
echo ==============================================
echo 任务结束,按任意键关闭窗口
echo ==============================================
pause >nul
Linux
新建一个文件名为
run_sync.sh,输入以下代码使用方法:
-
给脚本执行权限:
chmod +x run_sync.sh -
运行脚本:
./run_sync.sh
#!/bin/bash
echo "=============================================="
echo " Foundry VTT 数据同步工具"
echo "=============================================="
# 检查 node 是否安装
if ! command -v node &> /dev/null
then
echo "[错误] 未找到 Node.js 命令,请先安装 Node.js"
exit
fi
# 执行脚本
node sync.js
echo ""
echo "=============================================="
echo " 任务结束"
echo "=============================================="
常见问题与注意事项
-
可以两边服务器都开着的时候运行吗?
-
可以,但有条件:工具支持热更新。但是,如果【源服务器】正在运行并且占用了某个数据库,那个数据库本次更新会被跳过。如果想要 100% 完美的数据库全量更新,建议关闭【目标服务器】后再运行脚本。
-
-
为什么只同步了 modules 和 systems,那 worlds 呢?
-
世界数据包含了每个战役独立的玩家数据、日志和场景配置。双开通常是为了开两个不同的团,所以
worlds强烈建议保持完全独立,不要去同步它。
-
-
我在副服务器里修改了模组的图片,主服务器会变吗?
-
会! 因为静态资源(图片、音乐)是通过“链接”关联的。两边看的是同一份文件。所以,如果要更新模组资源,请统一在主服务器操作,然后运行本脚本同步。
-
-
控制台出现
[运行中跳过] ...是什么意思?-
这是工具的保护机制生效了。说明目标目录的这个模组数据库正在被 Foundry VTT 读写。为了防止把文件覆盖坏,脚本跳过了它。关闭目标 FVTT 服务器后再运行一次即可成功覆盖。
-





















还没有人评论,快来抢沙发吧~