跳转到内容

企业私有服务部署指引

面向实施工程师与客户方技术人员的服务端安装部署手册。按本文完成部署后,雷驼桌面端即可连接该服务并登录使用。

文档用途
本文交付物、架构、前置条件、部署前规划、方式选择、首次配置、授权、升级/备份/排错、环境变量参考
docker.md推荐:容器方式部署(Docker Compose)
binary.md二进制方式部署(无容器环境,或要求以主机进程纳管时使用)

首次部署预计耗时 30–60 分钟,不含 TLS 证书申请与网络审批。

0. 交付物

部署前请确认已从供应方获得:

交付物形式用于
服务镜像镜像仓库地址,或离线镜像包 dathor-server-<版本>.tar容器方式部署
服务程序包dathor-server-<版本>-linux-<架构>.tar.gz二进制方式部署
语音模型包(可选)模型目录压缩包启用服务端语音识别
授权证书签发通道联系方式与流程部署后换取授权证书

两种部署方式二选一,无需同时获取对应交付物。


1. 服务组成

雷驼企业私有服务是一个部署单元:单个服务进程同时提供桌面端 API、维护后台(/admin)与托管的语音识别引擎;外部依赖只有一个 PostgreSQL。

flowchart LR
  subgraph client["客户内网 / 员工终端"]
    D["雷驼桌面端"]
    B["浏览器(管理员)"]
  end

  P["TLS 反向代理<br/>Nginx / HAProxy<br/>BASE_URL 对应的 HTTPS 入口"]

  subgraph unit["雷驼企业私有服务(单个部署单元)"]
    A["服务进程<br/>API /api/*<br/>维护后台 /admin<br/>健康检查 /health/*"]
    S["语音识别引擎<br/>仅回环 127.0.0.1:38080"]
    F["数据目录<br/>头像 · 附件 · 语音模型"]
  end

  PG[("PostgreSQL 16+<br/>业务数据 · 配置 · 密文")]

  D -- HTTPS --> P
  B -- HTTPS --> P
  P --> A
  A --> S
  A --> F
  A --> PG

要点:

  • 维护后台不是独立产品,由服务进程在 /admin 路径随包托管,不需要单独部署或单独端口。
  • 服务进程只监听一个 HTTP 端口(默认 3000),TLS 必须由前置反向代理终止
  • 语音识别引擎在 managed 模式下由服务进程自动拉起,只监听回环地址,不对外暴露。
  • 持久数据只有两处:PostgreSQL数据目录(头像、附件、语音模型文件)。备份这两处即可。

2. 前置条件

要求说明
操作系统Linux x86_64 或 arm64生产部署仅支持 Linux
CPU / 内存建议 4 vCPU / 8 GB 起启用服务端语音识别时内存需求更高
磁盘建议 50 GB 起数据库、附件、语音模型文件
PostgreSQL16 及以上可随容器部署一并拉起,也可使用客户已有实例
网络员工终端可访问服务的 HTTPS 域名局域网或内网域名均可
TLS 证书BASE_URL 域名匹配自签证书需在客户端接受风险,建议使用可信证书
出站访问视所选 AI 供应商而定使用外部大模型 API 时,服务端需能访问对应地址
镜像仓库访问仅在线拉取镜像时需要无外网时改用离线镜像包
授权证书由供应方签发的 license.json见第 6 节

容器方式另需 Docker Engine 24+ 与 Compose v2。

3. 部署前必须规划的三件事

3.1 对外访问地址 BASE_URL

BASE_URL 是权威对外访问 origin,必须与员工在桌面端填写的服务器地址、管理员浏览器访问 /admin 的地址完全一致

  • 生产环境必须是 HTTPS,且不带路径、查询串与凭据,例如 https://dathor.example.com
  • 不要先用内网 IP + HTTP 上线、后期再换域名:更换 origin 会影响管理员会话 Cookie 与已配置的客户端。
  • 服务进程本身不做 TLS,请在前置反向代理终止 TLS,并把服务端口绑定在回环地址,避免绕过代理直连。
  • 服务端不把代理转发头当作信任锚,BASE_URL 才是权威 origin。

3.2 独立密钥

生产环境必须显式设置 5 个互不相同的随机密钥,每个至少 32 字节:

变量作用更换后果
JWT_SECRET签发登录 token所有已登录会话失效(可接受)
VAULT_MASTER_KEY加密 Vault 凭据已存密文无法解密
AI_PROVIDER_SECRET_KEY加密 AI 供应商 API Key 与自定义 Header已存密文无法解密
STT_SECRET_KEY加密语音识别供应商凭据已存密文无法解密
ARTIFACT_SIGNING_KEY签名附件下载地址已签发的下载链接失效(可接受)

一次性生成:

Terminal window
for name in JWT_SECRET VAULT_MASTER_KEY AI_PROVIDER_SECRET_KEY STT_SECRET_KEY ARTIFACT_SIGNING_KEY; do
printf '%s=%s\n' "$name" "$(openssl rand -hex 32)"
done

生成结果写入客户的密钥管理系统或受控凭据存储,不要提交到代码仓库或工单系统,并在服务上线前完成备份。标注”已存密文无法解密”的三个属于长期密钥,部署后不得直接替换。

3.3 初始管理员账号

服务端不含固定密码,也不会生成或打印初始密码。首次启动(用户表为空)时按以下变量创建管理员:

变量默认值说明
ADMIN_INITIAL_USERNAMEadmin登录名
ADMIN_INITIAL_NAME同用户名显示名
ADMIN_INITIAL_PASSWORD必填,12–128 字符;未设置时服务启动失败

这三个变量仅在用户表为空时生效,后续修改不影响已存在的账号。首次登录后请立即在维护后台修改该密码。

4. 选择部署方式

flowchart TD
  Q{"客户环境允许运行<br/>Docker 容器?"}
  Q -- 是 --> DK["容器方式部署<br/>docker.md(推荐)"]
  Q -- 否 --> BN["二进制方式 + systemd<br/>binary.md"]
  DK --> C["共同步骤:反向代理 → 首次登录 → 上传授权证书 → 配置 AI / 语音 / 用户"]
  BN --> C
对比项容器方式二进制 + systemd
环境依赖Docker Engine + Compose v2glibc、libstdc++、libgomp
PostgreSQL可随部署一并拉起需客户自行提供
升级导入新镜像后重建容器替换程序目录后重启服务
安全加固交付配置已内置只读根文件系统、非 root、能力裁剪需在 systemd unit 中配置(文档已给模板)
推荐度默认推荐无容器环境或有主机纳管要求时使用

选定后按对应文档执行,完成后回到第 5 节。

5. 首次配置(两种方式通用)

  1. 浏览器打开 ${BASE_URL}/admin,使用 ADMIN_INITIAL_* 凭据登录。
  2. 立即修改初始管理员密码。
  3. 进入授权页面,按第 6 节上传授权证书。
  4. 配置 AI 供应商、模型与默认 Agent;未配置时桌面端 AI 能力不可用。
  5. 按需配置服务端语音识别、团队导航、侧边栏入口、Agent 工具与 AI 右键菜单模板。
  6. 创建组织架构与用户账号。
  7. 在桌面端填写 BASE_URL 作为服务器地址并登录,验证导航、AI、语音等关键路径。

桌面端首次连接会固定(pin)服务端身份公钥;若服务端身份此后发生变化(例如重建实例导致密钥重生),客户端会拒绝连接,需用户显式确认”信任新身份”。该机制用于识别连接对端,不替代 TLS。

6. 授权证书

无证书、证书过期或损坏时服务端处于未授权状态:维护后台仍可登录、桌面端仍可登录并使用本地内容,但服务端 AI、语音识别、附件等能力会被拒绝。

sequenceDiagram
  participant C as 客户方技术人员
  participant S as 雷驼服务端 /admin
  participant V as 供应方
  C->>S: 下载 public-only server-identity.json
  C->>V: 提交 public-only server-identity.json 与商业协议信息
  V->>V: 离线签发 license.json
  V-->>C: 返回 license.json
  C->>S: 在维护后台上传 license.json
  S->>S: 离线校验签名与实例绑定,应用授权策略
  • 证书绑定到具体服务端身份,重建服务端实例后原证书失效,需要重新签发
  • 维护后台下载的 server-identity.json 只包含 instanceIdpublicKeyPemcreatedAt;不包含也不应外发服务端私钥。
  • 证书中的启用账号上限与服务截止时间按商业协议约定;不限人数或永久授权时对应字段为空。
  • 校验完全离线完成,服务端不需要联网,也不会因此外发数据。
  • 授权校验属于商业交付范围控制,不是安全边界,不替代 TLS、访问控制与密钥保护。

7. 升级

  1. 阅读版本发布说明,确认是否有额外操作要求。
  2. 先备份(第 8 节)。数据库迁移为单向(forward-only),无法回退。
  3. 按所选部署方式替换服务版本并重启,见各自文档的”升级”章节。
  4. 启动后确认 /health/ready 返回 200,再抽查 /admin 与桌面端关键路径。

数据库结构迁移在服务启动时自动执行,无需手工操作。

8. 备份

必须同时备份三部分,数据库与数据目录尽量取同一时间点:

对象内容说明
PostgreSQL用户、组织、导航、Vault 密文、配置、日志pg_dump 定期全量备份
数据目录头像、附件、语音模型文件文件级备份
密钥第 3.2 节的 5 个密钥存于密钥管理系统

只恢复数据库而丢失 VAULT_MASTER_KEY / AI_PROVIDER_SECRET_KEY / STT_SECRET_KEY,对应密文将永久不可解密。

9. 常见问题排查

现象排查方向
启动即退出并报密钥错误5 个密钥是否都已设置、互不相同、至少 32 字节
启动即退出并报 BASE_URL 错误生产环境 BASE_URL 必须是不含路径、查询串与凭据的 HTTPS origin
启动即退出并报初始管理员密码错误用户表为空时必须设置 12–128 字符的 ADMIN_INITIAL_PASSWORD
服务不健康/health/live 看进程存活,/health/ready 看 PostgreSQL 连通性
/admin 返回 404访问的是数据库或语音引擎端口,而非服务端口
/admin 返回 503 并提示后台未构建后台静态文件缺失,说明交付包不完整或部署目录结构不正确
管理员登录后立刻掉线BASE_URL 与浏览器实际访问 origin 不一致,或反向代理未按 HTTPS 透传
桌面端连不上BASE_URL、端口可达性、TLS 证书、客户端填写的地址
桌面端提示服务端身份变化确认服务端是否被有意重建或重置,再显式信任新身份
AI 能力报未授权上传有效授权证书;确认证书绑定的实例与当前服务端一致
AI 能力报配置缺失在维护后台配置并保存 AI 供应商、模型与默认 Agent
语音识别不可用检查语音引擎模式、模型目录与 STT_MODEL_VERSION 是否匹配

附录 A. 环境变量参考

两种部署方式使用同一套环境变量,未列出的保持默认即可。

基础

变量说明默认值
BASE_URL权威对外访问 origin;生产环境必须为 HTTPS,且不含路径、查询串与凭据
PORT服务监听端口3000
HOST监听地址;容器内设为 0.0.0.0,主机部署建议 127.0.0.1127.0.0.1
NODE_ENV生产部署设为 production
ADMIN_ALLOWED_ORIGINS额外允许访问维护后台的精确 HTTPS origin,逗号分隔,不支持通配符
SWAGGER_ENABLED暴露 /openapi.json/api-docs;仅接受 true / false,UI 需访问 cdn.jsdelivr.netfalse

数据存储

变量说明默认值
DATABASE_URLPostgreSQL 连接串postgres://dathor:dathor@127.0.0.1:5432/dathor
POSTGRES_POOL_MAX连接池上限,按部署规模与数据库 max_connections 调整10
POSTGRES_IDLE_TIMEOUT_SECONDS空闲连接回收秒数30
POSTGRES_CONNECTION_TIMEOUT_SECONDS建立连接超时秒数15
AVATARS_DIR用户头像存储目录./data/avatars

密钥(生产必填,互不相同,≥32 字节)

变量说明
JWT_SECRET登录 token 签名密钥
VAULT_MASTER_KEYVault 密文主密钥(长期密钥)
AI_PROVIDER_SECRET_KEYAI 供应商凭据加密密钥(长期密钥)
STT_SECRET_KEY语音识别供应商凭据加密密钥(长期密钥)
ARTIFACT_SIGNING_KEY附件下载地址签名密钥

初始管理员(仅用户表为空时生效)

变量说明默认值
ADMIN_INITIAL_USERNAME登录名admin
ADMIN_INITIAL_NAME显示名同用户名
ADMIN_INITIAL_PASSWORD初始密码,12–128 字符无,必填

语音识别引擎

变量说明默认值
STT_GO_ENGINE_MODEmanaged(服务进程自动拉起)/ external(外部引擎)/ disabledmanaged
STT_GO_ENGINE_HOSTmanaged 模式监听地址127.0.0.1
STT_GO_ENGINE_PORTmanaged 模式监听端口38080
STT_GO_ENGINE_BINARYmanaged 模式引擎程序路径binary.md
STT_GO_ENGINE_EXTERNAL_URLexternal 模式引擎基地址
STT_GO_ENGINE_TOKENexternal 模式访问令牌(≥32 字节);managed 模式自动生成
STT_GO_ENGINE_STARTUP_TIMEOUT_MS引擎启动就绪超时(毫秒)15000
STT_GO_ENGINE_REQUEST_TIMEOUT_MS单请求超时(毫秒)120000
STT_MODEL_DIR语音模型根目录./data/stt-models
STT_MODEL_VERSION使用的模型版本目录名sense-voice-small-v1

桌面端更新与日志留存

变量说明默认值
DESKTOP_UPDATE_BASE_URL桌面端安装包根 URL;未配置则不提供更新
DESKTOP_UPDATE_VERSION当前对外发布的最新桌面端版本号
AI_USAGE_LOG_RETENTION_DAYSAI 用量日志留存天数365
AGENT_LOG_RETENTION_DAYSAgent 日志留存天数90
AUDIT_LOG_RETENTION_DAYS审计日志留存天数365

附录 B. 健康检查与监控

路径含义用途
GET /health/live进程存活进程守护、容器 liveness
GET /health/ready依赖就绪(PostgreSQL 可达);未就绪返回 503负载均衡摘挂、发布验证
GET /admin维护后台入口人工验证

建议对 /health/ready 做周期探测,连续失败即告警;同时监控 PostgreSQL 可用性与数据目录磁盘余量。