SillyTavern PWA 功能折腾记录

一直很喜欢 L 站支持的 PWA 功能,然后想在 SillyTavern 中也使用它。昨天尝试了一下,发现 SillyTavern 本身就支持 PWA 功能。能够直接用 Chrome 或 Firefox “安装”到桌面。“安装”到桌面后就非常沉浸了,会全屏显示,隐藏地址栏。


  • 推荐使用 Chrome 或 Chromium 内核浏览器,对 PWA 支持比较好。
  • 不推荐 Firefox,除非你是使用的在线的服务。Firefox 对自签证书支持较差。
  • Safari 没有测试,下面不会提及。
  • 测试使用的是 Windows 11 和 HyperOS 3(Android 16)。

在线版 SillyTavern

如果使用的是在线的或者别人搭建的 SillyTavern 服务的话,如果是通过 https 连接的,应该可以直接安装(Chrome、Firefox)。


本地运行的情况

本地运行的话,可以采用下面的方案之一(本地我个人只推荐用 Chrome,Firefox 对自签证书支持不太好)。 方案一比较麻烦,但相对安全一点。方案一安全的前提是妥善保管 CA 证书的私钥文件。方案一也可以不使用 OpenSSL,换成 mkcert,当然内容会不一样。 如果不介意 http 的话,直接使用方案二更方便。

方案一(Https):在本地创建自签证书

需要一个可以使用 OpenSSL 的环境。如果你安装了 Git,一般都会带着它。 需要在路由器的 DHCP 设置里面给 PC 分配静态 IP(按 MAC 绑定 IP),让 PC 始终拿到内网的同一个 IP。 大概逻辑是利用 OpenSSL 在本地生成一套自签 CA(1年有效期),并用它签发服务端证书(1年有效期),服务端证书绑定的 IP 是 PC 的IP。

PC 端配置

第一部分:CA 证书
  1. 进入安装 SillyTavern 的根目录。
  2. 创建新的文件夹,重命名为 certs
  3. 进入 certs 文件夹,右键选择新建文本文档,重命名为 ca.conf
  4. 将下面的内容复制到 ca.conf 中,并保存。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[req]
distinguished_name = dn
x509_extensions = v3_ca
prompt = no

[dn]
C = CN
O = SillyTavern
OU = Home
CN = SillyTavern Home CA

[v3_ca]
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, keyCertSign, cRLSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
  1. certs 目录的空白处右键,选择 Open Git Bash here
  2. 在弹出的窗口中输入下面的指令。这条指令会根据 ca.conf 生成两个密钥文件。
    • 公钥:ca.crt 是包含公钥的 CA 证书,后续要把它导入到手机中
    • 私钥:ca.key 是私钥,务必妥善保存,不要把它导入到手机中。推荐执行下面完全部步骤后把它从电脑上直接删除。
1
2
openssl genrsa -aes256 -out ca.key 4096
openssl req -x509 -new -days 365 -key ca.key -out ca.crt -config ca.conf -sha256
  1. 执行上面的命令会提示 Enter PEM pass phrase:,就是让你输密码,输入完成后需要回车。总共三次,输入、确认、再次输入。需要记住这个密码。
第二部分:服务端证书
  1. 回到 certs 文件夹,右键选择新建文本文档,重命名为 server.conf
  2. 将下面的内容复制到 server.conf 中,并保存。需要手动修改其中的 IP 地址。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[req]
distinguished_name = dn
req_extensions = v3_server
prompt = no

[dn]
C = CN
O = SillyTavern
OU = Server
# 请确保下面的 IP 替换为你的主机 IP。比如路由器给电脑分配的 IP 是 192.168.1.1,就修改为 192.168.1.1。
CN = 192.168.x.xx

[v3_server]
basicConstraints = critical, CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
# 请确保下面的 IP 替换为你的主机 IP。比如路由器给电脑分配的 IP 是 192.168.1.1,就修改为 192.168.1.1。
IP.1 = 192.168.x.xx
  1. certs 目录的空白处右键,选择 Open Git Bash here
  2. 在弹出的窗口中输入下面的指令。这条指令会根据 server.conf 生成两个密钥文件(专门给 SillyTavern 用的)。
1
2
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -config server.conf
  1. 然后执行下面的命令。执行后会提示 Enter PEM pass phrase:,输入第 7 步设置的密码。
1
2
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -out server.crt -days 365 -sha256 -extfile server.conf -extensions v3_server
  1. 最后只需要保留 ca.crtserver.crtserver.key 就行。其他全部删除,尤其是 ca.key,不建议联网的 PC 上保留这个文件。
    • 我选择删除了 ca.key 这个文件的话是为了降低误用风险,代价是后续 IP 变化/一年期限到了的话需要从头跑一遍上面的整个流程。

在 SillyTavern 中开启 SSL:

  1. 进入安装 SillyTavern 的根目录。
  2. 找到 config.yaml 文件。
  3. 打开 config.yaml 文件,搜索 ssl
  4. 找到跟下面一致的配置文件,然后把配置改成下面这样。
1
2
3
4
ssl:
  enabled: true
  certPath: "certs/server.crt"
  keyPath: "certs/server.key"

手机端配置(Android):

  1. 关闭手机上的 Chrome,并确保 Chrome 的后台也被杀死了。
  2. 将之前生成的 ca.crt 文件导入到手机。
  3. 进入手机的设置,直接搜索 证书
  4. 找到 安装证书,选择 CA 证书
  5. 无视警告或者选择仍然安装(对于这种局域网内自己操作的情况是相对安全的,如果是来路不明的证书不要安装)。
  6. 然后选择之前导入的 ca.crt 文件。
  7. 打开 Chrome,现在再连接之前的 SillyTavern 监听地址应该就可以设置 PWA 了(选择 添加到主屏幕)。
    • 需要注意,之前是使用 http 连接的,现在已经是 https 了。例如之前是 http://192.168.1.1:8000,现在就改为 https://192.168.1.1:8000

方案二(Http):

此方案无需生成证书,通过浏览器 Flags 强制开启。这个选项可能会因为 Chrome 版本更新而失效。

  1. 在地址栏输入 chrome://flags (Chromium 内核的都一样)。
  2. 搜索或找到其中的 Insecure origins treated as secure
  3. 在这个选项的空白框处输入你本地链接 SillyTavern 的地址。
    • 例如:你手机连接的地址是 http://192.168.1.1:8000 ,就在这个空白框里面输入 http://192.168.1.1:8000
  4. 将边上的 已停用 更改为 已启动
  5. 重启浏览器。
本站作品采用 CC BY-NC-SA 4.0 协议进行许可。
使用 Hugo 构建
主题 StackJimmy 设计