# 远程连接

最常见的情况是人们想在同一个 WiFi 网络内通过手机使用 SillyTavern,而 PC 运行着 ST 服务器。

这也是允许从本地网络外部进行远程连接的第一步。

# 允许远程连接

默认情况下,ST 服务器只接受来自运行它的机器(localhost)的连接。要允许它监听来自其他设备的连接,请在 config.yaml 中将 listen 选项设置为 true

# 监听传入连接
listen: true

当 ST 正在监听远程连接时,您应该在控制台中看到这条消息:

SillyTavern is listening on IPv4: 0.0.0.0:8000

以及一些关于这意味着什么的解释。

当 ST 没有监听远程连接时,您应该在控制台中看到这条消息:

SillyTavern is listening on IPv4: 127.0.0.1:8000

# 访问控制配置

启用远程连接监听后,您必须至少配置一种访问控制方法。否则,服务器将无法启动。

# 基于白名单的访问控制

要通过白名单启用访问控制,请编辑 SillyTavern 根目录中的 config.yaml 文件(/SillyTavern/config.yaml):

  1. 至少启动一次 SillyTavern 以生成必要的配置文件。
  2. 在文本编辑器中打开 /SillyTavern/config.yaml
  3. 找到 whitelist 部分并添加您希望允许的 IP 地址:
    • 分别列出每个 IP 地址。
    • 确保包含 127.0.0.1,否则您将无法从主机连接。
    • 支持单个 IP、CIDR 掩码(如 10.0.0.0/24)和通配符(*)范围。
  4. 保存 config.yaml 文件。
  5. 重启您的 SillyTavern 服务器。

# config.yaml 白名单配置示例

  1. 允许本地网络上的任何设备:

    whitelist:
      - ::1
      - 127.0.0.1
      - 10.0.0.0/8
      - 172.16.0.0/12
      - 192.168.0.0/16

    如果不确定您的本地网络地址范围,请使用上面的白名单。

  2. 允许两个特定设备连接:

    whitelist:
      - ::1
      - 127.0.0.1
      - 192.168.0.2
      - 192.168.0.5
  3. 允许 192.168.0.* 子网上的任何设备连接:

    whitelist:
      - ::1
      - 127.0.0.1
      - 192.168.0.*

# 禁用基于白名单的访问控制

要禁用通过白名单的访问控制:

  • /SillyTavern/config.yaml 中将 whitelistMode 设置为 false
  • 删除或重命名 SillyTavern 基本安装文件夹中的 whitelist.txt(如果存在)。
  • 重启您的 SillyTavern 服务器。

# 不推荐:使用 whitelist.txt

如果您仍然更喜欢使用 whitelist.txt:

  1. 在 SillyTavern 基本安装文件夹中创建一个名为 whitelist.txt 的新文本文件。
  2. 在文本编辑器中打开它并添加允许的 IP 地址。
  3. 保存文件并重启您的 SillyTavern 服务器。

# whitelist.txt 配置示例

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
127.0.0.1
::1

这允许本地网络上的任何设备连接。

# 通过 HTTP 基本认证进行访问控制

当客户端通过 HTTP 连接时,服务器将要求用户名和密码。这仅在启用远程连接(listen: true)时有效。

要启用 HTTP BA,在 SillyTavern 基本目录中打开 config.yaml 并搜索 basicAuthMode。将 basicAuthMode 设置为 true 并设置用户名和密码。注意:只有在 ST 至少执行过一次后,config.yaml 才会存在。

basicAuthMode: true
basicAuthUser:
  username: "MyUsername"
  password: "MyPassword"

或者,您可以按如下方式启用基本认证:

basicAuthMode: true
enableUserAccounts: true
perUserBasicAuth: true

在这种 perUserBasicAuth 模式下,基本认证的用户名和密码将与任何有密码的有效多用户账户相同。此外,SillyTavern 将直接登录到该账户。在启用 perUserBasicAuth 之前,请确保您有一个带密码的账户。

保存文件,如果 SillyTavern 已经在运行,请重启它。连接到您的 ST 时,系统应该会提示您输入用户名和密码。用户名和密码都以明文传输。如果您担心这一点,可以通过 HTTPS 提供 ST 服务。

# 连接到您的 SillyTavern 实例

# 获取 ST 主机的 IP 地址

设置白名单后,您需要 ST 主机设备的 IP。

如果 ST 主机设备在同一个 wifi 网络上,您将使用 ST 主机的内部 wifi IP:

  • 对于 Windows:Windows 按钮 > 在搜索栏中输入 cmd.exe > 在控制台中输入 ipconfig,按 Enter > 查找 IPv4 列表。

如果您(或其他人)想在不在同一网络上时连接到您托管的 ST,您需要 ST 主机设备的公共 IP。

  • 使用 ST 主机设备时,访问此页面并查找 IPv4。这就是您从远程设备连接时要使用的地址。

# 连接到 ST 服务器

无论您在您的情况下得到了什么 IP,您都将在远程设备的网络浏览器中输入该 IP 地址和端口号。

同一 wifi 网络上的 ST 主机的典型地址看起来像:

http://192.168.0.5:8000

使用 http:// 而不是 https://

# 连接日志

新的服务器连接会显示在控制台窗口中,并记录在 SillyTavern 基本目录的 access.log 文件中。

来自服务器所在机器上的浏览器的控制台消息看起来像:

New connection from 127.0.0.1; User Agent: ...

来自与服务器在同一网络上的不同机器上的浏览器的控制台消息可能看起来像:

New connection from 192.168.116.187; User Agent: ...

如果连接被拒绝,控制台消息将看起来像:

New connection from 192.168.116.211; User Agent: ...

Forbidden: Connection attempt from 192.168.116.211. If you are attempting to connect, 
please add your IP address in whitelist or disable whitelist mode in config.yaml in 
root of SillyTavern folder.

access.log 将包含带有时间戳的连接信息,但不包含连接是否被接受或拒绝的信息。

# 故障排除

仍然无法连接?

  • 如果连接尝试出现在控制台中,但被禁止,这是一个白名单问题
  • 如果 ST 正在监听远程连接但连接尝试没有出现在控制台中,这是一个网络问题
  • 如果 ST 没有监听远程连接,这是一个读取问题

# 网络问题

  • 在 Windows 上,应用程序可能被应用程序防火墙阻止。最快的解决方法是卸载并重新安装 node.js,当防火墙提示时,允许它访问网络。否则,您需要手动允许 node.js 应用程序通过 Windows 应用程序防火墙。
  • 在 Windows 11 上,在设置 > 网络和 Internet > 以太网中启用私有网络配置文件类型。这对 Windows 11 来说非常重要,否则,即使有上述防火墙规则,您也无法连接。
  • 在 Linux 上,您可能需要允许端口通过防火墙。执行此操作的命令是 sudo ufw allow 8000。这将允许端口 8000 上的流量。

不要修改路由器上的端口转发设置。这对于在本地网络内访问 ST 不是必需的,而且可能会将您的服务器暴露给互联网。

如果您正在尝试从本地网络外部访问您的 ST 服务器,并且它不工作,请确定问题是出在远程设备和隧道/VPN 端点之间,还是在服务器上的隧道端点和 ST 服务之间。否则,您将花费大量时间排除错误的问题。

# HTTPS

# 使用 TLS/SSL 启动 SillyTavern

要加密与您的 ST 实例之间的流量,请使用 --ssl 标志启动服务器。

示例:

node server.js --ssl

默认情况下,ST 将在 certs 文件夹中搜索您的证书。如果您的文件位于其他位置,您可以使用 --keyPath--certPath 参数。

示例:

node server.js --ssl --keyPath /home/user/certificates/privkey.pem --certPath /home/user/certificates/cert.pem

The user you're running SillyTavern with requires read permissions on the certificate files.

# How to get a certificate

The simplest, quickest way to get a certificate is by using certbot.