Reverse proxying
注意
本节内容不涉及 OpenAI/Claude 反向代理。这里专指 HTTP/HTTPS 反向代理。
Termux 的配置是不是让你一头雾水?厌倦了在每台设备上反复更新和安装 SillyTavern?想统一管理你的聊天记录和角色?那你来对地方了。本指南将(希望能)介绍如何将 SillyTavern 托管在你的个人电脑上,让你从任何地方都能连接进来,并在同一台运行 AI 模型的机器上与角色聊天!
警告
本指南不适合新手。内容会涉及较多技术细节。
预先说明
致 Windows 用户
本指南不适用于 Windows 用户。建议使用 Linux 虚拟机或 WSL2 来跟随本指南操作。
你需要自行购买一个域名,并为 SillyTavern 页面配置 CNAME 记录。我们建议通过 Cloudflare 添加或购买域名,本指南将以 Cloudflare 为例进行讲解。
安装
Linux(裸机安装 SillyTavern)
在 Linux 上,我们将通过 Traefik 对 SillyTavern 进行反向代理。虽然也有 NGINX 或 Caddy 等其他选择,但本指南将使用 Traefik,因为这是我们自己在用的方案。
- 使用
ifconfig命令或从路由器管理页面获取本机的私网 IP 地址。提示
建议将私网 IP 设置为静态 IP。请参阅路由器手册或自行搜索如何配置静态 IP。
- 通过搜索
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_EMAIL@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,确保为 token 赋予以下权限:
Token 权限
Zone -> DNS -> Edit
Zone -> Zone -> Read
点击 Continue to summary,然后点击 Create Token。
- 复制生成的 Token Key 并妥善保存。
cd进入secrets/cloudflare,使用nano或其他编辑器创建名为 CF_DNS_API_KEY 的文件,并将 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: true提示
请务必将默认用户名和密码修改为强密码并牢记。
或者,使用 SillyTavern 账户作为用户名和密码:
basicAuthMode: true enableUserAccounts: true perUserBasicAuth: true提示
启用 perUserBasicAuth 之前,请确保你已正确配置多用户模式并设置了有效密码。
- 等待几分钟后,打开你为 ST 创建的域名页面。最终,你将能够通过一个 URL 和一个账户从任何地方访问 SillyTavern。
提示
若等待数分钟后仍无响应,请查看 Traefik 容器日志以排查错误。
- 尽情享用吧!:D
Linux(Docker 安装 SillyTavern)
注意
请注意,我们自己运行的是裸机安装而非 Docker 安装。以下是我们在 Docker 环境下配合其他容器使用 ST 的大致方案。
- 按照**Linux(裸机安装 SillyTavern)**的第 1-11 步操作。
- 登录 Cloudflare,点击你的域名,然后点击 Get your API token。
-
点击 Create Token,再点击 Create Custom Token,确保为 token 赋予以下权限:
Token 权限
Zone -> DNS -> Edit
Zone -> Zone -> Read
点击 Continue to summary,然后点击 Create Token。
- 复制生成的 Token Key 并妥善保存。
cd进入secrets/cloudflare,使用nano或其他编辑器创建名为 CF_DNS_API_KEY 的文件,并将 Key 粘贴进去。-
返回域名页面,进入 DNS。点击 Add record 添加如下两条 A 类型记录。将
PUBLIC_IP替换为你的公网 IP,将示例域名替换为你的域名,然后点击 Save。 -
再添加一条
CNAME类型的记录,然后点击 Save。以下是在 Cloudflare 控制台中的示例效果: - 将 SillyTavern 克隆到
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 时自动将新 IP 同步到 Cloudflare,让你无感知地继续访问 ST 实例。