伊玛目的门徒头像
关注

SillyTavern Docker跨镜像版本迁移记录:核心旧数据(聊天记录、角色卡等等)无损迁到新服务器

SillyTavern Docker 迁移记录:旧数据无损迁到新服务器

背景:由于旧服务器被挖矿,系统进行了完全重装。我把 SillyTavern 迁移到了新服务器 ,并保留了所有用户数据、角色卡、聊天记录和配置。

核心原则:由于之前的版本落后一年多了,想试试新的镜像版本,所以迁移是有风险的。我只迁移 config 和 data 目录,没有迁移旧版的 public 前端代码和旧版构建脚本,否则会导致新版前端白屏或 API 不兼容。

1. 筛选旧备份数据

旧备份里有 config、data、extensions、plugins、public 等目录。我只迁移了两类:

  • config/:保存 API Key、账号密码、UI 设置
  • data/:保存角色卡、聊天记录、世界书、用户数据

没有迁移 public/。它是旧版前端代码,直接覆盖新版镜像会导致前端崩溃。plugins/ 和 extensions/ 也暂时留空,避免旧插件和新版 Node 不兼容。

2. 创建目录并上传数据

mkdir -p /root/sillytavern
cd /root/sillytavern
mkdir -p config data plugins extensions

然后把旧备份里的 config 文件夹和 data.zip 上传到 /root/sillytavern/。

3. 解压 data.zip

先确认压缩包内部结构:

unzip -l data.zip | head -20

发现里面自带一层 data/ 目录,所以直接在当前目录解压即可合并:

unzip -o data.zip

4. 修正文件权限

SillyTavern 容器内部以 node 用户运行,UID 是 1000。用 root 解压后必须改所有权,否则容器可能无法写入配置和数据:

chown -R 1000:1000 /root/sillytavern/

5. 编写 docker-compose.yml

在 /root/sillytavern/ 下创建 docker-compose.yml:

services:
  sillytavern:
    container_name: sillytavern
    hostname: sillytavern
    image: ghcr.io/sillytavern/sillytavern:latest
    environment:
      - NODE_ENV=production
      - FORCE_COLOR=1
      - SILLYTAVERN_HEARTBEATINTERVAL=30
    ports:
      - "8001:8000"
    volumes:
      - "./config:/home/node/app/config"
      - "./data:/home/node/app/data"
      - "./plugins:/home/node/app/plugins"
      - "./extensions:/home/node/app/public/scripts/extensions/third-party"
    healthcheck:
      test: ["CMD", "node", "src/healthcheck.js"]
      interval: 30s
      timeout: 10s
      start_period: 20s
      retries: 3
    restart: unless-stopped

说明:

  • 删掉了官方原文件里的 build: ..,因为这里直接用预构建镜像。
  • 宿主机端口用 8001,映射到容器内 8000,避免和其他服务冲突。
  • 只挂载 config、data、plugins、extensions,不挂载 public。

6. 启动容器

cd /root/sillytavern
docker compose up -d
docker compose logs --tail 50

7. 验证结果

日志里出现了:

  • SillyTavern 1.19.0
  • Migrating config values in config.yaml
  • Compiling frontend libraries...

说明新版镜像已经自动把旧配置格式升级,并开始编译前端。等待编译完成后,访问:

http://<服务器IP>:8001/

用原来的账号密码登录,角色卡、聊天记录和用户数据都在。

原理小结

Docker 容器本身不保存状态,数据都靠 volume 挂载到宿主机。迁移时只要保留 config 和 data,新镜像启动后会自动升级配置格式,旧数据不受影响。权限必须匹配容器内的 UID 1000,否则会报写入错误。旧版 public 不能迁移,因为新版前端代码由镜像内部提供,覆盖会导致不兼容。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_37195257/article/details/166596506

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--