#
反向代理
注意
本部分不涉及 OpenAI/Claude 反向代理。这里专门讨论 HTTP/HTTPS 反向代理。
Termux 设置起来很复杂?厌倦了在每个设备上更新和安装 ST?想要整理你的聊天和角色?那么你很幸运。本指南将_希望_涵盖如何在您的 PC 上托管 SillyTavern,您可以随时随地连接,并在运行 AI 模型的同一台 PC 上与您的机器人聊天!
警告
本指南不适合初学者。这将是非常技术性的。
#
公平警告
对于 Windows 用户
本指南不适合 Windows 用户。我们建议使用 Linux VM 或 WSL2 来遵循本指南。
您必须为自己购买一个域名,并为您的 SillyTavern 页面配置一个 CNAME。我们建议在 Cloudflare 上添加或购买域名,因为本指南将涵盖如何使用 Cloudflare 本身进行操作。
#
安装
#
Linux (裸机 SillyTavern)
对于 Linux,我们将通过 Traefik 反向代理 SillyTavern。还有其他选项,如 NGINX 或 Caddy,但在本指南中,我们将使用 Traefik,因为这是我们亲自使用的。
使用
ifconfig或从路由器获取您计算机的私有 IP。提示
建议将您的私有 IP 设置为静态 IP。请参考您的路由器手册或 Google 以配置静态 IP。
通过 Google 搜索
what's my ip获取您调制解调器的公共 IP。关于公共 IP
大多数住宅/家庭网络使用动态 IP,在使用数月后会续订。如果您有动态 IP,请使用 DDClient 或记得经常在 Cloudflare 仪表板上检查和更改您的公共 IP。
按照 Docker 安装指南 这里 安装 Docker。
注意
不要安装 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 # uncomment this if you have issues pulling certificates through cloudflare, By setting this flag to true disables the need to wait for the propagation of the TXT record to all authoritative name servers. 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 并点击您的域名,然后点击获取您的 API 令牌。
点击_创建令牌_然后_创建自定义令牌_,确保您为令牌提供以下权限。
令牌权限
区域 -> DNS -> 编辑
区域 -> 区域 -> 读取
点击_继续到摘要_然后_创建令牌_。
- 复制给您的令牌密钥并将其存储在安全的地方。
cd进入secrets/cloudflare并使用nano或类似的编辑器,创建一个名为 CF_DNS_API_KEY 的文件并将您的密钥粘贴到里面。返回您的域名页面并转到DNS。使用添加记录创建一个新记录,并创建两个如下所示的 A 类型密钥。将
PUBLIC_IP替换为您自己的公共 IP,然后点击_保存_。创建另一个
CNAME类型的记录,然后点击_保存_。以下是在 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: true提示
确保将默认用户名和密码更改为您可以记住的强密码。
或者使用 SillyTavern 账户作为用户名和密码:
basicAuthMode: true enableUserAccounts: true perUserBasicAuth: true提示
在启用 perUserBasicAuth 之前,请确保您有一个有效的多用户设置和工作密码。
等待几分钟,然后打开您为 ST 创建的域名页面。最后,您应该能够从任何地方仅使用一个 URL 和一个帐户打开 SillyTavern。
提示
如果几分钟后没有任何反应,请检查 Traefik 的容器日志以查找任何可能的错误。
- 享受吧!:D
#
Linux (Docker SillyTavern)
注意
请注意,我们在裸机上运行 SillyTavern 而不是在 Docker 上。这是我们在 Docker 上与 ST 一起使用的其他 Docker 容器的粗略想法。
- 按照 Linux (裸机 SillyTavern) 的步骤 1-11 操作。
- 登录 Cloudflare 并点击您的域名,然后点击获取您的 API 令牌。
点击_创建令牌_然后_创建自定义令牌_,确保您为令牌提供以下权限。
令牌权限
区域 -> DNS -> 编辑
区域 -> 区域 -> 读取
点击_继续到摘要_然后_创建令牌_。
- 复制给您的令牌密钥并将其存储在安全的地方。
cd进入secrets/cloudflare并使用nano或类似的编辑器,创建一个名为 CF_DNS_API_KEY 的文件并将您的密钥粘贴到里面。返回您的域名页面并转到DNS。使用添加记录创建一个新记录,并创建两个如下所示的 A 类型密钥。将
PUBLIC_IP替换为您自己的公共 IP 并将示例域名替换为您的域名,然后点击_保存_。创建另一个
CNAME类型的记录,然后点击_保存_。以下是在 Cloudflare 仪表板上应如何显示的示例。将 SillyTavern Git 克隆到
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: true提示
确保将默认用户名和密码更改为您可以记住的强密码。
再次启动 SillyTavern Docker 容器。
docker compose up -d sillytavern等待几分钟,然后打开您为 ST 创建的域名页面。最后,您应该能够从任何地方仅使用一个 URL 和一个帐户打开 SillyTavern。
提示
如果几分钟后没有任何反应,请检查 Traefik 的容器日志以查找任何可能的错误。
- 享受吧!:D
#
更新您的 Cloudflare DNS
DDClient 允许您在 ISP 更改公共 IP 时将其同步到 Cloudflare,让您能够继续访问您的 ST 实例,就好像什么都没有发生一样。