【免费下载链接】ChatLab
Local-first chat history analyzer with AI. | 本地优先的 AI 聊天记录分析工具
项目地址:
https://gitcode.com/gh_mirrors/cha/ChatLab
点击查看 免费下载
导读
本文是 ChatLab 本地优先 AI 聊天记录分析工具官方 Docker 部署指南的完整技术文档(源文档位于 docs/en/usage/docker.md)。ChatLab CLI 以多架构容器镜像形式发布,支持 linux/amd64 与 linux/arm64,官方镜像名为 ghcr.io/chatlab/chatlab-cli。读完本文,你将掌握:如何用 bind mount 让 Docker、桌面端与本机 CLI 共享 ~/.chatlab 数据;如何使用命名卷隔离服务器数据;如何通过 clb web 的 –port/–host/–token/–headless/–require-auth 等参数定制容器服务;如何使用 Compose 一键部署并配合 Bearer Token 鉴权;以及 CHATLAB_* 环境变量的优先级与完整映射关系。
镜像特性:开箱即用的运行时与分词词典
官方镜像针对容器化场景做了三项关键预置,避免首次启动时的大规模下载与初始化延迟:
快速开始
方案一:与桌面端、本机 CLI 共享 ~/.chatlab(推荐)
ChatLab 桌面端、CLI 与 Docker 容器都可以使用宿主机上的 ~/.chatlab 目录。在本地运行 Docker 时,直接将该目录以 bind mount 方式挂载进容器即可实现双向数据共享。
macOS / Linux:
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:
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/ 即可访问 Web UI。
几个关键参数的原理解析
- –user "$(id -u):$(id -g)":镜像默认以非特权 node 用户(UID/GID 1000)运行。在 macOS/Linux 上,–user 将容器进程的用户映射为 bind mount 宿主目录的属主,而 HOME 保持 ChatLab 系统目录位于 /home/node/.chatlab。当宿主机用户的 UID/GID 不是 1000 时(绝大多数 Linux 主机都如此),这一参数是必需的;否则容器内 node 用户无法读写挂载进来的 ~/.chatlab。
- 挂载映射:宿主机的 ~/.chatlab 映射为容器内 /home/node/.chatlab,宿主机的 ~/Downloads 映射为容器内可写的 Downloads 目录(用于导出与截图输出)。
- CHATLAB_DATA_DIR=/home/node/.chatlab/data:该变量将默认用户数据固定到容器可访问的 /home/node/.chatlab/data,从而保证宿主 config.toml 中记录的绝对路径在容器内不会失效。这正是 CHATLAB_DATA_DIR 在配置优先级中最高(见下文"环境变量"小节)的实际应用。
双向免拷贝的数据共享
采用此方案后,两个方向都不需要手工拷贝数据:
- 先用 Docker,再安装桌面端或本机 CLI:桌面端与 CLI 继续读取宿主 ~/.chatlab;
- 先用桌面端或本机 CLI,再运行 Docker:Docker 直接读取已有的配置、聊天数据库与 AI 数据。
方案二:仅使用 Docker 内部数据(命名卷)
适用于服务器部署,或希望数据与宿主上的 ChatLab 完全隔离的场景:
docker run –name chatlab \\
-p 127.0.0.1:3110:3110 \\
-v chatlab-data:/home/node/.chatlab \\
ghcr.io/chatlab/chatlab-cli:latest
该命名卷在 Docker 内部保留系统状态与用户数据,桌面端与本机 CLI 不会自动看到这些数据。替换或升级容器时请保留 chatlab-data 卷,否则数据会丢失。
方案三:使用自定义用户数据目录
若桌面端或 CLI 将聊天数据库存放在 ~/.chatlab 之外,可将该目录单独挂载并把环境变量指向其容器内路径:
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 的数据目录,而不是在 Web 的 Storage 设置页面中修改(源码中 canSetDataDir: !process.env.CHATLAB_DATA_DIR 的逻辑表明,一旦设置了该环境变量,Web 界面便不允许再修改数据目录,见 apps/cli/src/http/routes/web/index.ts)。
版本兼容与数据安全
同版本的桌面端、CLI 与 Docker 可以共享数据库。在更改数据目录、执行迁移或在不同版本间切换之前,请先停止其他 ChatLab 实例。若旧版本无法安全读取已升级的数据目录,ChatLab 的兼容性门禁会阻止其启动——这正是 data-dir-compat.ts 中 assertDataDirCompatible 的实现逻辑:数据目录元信息中记录了 minRuntimeVersion,当前运行时低于该版本时抛出 DATA_DIR_REQUIRES_NEWER_RUNTIME 错误并阻止启动(data-dir-compat.ts#L107-L131)。
服务器配置选项
默认容器命令
clb web –no-open –host 0.0.0.0
clb web 的选项(按 CLI 声明顺序,见 apps/cli/src/cli.ts):
| –port <port> | 服务器端口,默认 3110。 |
| –host <host> | 监听地址,容器外默认 127.0.0.1。 |
| –token <token> | 自定义 Bearer Token;省略时 ChatLab 会读取已有配置或自动生成一个。 |
| –headless | 仅启动 API,不提供 Web UI。 |
| –require-auth | 对 Web UI 路由与 API 路由都要求 Bearer 鉴权。 |
| –no-open | 不自动打开浏览器。 |
| –daemon | 安装为常驻的 macOS/Linux 系统服务,不适用于容器。 |
追加服务器选项
Docker 命令行参数会整体替换默认容器命令。因此添加服务器选项时,需要重复 start、–no-open 与 –host 0.0.0.0:
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
示例中把端口改为 8080 并以 –headless 启动纯 API 模式。start 是 web 命令的别名(源码中 program.command('web').alias('start')),两者等价。
直接运行其他 CLI 子命令
Docker 镜像同样可以执行 CLI 的其他命令:
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
注意:查询型命令(如 sessions list)需要读写数据目录,必须携带与启动服务器时一致的挂载与 CHATLAB_DATA_DIR 配置。
环境变量
配置优先级
对于配置字段,ChatLab 按以下顺序取值(从高到低):
这一优先级在 packages/config/src/loader.ts 中实现:loadEnvConfig 将环境变量映射到配置节字段后与配置文件、默认值做深度合并(loader.ts#L85-L108),环境变量覆盖文件配置,文件配置覆盖内置默认值。
配置类环境变量
以下变量对应具体配置字段(按源码声明顺序):
| 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 查询输出。 |
源码中完整的映射关系为(loader.ts#L88-L97):CHATLAB_DATA_DIR → data.user_data_dir、CHATLAB_API_PORT → api.port(经 parseInt 转换)、CHATLAB_API_HOST → api.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 → cli.allow_raw('1' 或 'true' 启用)。
运行时类环境变量
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 查询预处理使用的默认语言。 |
其中 CHATLAB_ALLOW_INCOMPATIBLE_DATA_DIR 的绕过路径可在 data-dir-compat.ts#L109-L118 中看到:设置后仅打印警告并放行,否则抛出版本门禁错误。CHATLAB_SKIP_UPDATE_CHECK 在 update-checker.ts 中生效,返回 true 即跳过更新检查。
无环境变量别名的选项
Bearer Token、headless 模式、Web UI 鉴权与浏览器打开行为,均通过对应的命令行选项配置;ChatLab 不为这些选项提供环境变量别名。因此在容器中请始终使用 –token、–headless、–require-auth、–no-open 来配置。
Docker Compose 部署
创建 .env 文件
在 Compose 文件旁创建不受版本控制的 .env:
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 即可。
编写 Compose 文件
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 文件中;
- 😕 语法用于强制校验:未设置对应变量时 Compose 会直接报错退出,避免因漏配而静默使用不安全默认值;
- –require-auth 确保 Web UI 与 API 路由都需要 Bearer 鉴权,配合 –no-open 适合无头服务器场景;
- 若需要完全隔离的服务器数据,请改用上文"方案二"中的命名卷方式。
多架构镜像与来源验证
Docker 会自动选择与宿主架构匹配的镜像。如需显式指定平台:
docker pull –platform linux/amd64 ghcr.io/chatlab/chatlab-cli:latest
docker pull –platform linux/arm64 ghcr.io/chatlab/chatlab-cli:latest
镜像索引中还包含 provenance 来源证明(provenance attestations)。注册表界面可能将这些元数据清单显示为 unknown/unknown,它们不是可运行平台,无需单独拉取。
小结
Docker 部署的核心决策在于数据路径:共享 ~/.chatlab 实现桌面端/CLI/容器三端互通,命名卷实现服务器数据隔离,自定义 CHATLAB_DATA_DIR 适配非默认数据布局。搭配 start –port –host –headless –require-auth –no-open 与 CHATLAB_* 环境变量,即可在容器中复刻桌面端完全一致的配置、AI 数据与查询能力。官方镜像内置的本地嵌入模型运行时与简体中文分词词典,则保证了容器启动后即可直接使用本地语义索引,无需再安装数百 MB 依赖。
延伸阅读
- 命令行查询与 AI 使用:docs/en/usage/cli-query.md、docs/en/ai/cli-query.md
- 配置与导入导出:docs/en/standard/chatlab-api.md、docs/en/usage/how-to-import.md、docs/en/usage/how-to-export.md
- 安装与故障排查:docs/en/usage/installation.md、docs/en/usage/troubleshooting.md
- 相关源码:apps/cli/src/cli.ts(clb web/start 命令定义)、packages/config/src/loader.ts(环境变量映射)、packages/node-runtime/src/data-dir-compat.ts(数据目录兼容性门禁)
赞
【免费下载链接】ChatLab
Local-first chat history analyzer with AI. | 本地优先的 AI 聊天记录分析工具
项目地址:
https://gitcode.com/gh_mirrors/cha/ChatLab
点击查看 免费下载
相关推荐
DynamicCow终极教程:在iOS 16设备上解锁灵动岛完整指南
Markdownify MCP:终极文件格式转换神器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网硕互联帮助中心





评论前必须登录!
注册