LLM Frontend for Power Users
本仓库基于 SillyTavern 1.18.0 官方版本,在其上通过「外挂模块 / Sidecar Module」方式集成了
SillyTavernchat (STC-MOD) 的一系列管理与运营功能,同时尽量保持对上游的 低侵入、易升级。
src/stc-mod/ 目录下,所有二开逻辑集中于此:
src/server-main.js),具体见
MODIFICATIONS.md。本仓库既可当作「开箱即用的 SillyTavern + 站点运营套件」,也可作为后续跟进官方版本时的二开基线。
以下步骤以仓库地址
https://github.com/zhaiiker/SillyTavernMOD为例,假设当前工作目录为项目根目录。说明:当前仓库已合并为唯一维护分支,今后安装、更新与二次开发都默认基于当前默认分支进行,无需再手动切换历史功能分支。
git clone https://github.com/zhaiiker/SillyTavernMOD.git
cd SillyTavernMOD
npm install
sh start.sh 或 npm run start
首次运行前,请先在项目根目录创建 config.yaml(如不存在,可从 default/config.yaml 复制一份):
cp default/config.yaml ./config.yaml # 若文件已存在可跳过
然后编辑根目录下的 config.yaml,确认以下内容存在且缩进正确:
basicAuthMode: true
basicAuthUser:
username: "admin"
password: "123456"
basicAuthMode: true:默认开启 HTTP Basic Auth 保护,防止云服务器直接暴露在公网。default-user 直接点击登录不需要如密码就可以进入后台,然后需要给默认管理员设置密码。本地或服务器前台启动(调试阶段推荐):
node server.js --host 0.0.0.0 --port 8000
或使用 npm 脚本(等价于上方命令的默认参数):
npm run start
默认访问地址:
http://127.0.0.1:8000/http://127.0.0.1:8000/public-charactershttp://127.0.0.1:8000/forum云服务器上请将
127.0.0.1换成你的公网 IP 或域名,例如:http://your-ip:8000/。
本仓库已在 Docker Hub 提供预构建镜像:zhaiker/sillytavernmod:latest
适合不想本地装 Node/npm、只想一条命令跑起来的用户。
容器内应用目录为 /home/node/app,持久化时请把 配置、用户数据、插件、第三方扩展 分别挂到对应路径(见下表)。不要把宿主机某个目录错误地挂到 config(例如把名为 data 的文件夹挂到 .../config),否则配置与用户数据会混在一起。
| 宿主机目录(示例) | 容器内路径 | 用途 |
|---|---|---|
.../config | /home/node/app/config | config.yaml 等 |
.../data | /home/node/app/data | 用户聊天、角色卡、上传等数据 |
.../plugins | /home/node/app/plugins | 服务端插件(可选) |
.../extensions | /home/node/app/public/scripts/extensions/third-party | 第三方前端扩展(可选;空目录时首次启动会写入 stc-admin-panel) |
不建议将宿主机目录挂载到整个 /home/node/app/public:会覆盖镜像里已通过构建打包好的前端静态资源,容易导致页面空白或版本不一致。除非你在宿主机自行维护一份与镜像版本一致的完整 public 目录,否则请只按上表挂载。
docker run(当前目录、相对路径)在准备存放数据的目录下执行(首次运行前可先 mkdir -p config data plugins extensions):
docker run -d \
--name sillytavernmod \
--restart unless-stopped \
-p 8000:8000 \
-v ./config:/home/node/app/config \
-v ./data:/home/node/app/data \
-v ./plugins:/home/node/app/plugins \
-v ./extensions:/home/node/app/public/scripts/extensions/third-party \
zhaiker/sillytavernmod:latest
在宿主机先创建目录(示例使用 /root/sillytavern,可按需改为其他路径):
mkdir -p /root/sillytavern/{config,data,plugins,extensions}
再启动容器:
docker run -d \
--name sillytavern \
--restart unless-stopped \
-p 8000:8000 \
-v /root/sillytavern/config:/home/node/app/config \
-v /root/sillytavern/data:/home/node/app/data \
-v /root/sillytavern/plugins:/home/node/app/plugins \
-v /root/sillytavern/extensions:/home/node/app/public/scripts/extensions/third-party \
zhaiker/sillytavernmod:latest
说明:
--restart unless-stopped:宿主机或 Docker 重启后容器会自动拉起(除非曾被手动 stop)。--name:容器名可自定(上例分别为 sillytavernmod 与 sillytavern)。-p 8000:8000:宿主机与容器端口映射,可按需改为例如 -p 127.0.0.1:8000:8000 仅本机访问。config / data / plugins / extensions 四个挂载点:分别对应配置、用户数据、服务端插件、第三方前端扩展;data 必须挂到 .../data,config 必须挂到 .../config,二者不可对调。extensions 挂载到 public/scripts/extensions/third-party 时,若宿主机目录为空,首次启动会从镜像内恢复 STC 管理面板(stc-admin-panel);若你自行放入其它扩展,请尽量保留其中的 stc-admin-panel 目录,或依赖上述自动恢复逻辑。启动完成后,浏览器访问:
http://服务器IP:8000/(或 http://127.0.0.1:8000/ 若仅本机映射)容器启动脚本会在缺少
config/config.yaml时,自动从default/config.yaml拷贝一份,并执行npm run postinstall补全缺省字段;
首次登录 / Basic Auth 流程 与上面「运行与基础使用」章节完全一致。
docker-composedocker 目录:git clone https://github.com/zhaiiker/SillyTavernMOD.git
cd SillyTavernMOD/docker
docker-compose.yml 中镜像名为:image: zhaiker/sillytavernmod:latest
docker compose up -d
docker pull zhaiker/sillytavernmod:latest
cd SillyTavernMOD/docker
docker compose down
docker compose up -d
docker 用户的更新(无 compose)如果一开始用的是 方式一 的 docker run(没有 compose 文件),
也可以用下面几条命令把容器升到 Docker Hub 上的最新镜像:
# 1. 拉取 Docker Hub 上的最新镜像
docker pull zhaiker/sillytavernmod:latest
# 2. 停止并删除旧容器(挂载的 config/data/plugins/extensions 不会被删除)
docker stop sillytavernmod && docker rm sillytavernmod
# 3. 用之前完全相同的 `docker run ...` 命令重新启动(见方式一)
# 比如:
docker run -d \
--name sillytavernmod \
--restart unless-stopped \
-p 8000:8000 \
-v ./config:/home/node/app/config \
-v ./data:/home/node/app/data \
-v ./plugins:/home/node/app/plugins \
-v ./extensions:/home/node/app/public/scripts/extensions/third-party \
zhaiker/sillytavernmod:latest
仓库的默认分支(
release)每次有新提交时,GitHub Actions 会自动构建linux/amd64+linux/arm64多架构镜像并推送到 Docker Hub:
zhaiker/sillytavernmod:latest— 最新版(推荐普通用户使用)zhaiker/sillytavernmod:release-<短 SHA>— 便于回退到某一次具体构建普通用户无需自己
git pull/ 重新构建,只要docker pull ... :latest然后重启容器即可拿到更新。
通过 Basic Auth 进入站点
http://服务器IP:8000/。admin123456default-user 直接点击登录不需要如密码就可以进入后台,然后需要给默认管理员设置密码。为本地管理员设置密码
default-user (admin))登录。关闭 Basic Auth(可选,但不建议在公网完全裸奔)
确认所有管理员账户已设置密码后,可在根目录 config.yaml 中将:
basicAuthMode: false
保存退出,并重启服务。此后访问站点将不再弹出浏览器级别的用户名/密码框,只保留 SillyTavern 自身的登录校验。
若以后希望再次启用 Basic Auth,只需将
basicAuthMode改回true即可。
在服务器上建议使用 PM2 管理进程,避免 SSH 断开导致服务退出:
npm install -g pm2
pm2 start server.js --name sillytavern -- \
--host 0.0.0.0 --port 8000
pm2 save
pm2 startup # 按提示执行生成的命令,设置开机自启
查看运行日志:
pm2 logs sillytavern
STC-MOD 的主要能力包括(非完整列表):
所有后端路由均通过 src/stc-mod/index.js 注册,前端管理与入口则通过
public/scripts/extensions/third-party/stc-admin-panel/ 扩展注入。
当前仓库已合并为单一维护分支,所有二次开发、功能迭代与 Bug 修复均在此分支上进行,不再维护其他功能分支。
为了在跟进上游 SillyTavern 版本时减少冲突,本项目遵循以下原则:
src/stc-mod/ 目录(routes/、services/、user-metadata.js 等)。src/stc-mod/public/ 与 public/scripts/extensions/third-party/stc-admin-panel/。升级官方 SillyTavern 版本时,建议流程:
src/stc-mod/ 内部实现,而不是继续扩散对官方代码的修改范围。本仓库相对于官方 SillyTavern 的所有 核心文件改动 与 新增 Sidecar 结构说明,已完整记录在:
若你准备:
请务必先阅读该文件。
Upstream Resources
License
本项目沿用上游 SillyTavern 许可协议:
Content type
Image
Digest
sha256:c7fad7cd1…
Size
201.4 MB
Last updated
18 days ago
docker pull zhaiker/sillytavernmod