# Docker 安装

# 使用 GitHub Container Registry

使用预构建镜像是在 Docker 中开始使用 SillyTavern 的最快和最简单的方法。您可以从 GitHub Container Registry 拉取最新镜像。

# Docker Compose(推荐)

GitHub 仓库 下载 docker-compose.yml 文件,并在文件所在的目录中运行以下命令。这将从 GitHub Container Registry 拉取最新的发布镜像并启动容器,自动创建必要的卷。

docker compose up

您可以编辑文件并根据需要应用额外的自定义:

  • 默认端口是 8000。您可以通过修改 ports 部分来更改它。
  • 如果您想使用开发分支而不是稳定发布,请将 image 标签更改为 staging
  • 如果您想使用环境变量调整服务器配置,请查看 环境变量 页面。

# Docker CLI (高级)

您将需要两个必需的目录映射和一个端口映射来允许 SillyTavern 运行。在命令中,在以下位置替换您的选择:

# 容器变量

# 卷映射
  • CONFIG_PATH - SillyTavern 配置文件将存储在您主机上的目录
  • DATA_PATH - SillyTavern 用户数据(包括角色)将存储在您主机上的目录
  • PLUGINS_PATH - (可选) SillyTavern 服务器插件将存储在您主机上的目录
  • EXTENSIONS_PATH - (可选) 全局 UI 扩展将存储在您主机上的目录
# 端口映射
  • PUBLIC_PORT - 暴露流量的端口。这是必需的,因为您将从其虚拟机容器外部访问实例。在没有实施单独安全服务的情况下,请勿将其暴露到互联网。
# 附加设置
  • SILLYTAVERN_VERSION - 在此 GitHub 页面的右侧,您将看到"软件包"。选择"sillytavern"软件包,您将看到镜像版本。镜像标签"latest"将使您与当前发布版本保持同步。您也可以利用指向相应分支的夜间镜像的"staging"。

# 运行容器

  1. 打开命令行
  2. 在您想要存储配置和数据文件的文件夹中运行以下命令:
SILLYTAVERN_VERSION="latest"
PUBLIC_PORT="8000"
CONFIG_PATH="./config"
DATA_PATH="./data"
PLUGINS_PATH="./plugins"
EXTENSIONS_PATH="./extensions"

docker run \
  --name="sillytavern" \
  -p "$PUBLIC_PORT:8000/tcp" \
  -v "$CONFIG_PATH:/home/node/app/config:rw" \
  -v "$DATA_PATH:/home/node/app/data:rw" \
  -v "$EXTENSIONS_PATH:/home/node/app/public/scripts/extensions/third-party:rw" \
  -v "$PLUGINS_PATH:/home/node/app/plugins:rw" \
  ghcr.io/sillytavern/sillytavern:"$SILLYTAVERN_VERSION"

# 构建 Docker 镜像

如果您想自己构建 Docker 镜像,可以按照以下步骤进行。如果您想自定义镜像或将其用于开发目的,这很有用。

# Linux

  1. 按照 Docker 安装指南这里安装 Docker。

  2. 按照 Docker 安装后指南中的以非根用户身份管理 Docker步骤操作。
  3. 使用您的包管理器安装 Git
    • Debian (Ubuntu/Pop! OS/etc.)

      sudo apt install git
    • Arch Linux (Manjaro/EndeavourOS/etc.)

      sudo pacman -S git
    • Fedora, Red Hat Enterprise Linux (RHEL), etc.

      sudo dnf install git
  4. 克隆 SillyTavern 仓库。
    • Release (稳定分支)

      git clone https://github.com/SillyTavern/SillyTavern && cd SillyTavern/docker
    • Staging (开发分支)

      git clone https://github.com/SillyTavern/SillyTavern -b staging && cd SillyTavern/docker
  5. 通过在 Docker 文件夹中运行以下命令来执行 docker compose

    docker compose up -d
  6. 执行以下 Docker 命令来获取您的 SillyTavern Docker 容器的 IP。

    docker network inspect docker_default

    您应该收到类似于以下的输出。

    [
        {
            "Name": "docker_default",
            "IPAM": {
                "Config": [
                    {
                        "Subnet": "172.18.0.0/16",
                        "Gateway": "172.18.0.1"
                    }
                ]
            }
        }
    ]

    记下您在_网关_中看到的 IP,因为这很重要。

  7. 使用 sudo,打开 nano 并运行以下命令。

    sudo nano config/config.yaml

    nano 中,向下滚动到 whitelist。您应该看到类似于以下的内容。

    whitelist:
        - 127.0.0.1

    127.0.0.1 下方添加新行,并输入从 Docker 复制的 IP。之后应该看起来类似于以下内容。

    whitelist:
        - 127.0.0.1
        - 172.18.0.1

    通过按 Ctrl+S 保存文件,然后通过按 Ctrl+X 退出 nano

  8. 重新启动 Docker 容器以应用新配置。

    docker compose restart sillytavern
  9. 打开新浏览器并转到 http://localhost:8000。您应该会在几秒钟内看到 SillyTavern 加载。
  10. 享受!:D

# Windows

  1. 按照 Docker 安装指南这里安装 Docker Desktop。
  2. 安装 Git for Windows
  3. 克隆 SillyTavern 仓库。
    • Release (稳定分支)

      git clone https://github.com/SillyTavern/SillyTavern && cd SillyTavern/docker
    • Staging (开发分支)

      git clone https://github.com/SillyTavern/SillyTavern -b staging && cd SillyTavern/docker
  4. 通过在 Docker 文件夹中运行以下命令来执行 docker compose

    docker compose up -d
  5. 执行以下 Docker 命令来获取您的 SillyTavern Docker 容器的 IP。

    docker network inspect docker_default

    您应该收到类似于以下的输出。

    [
        {
            "Name": "docker_default",
            "IPAM": {
                "Config": [
                    {
                        "Subnet": "172.18.0.0/16",
                        "Gateway": "172.18.0.1"
                    }
                ]
            }
        }
    ]

    记下您在_网关_中看到的 IP,因为这很重要。

  6. 使用管理员权限运行_记事本_或您选择的代码编辑器,转到 config 并打开 config.yaml

    在您选择的编辑器中,您应该看到类似于以下的内容。

    whitelist:
        - 127.0.0.1

    127.0.0.1 下方添加新行,并输入从 Docker 复制的 IP。之后应该看起来类似于以下内容。

    whitelist:
        - 127.0.0.1
        - 172.18.0.1

    通过按 Ctrl+S 保存文件,然后退出您的编辑器。

  7. 重新启动 Docker 容器以应用新配置。

    docker compose restart sillytavern
  8. 打开新浏览器并转到 http://localhost:8000。您应该会在几秒钟内看到 SillyTavern 加载。
  9. 享受!:D

# macOS

  1. 按照 Docker 安装指南这里安装 Docker Desktop。
  2. 使用 Homebrew 安装 git

    brew install git
  3. 克隆 SillyTavern 仓库。
    • Release (稳定分支)

      git clone https://github.com/SillyTavern/SillyTavern && cd SillyTavern/docker
    • Staging (开发分支)

      git clone https://github.com/SillyTavern/SillyTavern -b staging && cd SillyTavern/docker
  4. 通过在 Docker 文件夹中运行以下命令来执行 docker compose

    docker compose up -d
  5. 执行以下 Docker 命令来获取您的 SillyTavern Docker 容器的 IP。

    docker network inspect docker_default

    您应该收到类似于以下的输出。

    [
        {
            "Name": "docker_default",
            "IPAM": {
                "Config": [
                    {
                        "Subnet": "172.18.0.0/16",
                        "Gateway": "172.18.0.1"
                    }
                ]
            }
        }
    ]

    记下您在_网关_中看到的 IP,因为这很重要。

  6. 使用 sudo,打开 nano 并运行以下命令。

    sudo nano config/config.yaml

    nano 中,向下滚动到 whitelist。您应该看到类似于以下的内容。

    whitelist:
        - 127.0.0.1

    127.0.0.1 下方添加新行,并输入从 Docker 复制的 IP。之后应该看起来类似于以下内容。

    whitelist:
        - 127.0.0.1
        - 172.18.0.1

    通过按 Ctrl+S 保存文件,然后通过按 Ctrl+X 退出 nano

  7. 重新启动 Docker 容器以应用新配置。

    docker compose restart sillytavern
  8. 打开新浏览器并转到 http://localhost:8000。您应该会在几秒钟内看到 SillyTavern 加载。
  9. 享受!:D

# 配置 SillyTavern

SillyTavern 的配置文件 (config.yaml) 将位于 config 文件夹中。配置配置文件应该与不使用 Docker 配置它没有区别,但是您需要使用管理员权限运行 nano 或代码编辑器才能保存您的更改。

# 定位用户数据

SillyTavern 的数据文件夹将位于 data 文件夹中。备份您的文件应该很容易,但是,恢复或向其中添加内容可能需要您使用管理员权限执行。

# 运行服务器插件

在 Docker 中运行像 HoYoWiki-Scraper-TSSillyTavern-Fandom-Scraper 这样的插件与在您的系统上不使用 Docker 运行它没有区别,但是我们需要对 Docker Compose 脚本进行轻微修改才能这样做。

  1. 使用 nano 或代码编辑器,打开 docker-compose.yml 并在 volumes 下方添加以下行。

        volumes:
            - "./config:/home/node/app/config"
            - "./data:/home/node/app/data"
            - "./plugins:/home/node/app/plugins"
  2. docker 文件夹中创建一个名为 plugins 的新文件夹。
  3. 按照您的插件说明安装插件。
  4. 使用管理员权限运行 nano 或代码编辑器,打开 config.yaml(在 config 文件夹中)并启用 enableServerPlugins

    enableServerPlugins: true
  5. 重新启动 Docker 容器。

    docker compose restart sillytavern
  6. 完成。

# Docker 的常见问题

# 挂载卷的 SELinux 权限问题

启用了 SELinux 的 Linux 发行版(如 RHEL、CentOS、Fedora 等)可能会由于安全策略而阻止 Docker 容器访问挂载的卷。当容器尝试读取或写入挂载的目录时,这可能会导致权限被拒绝的错误。

可以将两个后缀 :z:Z 添加到卷挂载。这些后缀告诉 Docker 重新标记共享卷上的文件对象。

  • 当卷内容将在容器之间共享时,使用 z 选项。
  • 当卷内容应该仅由当前容器使用时,使用 Z 选项。

示例:

# docker-compose.yml
volumes:
  ## 共享卷
  - ./config:/home/node/app/config:z
  ## Private volume
  - ./data:/home/node/app/data:Z