#
反向代理
danger 注意
本节不涉及 OpenAI/Claude 反向代理。这仅涉及 HTTP/HTTPS 反向代理。
Termux 的设置让您感到困惑吗?您是否厌倦了在每个设备上更新和安装 ST?想要组织您的聊天和角色吗?好消息是,您很幸运。本指南将_希望_涵盖如何在您的 PC 上托管 SillyTavern,让您可以从任何地方连接,并在同一台用于运行 AI 模型的 PC 上与您的机器人聊天!
warning 警告
本指南不适合初学者。这将非常技术性。
#
公平警告
info 对于 Windows 用户
本指南不适用于 Windows 用户。我们建议使用 Linux 虚拟机或 WSL2 来按照本指南操作。
您需要为自己购买一个域名,并为您的 SillyTavern 页面配置一个 CNAME。我们建议在 Cloudflare 上添加或购买域名,因为本指南将介绍如何使用 Cloudflare 本身来完成这项工作。
#
安装
#
Linux(裸机 SillyTavern)
对于 Linux,我们将通过 Traefik 反向代理 SillyTavern。还有其他选项,如 NGINX 或 Caddy,但在本指南中,我们将使用 Traefik,因为这是我们自己使用的。
使用
ifconfig或从路由器获取计算机的私有 IP。info 提示
建议将您的私有 IP 设置为静态 IP。请参考您的路由器手册或 Google 来配置静态 IP。
通过 Google 搜索
what's my ip获取调制解调器的公共 IP。info 关于公共 IP
大多数住宅/家庭网络使用动态 IP,这些 IP 在使用数月后会更新。如果您有动态 IP,请使用 DDClient 或记得经常在 Cloudflare 仪表板上检查和更改您的公共 IP。
按照此处的 Docker 安装指南安装 Docker。
danger 注意
不要安装 Docker Desktop。
- 按照此处的 Docker 安装后指南中的以非 root 用户身份管理 Docker步骤进行操作。
进入 Linux 的根文件夹并创建一个名为
docker的新文件夹。cd / sudo mkdir docker && cd docker执行
chown,将替换为您的 Linux 用户名,以设置 docker 文件夹中的权限。 sudo chown -R <USER>:<USER> .在 docker 文件夹内创建一个名为
secrets的文件夹,在 secrets 内创建cloudflare。mkdir secrets && mkdir secrets/cloudflare在 docker 文件夹内创建一个名为
appdata的文件夹,在 appdata 内创建traefik。之后进入appdata/traefik文件夹。mkdir appdata && mkdir appdata/traefik cd appdata/traefik使用
touch创建一个 acme.json 文件,并将其权限设置为 600。touch acme.json chmod 600 acme.json使用
nano或类似的编辑器,创建一个名为 traefik.yml 的文件并粘贴以下内容。将模板电子邮件替换为您自己的电子邮件,然后保存文件。api: dashboard: true debug: true insecure: true entryPoints: http: address: ":80" http: redirections: entryPoint: to: https scheme: https https: address: ":443" serversTransport: insecureSkipVerify: true providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false file: filename: /config.yml watch: true certificatesResolvers: cloudflare: acme: email: YOUR_CLOUDFLARE_EMAL@DOMAIN.com storage: acme.json dnsChallenge: provider: cloudflare #disablePropagationCheck: true # 如果您通过 cloudflare 拉取证书时遇到问题,请取消注释此行。将此标志设置为 true 会禁用等待 TXT 记录传播到所有权威名称服务器的需求。 resolvers: - "1.1.1.1:53" - "1.0.0.1:53"返回到
docker文件夹。cd /docker使用
nano或类似的编辑器,创建一个名为 docker-compose.yaml 的文件并粘贴以下内容。之后保存文件。secrets: CF_DNS_API_KEY: file: ./secrets/cloudflare/CF_DNS_API_KEY services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped secrets: - CF_DNS_API_KEY ports: - 80:80 - 443:443 - 8080:8080 environment: CLOUDFLARE_DNS_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY CLOUDFLARE_ZONE_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./appdata/traefik/traefik.yml:/traefik.yml:ro - ./appdata/traefik/config.yml:/config.yml:ro - ./appdata/traefik/acme.json:/acme.json - /etc/localtime:/etc/localtime:ro networks: internal: driver: bridge- 登录 Cloudflare 并点击您的域名,然后点击 Get your API token。
点击 Create Token,然后点击 Create Custom Token,确保您给予令牌以下权限。
info 令牌权限
Zone -> DNS -> Edit
Zone -> Zone -> Read
点击 Continue to summary,然后点击 Create Token。
- 复制给您的令牌密钥并将其存储在安全的地方。
cd进入secrets/cloudflare,使用nano或类似的编辑器,创建一个名为 CF_DNS_API_KEY 的文件并在其中粘贴您的密钥。返回到您的域名页面并转到 DNS。使用 Add record 创建新记录,并创建两个如下所示的 A 类型密钥。将
PUBLIC_IP替换为您自己的公共 IP,然后点击 Save。创建另一个
CNAME类型的记录,然后点击 Save。以下是它在 Cloudflare 仪表板上应该显示的示例。cd进入 appdata/traefik,使用nano或类似的编辑器,创建一个名为 config.yml 的文件并粘贴以下内容。将PRIVATE_IP替换为您获得的私有 IP,将silly.DOMAIN.com替换为您的子域名和域名页面的名称,然后保存文件。http: routers: sillytavern: entryPoints: - "https" rule: "Host(`silly.DOMAIN.com`)" middlewares: - https-redirectscheme tls: {} service: sillytavern services: sillytavern: loadBalancer: servers: - url: "http://PRIVATE_IP:8000" passHostHeader: true middlewares: https-redirectscheme: redirectScheme: scheme: https permanent: true使用以下命令运行 Docker Compose:
cd /docker docker compose up -d进入您的 SillyTavern 文件夹并编辑
config.yaml以启用监听模式和基本认证,同时禁用whitelistMode。listen: yes whitelistMode: false basicAuthMode: truewarning 提示
确保将默认用户名和密码更改为您能记住的强密码。
或者使用 SillyTavern 账户作为用户名和密码:
basicAuthMode: true enableUserAccounts: true perUserBasicAuth: truewarning 提示
在启用 perUserBasicAuth 之前,确保您有一个带有有效密码的多用户设置。
等待几分钟,然后打开您为 ST 创建的域名页面。最后,您应该能够从任何地方只使用一个 URL 和一个账户就能打开 SillyTavern。
info 提示
如果几分钟后什么都没有发生,请检查 Traefik 的容器日志是否有任何可能的错误。
- 尽情享受!:D
#
Linux(Docker SillyTavern)
warning 注意
请注意,我们在裸机上运行 SillyTavern 而不是 Docker。这是我们在 Docker 上使用其他 Docker 容器与 ST 一起使用时的粗略想法。
- 按照 **Linux(裸机 SillyTavern)**的步骤 1-11 操作。
- 登录 Cloudflare 并点击您的域名,然后点击 Get your API token。
点击 Create Token,然后点击 Create Custom Token,确保您给予令牌以下权限。
info 令牌权限
Zone -> DNS -> Edit
Zone -> Zone -> Read
点击 Continue to summary,然后点击 Create Token。
- 复制给您的令牌密钥并将其存储在安全的地方。
cd进入secrets/cloudflare,使用nano或类似的编辑器,创建一个名为 CF_DNS_API_KEY 的文件并在其中粘贴您的密钥。返回到您的域名页面并转到 DNS。使用 Add record 创建新记录,并创建两个如下所示的 A 类型密钥。将
PUBLIC_IP替换为您自己的公共 IP,将示例域名替换为您的域名,然后点击 Save。创建另一个
CNAME类型的记录,然后点击 Save。以下是它在 Cloudflare 仪表板上应该显示的示例。将 SillyTavern Git clone 到
docker文件夹中。cd /docker && git clone https://github.com/SillyTavern/SillyTavern使用
nano或类似的编辑器,创建一个名为 docker-compose.yaml 的文件并粘贴以下内容。将silly.DOMAIN.com替换为您在上面添加的子域名,然后保存文件。secrets: CF_DNS_API_KEY: file: ./secrets/cloudflare/CF_DNS_API_KEY services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped secrets: - CF_DNS_API_KEY ports: - "80:80" - 443:443 - 8080:8080 environment: CLOUDFLARE_DNS_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY CLOUDFLARE_ZONE_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./appdata/traefik/traefik.yml:/traefik.yml:ro - ./appdata/traefik/config.yml:/config.yml:ro - ./appdata/traefik/acme.json:/acme.json - /etc/localtime:/etc/localtime:ro sillytavern: build: ./SillyTavern container_name: sillytavern hostname: sillytavern image: ghcr.io/sillytavern/sillytavern:latest volumes: - "./appdata/sillytavern/config:/home/node/app/config" - "./appdata/sillytavern/data:/home/node/app/data" restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.sillytavern.entrypoints=http" - "traefik.http.routers.sillytavern.rule=Host(`silly.DOMAIN.com`)" - "traefik.http.middlewares.sillytavern-https-redirect.redirectscheme.scheme=https" - "traefik.http.routers.sillytavern.middlewares=sillytavern-https-redirect" - "traefik.http.routers.sillytavern-secure.entrypoints=https" - "traefik.http.routers.sillytavern-secure.rule=Host(`silly.DOMAIN.com`)" - "traefik.http.routers.sillytavern-secure.tls=true" - "traefik.http.routers.sillytavern-secure.service=sillytavern" - "traefik.http.services.sillytavern.loadbalancer.server.port=8000" networks: internal: driver: bridge使用以下命令运行 Docker Compose:
docker compose up -d停止 SillyTavern Docker 容器。
docker compose stop sillytavern进入您的 SillyTavern 文件夹(
appdata/sillytavern/config)并编辑config.yaml以启用监听模式和基本认证,同时禁用whitelistMode。listen: yes whitelistMode: false basicAuthMode: truewarning 提示
确保将默认用户名和密码更改为您能记住的强密码。
再次启动 SillyTavern Docker 容器。
docker compose up -d sillytavern等待几分钟,然后打开您为 ST 创建的域名页面。最后,您应该能够从任何地方只使用一个 URL 和一个账户就能打开 SillyTavern。
info 提示
如果几分钟后什么都没有发生,请检查 Traefik 的容器日志是否有任何可能的错误。
- 尽情享受!:D
#
更新您的 Cloudflare DNS
DDClient 允许您在 ISP 更改公共 IP 的情况下将公共 IP 同步到 Cloudflare,让您可以继续访问您的 ST 实例,就像什么都没发生一样。