对话笔记直发:AI-chat-项目操作规范说明书。分类:网络基建。
AI-chat 项目操作规范说明书
1. 文档目的
本文档用于统一 AI-chat 项目的开发、部署、升级、备份与运维操作规范,确保以下目标长期成立:
- 线上更新代码时不影响真实业务数据。
- 两台服务器可以按统一原则执行升级,即使当前数据库位置不同。
- 后续可以将操作过程沉淀为稳定可复用的 Skill 或脚本。
- 运维人员在新窗口或新会话中也能按文档独立完成操作。
2. 项目范围
本文档适用于以下对象:
- GitHub 仓库:
https://github.com/unixcs/AI-chat - 服务器:
你的服务器IP(已脱敏) - 服务器:
你的服务器IP(已脱敏) - Docker 部署场景
- DeepSeek API 配置与提示词文件管理
2.1 服务器连接信息
本项目当前涉及两台生产服务器,默认使用 admin 用户通过 SSH 登录。
你的服务器IP(已脱敏)- SSH:
ssh admin@你的服务器IP(已脱敏)“ - Hostname:
iZbp15kdyy928z0o7i8p1nZ - 项目目录:
/opt/AI-chat
- SSH:
你的服务器IP(已脱敏)- SSH:
ssh admin@你的服务器IP(已脱敏)“ - Hostname:
iZbp1d00qv2i2wyo5nj6hbZ - 项目目录:
/opt/AI-chat
- SSH:
连接说明:
- 默认使用当前操作机已配置的 SSH key 登录
- 如登录时提示输入密码,说明当前环境未预配密钥,需要先确认登录凭据
- 执行任何升级命令前,必须先确认自己已登录到目标服务器,避免误操作另一台机器
首次登录后,建议先执行以下命令确认服务器身份与项目目录:
hostname
pwd
ls -la /opt
ls -la /opt/AI-chat如需快速确认 AI-chat 相关容器状态,建议执行:
docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}'3. 当前已确认的项目事实
3.1 代码侧事实
当前 GitHub 最新代码已具备以下能力:
- 后端优先读取环境变量
SQLITE_PATH。 - 未设置
SQLITE_PATH时,自动回退到backend/data.sqlite。 - Docker 部署默认使用容器内固定路径:
/app/data/data.sqlite。 - Docker Compose 默认挂载宿主机数据目录到容器内
/app/data。 - Docker 构建已通过
.dockerignore排除*.sqlite、*.sqlite-wal、*.sqlite-shm。 - 提示词文件通过
DEEPSEEK_SYSTEM_PROMPT_FILE指定,默认值为prompts/Prompt.md。 - 最新模板默认模型已更新为:
DEEPSEEK_MODEL=deepseek-v4-flash。 - 最新模板默认上游地址已统一为:
DEEPSEEK_BASE_URL=https://api.deepseek.com。
3.2 服务器侧事实
两台服务器当前都已统一到同一套 Docker 生产基线:
- 代码目录统一为:
/opt/AI-chat - 宿主机数据库目录统一为:
/srv/ai-chat/data - 容器内数据库路径统一为:
/app/data/data.sqlite - 两台服务器当前都显式使用:
SQLITE_PATH=/app/data/data.sqlite - 两台服务器后端当前都通过目录挂载将
/srv/ai-chat/data挂载到容器内/app/data - 两台服务器前端对外端口当前统一为:
8181 - 两台服务器容器命名当前统一为:
ai-chat-backend、ai-chat-frontend - 两台服务器当前统一使用以下后端关键环境变量:
NODE_ENV=production
SQLITE_PATH=/app/data/data.sqlite
ALLOW_JSON_SEED=
DEEPSEEK_API_KEY=<server-local-secret>
DEEPSEEK_MODEL=deepseek-v4-flash
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_SYSTEM_PROMPT_FILE=prompts/Prompt.md
DEEPSEEK_TIMEOUT_MS=90000
MODEL_CONCURRENCY=6
MODEL_QUEUE_MAX=50
MODEL_RETRY_MAX=2
MODEL_RETRY_BASE_MS=500
MODEL_KEY_COOLDOWN_MS=60000两台服务器当前的代码维护方式也已收敛为同一原则:
- GitHub 仓库仍是标准代码来源
- 线上默认优先采用方案 B,即手动上传最新源码包到
/tmp/ai-chat-update后做受控同步 - 只有在现场再次确认 Git 状态、网络条件和本地部署差异都允许时,才考虑切换到方案 A
3.3 当前统一部署基线
当前线上 AI-chat 的统一部署基线如下:
- 项目目录:
/opt/AI-chat - 宿主机数据库目录:
/srv/ai-chat/data - SQLite 数据文件:
data.sqlite、data.sqlite-wal、data.sqlite-shm - 容器内数据库路径:
/app/data/data.sqlite - 前端对外端口:
8181 - 后端宿主机端口:
3001 - 提示词文件:
backend/prompts/Prompt.md - 本地敏感配置:
backend/.env - 默认更新口径:保留
backend/.env和真实数据库文件,受控替换应用代码、Dockerfile、Nginx 配置与提示词文件 - 当前生产模型:
deepseek-v4-flash - 当前生产上游地址:
https://api.deepseek.com - 当前生产
docker-compose.yml需要继续保留8181:80,不得直接套用 GitHub 默认的80:80
3.4 最近一次双机统一结果
最近一次双机升级已完成以下动作:
你的服务器IP(已脱敏)已从/opt/AI-chat-data/db迁移到/srv/ai-chat/data你的服务器IP(已脱敏)已从/opt/AI-chat/backend/data.sqlite*迁移到/srv/ai-chat/data- 两台服务器当前都已切换为目录挂载:
/srv/ai-chat/data:/app/data - 两台服务器当前都已验证健康接口正常
- 两台服务器当前都已验证核心表可读,且能正常处理真实请求流量
注意: 每次实际升级前,必须再次检查线上真实状态,不能只依赖历史记录。
4. 总体运维原则
4.1 第一原则
线上更新时,只更新应用代码和镜像,不覆盖真实数据库内容。
4.2 第二原则
GitHub 仓库是代码来源,不是线上数据库内容来源。
4.3 第三原则
任何升级动作前,必须先识别当前生效数据库路径,再决定备份和更新方案。
4.4 第四原则
服务器本地配置默认优先级高于 GitHub 默认文件,尤其是以下内容:
backend/.env- 当前真实数据库文件
- 与部署强相关的服务器本地配置
- 已经人工维护过的提示词文件
4.5 第五原则
两台服务器禁止同时升级,必须先完成一台服务器的升级与验证,再执行另一台。
4.6 第六原则
当前默认升级方式仍是方案 B,即手动上传最新源码包后做受控同步;只有在现场确认满足条件时,才允许切换到方案 A。
5. 角色与责任
5.1 开发负责人
负责:
- 本地修改项目代码
- 推送 GitHub 最新版本
- 明确本次是否涉及提示词、环境变量、模型参数调整
5.2 运维执行人
负责:
- 检查线上实际运行状态
- 备份数据库
- 更新代码与镜像
- 验证容器、健康接口和数据库完整性
5.3 文档维护人
负责:
- 将每次确认后的流程固化进 Skill
- 维护本说明书与 Skill 一致
- 在服务器布局发生变化后及时更新文档
6. 环境规范
6.1 开发环境规范
开发环境默认行为如下:
- 不配置
SQLITE_PATH - 自动使用
backend/data.sqlite - 如需本地空库初始化,可按需使用
ALLOW_JSON_SEED=true
开发环境目标:
- 零配置快速运行
- 不依赖生产绝对路径
- 不影响生产数据库策略
6.2 非 Docker 生产环境规范
非 Docker 生产环境必须显式设置数据库路径,例如:
SQLITE_PATH=/var/lib/ai-chat/data.sqlite要求:
- 生产环境不允许依赖默认回退路径
- 路径必须是完整文件路径,不允许只写目录
- 数据目录必须独立于代码目录
6.3 Docker 生产环境规范
Docker 部署统一采用以下逻辑:
- 容器内固定数据库路径:
/app/data/data.sqlite - 宿主机挂载真实数据目录到
/app/data backend/.env或 compose 中显式指定:
SQLITE_PATH=/app/data/data.sqlite当前双机线上还应同时满足:
NODE_ENV=productionALLOW_JSON_SEED=DEEPSEEK_MODEL=deepseek-v4-flashDEEPSEEK_BASE_URL=https://api.deepseek.com- 前端对外端口继续统一使用
8181
6.4 推荐长期目标
两台生产服务器当前已经统一到隔离数据目录布局,即:
- 代码目录仅放应用代码
- 数据目录仅放 SQLite 数据文件
- Skill 以后只负责更新代码、镜像和验证
7. 关键文件约定
7.1 代码目录
默认代码目录:
/opt/AI-chat7.2 数据目录
推荐隔离数据目录:
/srv/ai-chat/data或非 Docker 生产目录:
/var/lib/ai-chat7.3 数据文件
SQLite 相关文件至少包含:
data.sqlitedata.sqlite-waldata.sqlite-shm
7.4 配置文件
关键配置文件包括:
backend/.envdocker-compose.ymlbackend/Dockerfilefrontend/Dockerfilefrontend/nginx.default.confbackend/prompts/Prompt.md
8. DeepSeek 与提示词管理规范
8.1 关键环境变量
后端相关变量包括:
DEEPSEEK_API_KEY=
DEEPSEEK_MODEL=deepseek-v4-flash
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_SYSTEM_PROMPT_FILE=prompts/Prompt.md
DEEPSEEK_TIMEOUT_MS=90000
MODEL_CONCURRENCY=6
MODEL_QUEUE_MAX=50
MODEL_RETRY_MAX=2
MODEL_RETRY_BASE_MS=500
MODEL_KEY_COOLDOWN_MS=600008.2 DeepSeek API 管理规则
DEEPSEEK_API_KEY属于服务器本地敏感配置,不入库。- 更新 GitHub 代码时,默认不覆盖
backend/.env。 - 如需切换模型、代理地址或 Key,必须先备份
.env。
8.3 提示词管理规则
backend/prompts/Prompt.md可能属于业务配置,而不是纯代码文件。- 如果线上提示词经过人工定制,不应盲目用 GitHub 版本覆盖。
- 如需长期稳定,建议后续将提示词迁移为服务器外挂文件,并通过
DEEPSEEK_SYSTEM_PROMPT_FILE指向独立路径。
8.4 是否替换提示词的判断标准
满足以下条件时,才建议直接替换线上提示词:
- 本次业务明确要求切换到 GitHub 最新提示词
- 已确认线上当前业务目标与 GitHub 提示词一致
- 已备份旧提示词文件
9. 升级前检查规范
每次操作前必须完成以下检查。
9.1 容器状态检查
检查:
cd /opt/AI-chat
docker compose ps9.2 健康接口检查
检查:
---
> 注:本文涉及的服务器公网 IP / Tailnet / 局域网 IP 已脱敏,请替换为你自己的地址。
---
**相关**: [[00-索引-网络基建索引]] [[4.27 Bitwarden + Vaultwarden+ Tailscale]]