Ren Ellis
发布于 2026-06-08 / 22 阅读
0
0

在 $5 小鸡上部署 SillyTavern:和 1Panel + VLESS 共存的踩坑记录

## 起因

手头有一台 Vultr 的 $5 小服务器(1vCPU / 1GB RAM),平时主要跑 VLESS 翻墙用,顺便挂了个 Halo 论坛。最近想玩 SillyTavern,又不想专门再开一台机器,就想看看能不能在这台已经塞满东西的小鸡上再叠一层。

最终结论:**完全可以**。SillyTavern 只是个 Node.js 前端,调用外部 LLM API,本身几乎不吃资源。

## 环境

- Ubuntu 24.04

- 1 vCPU / 1 GB RAM / 2GB swap

- 已有服务:

- 1Panel 面板(管理一切)

- OpenResty 容器(占 80/443,反代各种站点)

- Halo 论坛(Docker,端口 8090)

- PostgreSQL(Docker,5432)

- x-ui + xray(VLESS 走 2096 端口)

目标:让 st.renellis.online 跑 SillyTavern,不影响现有服务。

## 部署步骤

### 1. 准备环境

加 swap(1GB 内存跑 npm install 很容易 OOM):

```bash

fallocate -l 2G /swapfile

chmod 600 /swapfile

mkswap /swapfile

swapon /swapfile

echo '/swapfile none swap sw 0 0' >> /etc/fstab

```

装 Node.js 20:

```bash

curl -fsSL https://deb.nodesource.com/setup_20.x | bash -

apt install -y nodejs

```

### 2. 拉取并安装 SillyTavern

```bash

cd /root

git clone https://github.com/SillyTavern/SillyTavern.git -b release

cd SillyTavern

npm install --no-audit --no-fund

./start.sh # 第一次启动生成 config.yaml,然后 Ctrl+C

```

### 3. 修改 config.yaml

关键改动:

```yaml

listen: true

listenAddress:

ipv4: 0.0.0.0 # 后面要让 Docker 容器内的 OpenResty 访问,所以不能只监听 127.0.0.1

ipv6: "[::1]"

whitelistMode: false

enableForwardedWhitelist: false

basicAuthMode: true

basicAuthUser:

username: <自己的用户名>

password: <强密码>

```

> 这里有个坑:因为 1Panel 的 OpenResty 是跑在 Docker 容器里的,它访问宿主机的 127.0.0.1 是容器自己的 localhost,连不到 SillyTavern。所以监听地址必须是 0.0.0.0(或宿主机的 docker0 网桥地址)。安全靠 Basic Auth + HTTPS 兜底。

### 4. 用 systemd 守护

```ini

# /etc/systemd/system/sillytavern.service

[Unit]

Description=SillyTavern

After=network.target

[Service]

Type=simple

User=root

WorkingDirectory=/root/SillyTavern

ExecStart=/usr/bin/node server.js

Restart=on-failure

RestartSec=5

[Install]

WantedBy=multi-user.target

```

```bash

systemctl daemon-reload

systemctl enable --now sillytavern

```

### 5. 在 1Panel 里配反向代理

- 网站 → 创建网站 → 反向代理

- 主域名st.renellis.online

- 代理地址http://172.17.0.1:8000(**重点:必须是 docker0 网桥地址**,不是 127.0.0.1)

- 配置文件里补全 WebSocket 支持:

```nginx

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

proxy_buffering off;

proxy_read_timeout 600s;

```

### 6. 申请 HTTPS

1Panel 站点设置 → HTTPS → Let's Encrypt → HTTP 验证 → 一键申请。

## 然后翻车了

### 翻车 1:VLESS 突然不通

排查过程:

```bash

ufw status

```

发现 ufw 不知道什么时候被启用了(其实是我之前为了限制 8000 端口的访问范围跑了 ufw deny 8000,触发了 ufw 启用),默认拒绝所有入站,把 VLESS 的 2096 端口也挡了。

修复:

```bash

ufw disable

```

反正服务器是 1Panel 在管,靠面板的防火墙就够了。

### 翻车 2:所有域名都返回 SillyTavern 的证书

申请完证书发现 https://renellis.online(论坛)也变成 SillyTavern 的证书了,浏览器报 ERR_CERT_COMMON_NAME_INVALID

诊断命令:

```bash

openssl s_client -connect 127.0.0.1:443 -servername renellis.online </dev/null 2>/dev/null | openssl x509 -noout -subject

```

返回 CN = st.renellis.online——也就是不管访问哪个域名,OpenResty 都用了 SillyTavern 的证书。

原因:1Panel 申请证书的流程里有个提示说"IP 为域名的网站需要设为默认站点",我手贱把 SillyTavern 站点设成默认了,结果 OpenResty 对所有 SNI 都 fallback 到这个站点的证书。

修复:1Panel → 网站 → 取消 SillyTavern 的默认站点设置。

## 最终状态

- https://st.renellis.online → SillyTavern(Basic Auth 保护)

- https://renellis.online → Halo 论坛

- VLESS 端口 2096 → 正常翻墙

- 内存占用:所有东西加起来还剩 200+ MB 空闲

## 经验总结

1. 1GB 内存先加 swap,不然 npm install 必 OOM

2. Docker 化的反代访问宿主机服务,要用 172.17.0.1 而不是 127.0.0.1

3. 不要随便设默认站点,会污染其他域名的 TLS 握手

4. 改 ufw 规则前先确认 ufw 状态,触发自动启用会拉清单挡掉一堆端口

5. SillyTavern 只是前端壳,真正吃资源的是 LLM API 调用(在远端),所以小鸡跑它毫无压力


评论