mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-10-26 02:04:37 +08:00
224 lines
9.4 KiB
Markdown
224 lines
9.4 KiB
Markdown
---
|
||
outline: deep
|
||
---
|
||
|
||
# Docker 部署
|
||
|
||
ChatLab CLI 提供 `linux/amd64` 和 `linux/arm64` 两种架构的容器镜像:
|
||
|
||
```text
|
||
ghcr.io/chatlab/chatlab-cli
|
||
```
|
||
|
||
官方镜像已内置本地向量模型所需的运行组件。启用本地语义索引时,只需按界面提示下载所选模型文件,不会在容器启动后再安装约 370 MB 的 Node 依赖。
|
||
|
||
## 快速开始
|
||
|
||
### 与 Desktop / 本地 CLI 共用数据(推荐)
|
||
|
||
ChatLab 的 Desktop、CLI 和 Docker 都可以使用宿主机的 `~/.chatlab`。本机运行 Docker 时,建议直接挂载这个目录:
|
||
|
||
macOS / Linux:
|
||
|
||
```bash
|
||
mkdir -p "$HOME/.chatlab" "$HOME/Downloads"
|
||
|
||
docker run --name chatlab \
|
||
-p 127.0.0.1:3110:3110 \
|
||
--user "$(id -u):$(id -g)" \
|
||
--mount type=bind,source="$HOME/.chatlab",target=/home/node/.chatlab \
|
||
--mount type=bind,source="$HOME/Downloads",target=/home/node/Downloads \
|
||
-e HOME=/home/node \
|
||
-e CHATLAB_DATA_DIR=/home/node/.chatlab/data \
|
||
ghcr.io/chatlab/chatlab-cli:latest
|
||
```
|
||
|
||
Windows PowerShell:
|
||
|
||
```powershell
|
||
New-Item -ItemType Directory -Force "$HOME/.chatlab" | Out-Null
|
||
|
||
docker run --name chatlab `
|
||
-p 127.0.0.1:3110:3110 `
|
||
--mount "type=bind,source=$HOME/.chatlab,target=/home/node/.chatlab" `
|
||
-e CHATLAB_DATA_DIR=/home/node/.chatlab/data `
|
||
ghcr.io/chatlab/chatlab-cli:latest
|
||
```
|
||
|
||
容器启动后,打开 <http://127.0.0.1:3110/>。
|
||
|
||
镜像默认使用非特权 `node` 用户(UID/GID 1000)运行。在 macOS 和 Linux 上,`--user` 会让容器进程使用宿主机当前用户的 UID/GID,`HOME` 则确保 ChatLab 的系统目录仍是 `/home/node/.chatlab`。对于当前用户 UID/GID 不是 1000 的 Linux 主机,这两个参数是必需的。宿主机的 `~/.chatlab` 对应容器内的 `/home/node/.chatlab`,`~/Downloads` 对应容器内可写的下载目录;`CHATLAB_DATA_DIR` 将默认用户数据固定到容器可访问的 `/home/node/.chatlab/data`,避免宿主机 `config.toml` 中的绝对路径在容器内失效。
|
||
|
||
使用这组命令后,两种切换都不需要复制数据:
|
||
|
||
- 先使用 Docker,之后安装 Desktop 或本地 CLI:Desktop / CLI 会继续读取宿主机 `~/.chatlab`。
|
||
- 已经使用 Desktop 或本地 CLI,之后启动 Docker:Docker 会直接读取原有的配置、聊天数据库和 AI 数据。
|
||
|
||
### 使用独立 Docker 数据
|
||
|
||
在服务器上部署,或者明确不想与宿主机上的 ChatLab 共用数据时,可以使用 Docker named volume:
|
||
|
||
```bash
|
||
docker run --name chatlab \
|
||
-p 127.0.0.1:3110:3110 \
|
||
-v chatlab-data:/home/node/.chatlab \
|
||
ghcr.io/chatlab/chatlab-cli:latest
|
||
```
|
||
|
||
该数据卷会保留容器内的系统状态和用户数据,但 Desktop 和宿主机 CLI **不会**自动看到其中的数据。替换或升级容器时,请保留 `chatlab-data` 数据卷。
|
||
|
||
### 自定义用户数据目录
|
||
|
||
如果 Desktop / CLI 已将聊天数据库移动到 `~/.chatlab` 之外,还需要挂载该目录,并让环境变量指向对应的容器路径:
|
||
|
||
```bash
|
||
docker run --name chatlab \
|
||
-p 127.0.0.1:3110:3110 \
|
||
--user "$(id -u):$(id -g)" \
|
||
--mount type=bind,source="$HOME/.chatlab",target=/home/node/.chatlab \
|
||
--mount type=bind,source="$HOME/Downloads",target=/home/node/Downloads \
|
||
--mount type=bind,source="/absolute/path/to/chatlab-data",target=/chatlab-data \
|
||
-e HOME=/home/node \
|
||
-e CHATLAB_DATA_DIR=/chatlab-data \
|
||
ghcr.io/chatlab/chatlab-cli:latest
|
||
```
|
||
|
||
请将 `/absolute/path/to/chatlab-data` 替换为宿主机上的真实用户数据目录。系统数据仍通过 `~/.chatlab` 挂载。由于 `CHATLAB_DATA_DIR` 的优先级最高,Docker 的数据目录应通过挂载和环境变量调整,而不是在存储管理页面中切换。
|
||
|
||
同一版本的 Desktop、CLI 和 Docker 可以共享数据库。切换数据目录、执行迁移或跨版本使用前,建议先停止其他 ChatLab 实例;如果旧版本无法安全读取已经升级的数据目录,ChatLab 会通过兼容门禁拒绝启动。
|
||
|
||
## 服务选项
|
||
|
||
容器的默认命令是:
|
||
|
||
```bash
|
||
chatlab start --no-open --host 0.0.0.0
|
||
```
|
||
|
||
`chatlab start` 按 CLI 中的声明顺序支持以下选项:
|
||
|
||
| 选项 | 说明 |
|
||
| --- | --- |
|
||
| `--port <port>` | 服务端口,默认为 `3110`。 |
|
||
| `--host <host>` | 监听地址;在容器外运行时默认为 `127.0.0.1`。 |
|
||
| `--token <token>` | 自定义 Bearer Token;省略时由 ChatLab 读取或生成。 |
|
||
| `--headless` | 仅启动 API,不提供 Web UI。 |
|
||
| `--require-auth` | 除 API 路由外,也要求 Web UI 路由使用 Bearer 认证。 |
|
||
| `--no-open` | 不打开浏览器。 |
|
||
| `--daemon` | 安装 macOS/Linux 常驻服务,不适用于容器。 |
|
||
|
||
Docker 参数会替换完整的默认命令。添加服务选项时,需要按需重复 `start`、`--no-open` 和 `--host 0.0.0.0`:
|
||
|
||
```bash
|
||
docker run --rm \
|
||
-p 127.0.0.1:8080:8080 \
|
||
--user "$(id -u):$(id -g)" \
|
||
--mount type=bind,source="$HOME/.chatlab",target=/home/node/.chatlab \
|
||
--mount type=bind,source="$HOME/Downloads",target=/home/node/Downloads \
|
||
-e HOME=/home/node \
|
||
-e CHATLAB_DATA_DIR=/home/node/.chatlab/data \
|
||
ghcr.io/chatlab/chatlab-cli:latest \
|
||
start --port 8080 --host 0.0.0.0 --headless --no-open
|
||
```
|
||
|
||
也可以直接选择其他 CLI 命令:
|
||
|
||
```bash
|
||
docker run --rm ghcr.io/chatlab/chatlab-cli:latest --version
|
||
docker run --rm ghcr.io/chatlab/chatlab-cli:latest formats
|
||
docker run --rm \
|
||
--user "$(id -u):$(id -g)" \
|
||
--mount type=bind,source="$HOME/.chatlab",target=/home/node/.chatlab \
|
||
--mount type=bind,source="$HOME/Downloads",target=/home/node/Downloads \
|
||
-e HOME=/home/node \
|
||
-e CHATLAB_DATA_DIR=/home/node/.chatlab/data \
|
||
ghcr.io/chatlab/chatlab-cli:latest sessions list --format json
|
||
```
|
||
|
||
## 环境变量
|
||
|
||
对于配置字段,ChatLab 按以下优先级读取值:
|
||
|
||
1. `CHATLAB_*` 环境变量
|
||
2. `~/.chatlab/config.toml` 或 `~/.chatlab/config.json`
|
||
3. 内置默认值
|
||
|
||
配置环境变量按源码中的声明顺序如下:
|
||
|
||
| 环境变量 | 说明 |
|
||
| --- | --- |
|
||
| `CHATLAB_DATA_DIR` | 覆盖 ChatLab 用户数据目录。设置后,请另外挂载所选目录。 |
|
||
| `CHATLAB_API_PORT` | 设置 `api.port`。`start` 命令会提供自身的默认值,因此请使用 `--port` 配置容器服务。 |
|
||
| `CHATLAB_API_HOST` | 设置 `api.host`。`start` 命令会提供自身的默认值,因此请使用 `--host` 配置容器服务。 |
|
||
| `CHATLAB_LLM_PROVIDER` | 设置 `llm.provider`。 |
|
||
| `CHATLAB_LLM_MODEL` | 设置 `llm.model`。 |
|
||
| `CHATLAB_LLM_BASE_URL` | 设置 `llm.base_url`。 |
|
||
| `CHATLAB_LOCALE_LANG` | 设置 `locale.lang`。 |
|
||
| `CHATLAB_CLI_ALLOW_RAW` | 设置为 `1` 或 `true`,允许查询命令输出未经隐私预处理的 `--raw` 结果。 |
|
||
|
||
ChatLab 还会读取以下运行时变量:
|
||
|
||
| 环境变量 | 说明 |
|
||
| --- | --- |
|
||
| `CHATLAB_ALLOW_INCOMPATIBLE_DATA_DIR` | 设置为 `1` 可绕过数据目录的最低运行时版本检查。此操作可能损坏数据,仅用于紧急恢复。 |
|
||
| `CHATLAB_DISABLE_NATIVE_PERF` | 设置为 `1` 可禁用原生解析器加速。 |
|
||
| `CHATLAB_LOG_LEVEL` | 将应用日志级别设置为 `DEBUG`、`INFO`、`WARN` 或 `ERROR`,默认为 `INFO`。 |
|
||
| `CHATLAB_SKIP_UPDATE_CHECK` | 设置为任意非空值可禁用 CLI 更新检查。 |
|
||
| `CHATLAB_TEMP_ROOT` | 覆盖临时工作区根目录。 |
|
||
| `LANG` | 选择 CLI 查询预处理使用的默认语言。 |
|
||
|
||
Bearer Token、无界面模式、Web UI 认证和浏览器打开行为通过对应的命令行选项配置。ChatLab 不为这些选项提供环境变量别名。
|
||
|
||
## Docker Compose
|
||
|
||
先在 Compose 文件旁创建未跟踪的 `.env`:
|
||
|
||
```dotenv
|
||
CHATLAB_HOST_DIR=/absolute/path/to/.chatlab
|
||
CHATLAB_DOWNLOADS_DIR=/absolute/path/to/Downloads
|
||
CHATLAB_UID=1000
|
||
CHATLAB_GID=1000
|
||
CHATLAB_TOKEN=replace-with-a-secret-token
|
||
```
|
||
|
||
将 `CHATLAB_HOST_DIR` 替换为宿主机的 `~/.chatlab` 绝对路径,并将 `CHATLAB_DOWNLOADS_DIR` 设置为一个已存在且可写的导出和截图目录,例如宿主机的 `~/Downloads`。在 macOS 和 Linux 上,还需要将 `CHATLAB_UID`、`CHATLAB_GID` 分别替换为 `id -u`、`id -g` 的输出;Windows Docker Desktop 可以保留 `1000`。
|
||
|
||
```yaml
|
||
services:
|
||
chatlab:
|
||
image: ghcr.io/chatlab/chatlab-cli:latest
|
||
restart: unless-stopped
|
||
user: "${CHATLAB_UID:-1000}:${CHATLAB_GID:-1000}"
|
||
ports:
|
||
- "127.0.0.1:3110:3110"
|
||
environment:
|
||
HOME: /home/node
|
||
CHATLAB_DATA_DIR: /home/node/.chatlab/data
|
||
volumes:
|
||
- "${CHATLAB_HOST_DIR:?set CHATLAB_HOST_DIR in the Compose environment}:/home/node/.chatlab"
|
||
- "${CHATLAB_DOWNLOADS_DIR:?set CHATLAB_DOWNLOADS_DIR in the Compose environment}:/home/node/Downloads"
|
||
command:
|
||
- start
|
||
- --port
|
||
- "3110"
|
||
- --host
|
||
- 0.0.0.0
|
||
- --token
|
||
- ${CHATLAB_TOKEN:?set CHATLAB_TOKEN in the Compose environment}
|
||
- --require-auth
|
||
- --no-open
|
||
```
|
||
|
||
`CHATLAB_TOKEN` 由 Docker Compose 插值后作为 `--token` 的值传给 ChatLab,并不是 ChatLab 环境变量。请将其保存在密钥存储或未跟踪的 `.env` 文件中。如果需要完全独立的服务器数据,请改用上文“使用独立 Docker 数据”中的 named volume。
|
||
|
||
## 多架构镜像
|
||
|
||
Docker 会自动选择与宿主机架构匹配的镜像。也可以显式选择平台:
|
||
|
||
```bash
|
||
docker pull --platform linux/amd64 ghcr.io/chatlab/chatlab-cli:latest
|
||
docker pull --platform linux/arm64 ghcr.io/chatlab/chatlab-cli:latest
|
||
```
|
||
|
||
镜像索引还包含来源证明。镜像仓库界面可能将这些元数据清单显示为 `unknown/unknown`;它们不是可运行平台,也无需单独拉取。
|