Initial commit: company-kb framework

- 完整的知识库框架(P0-P5 路线图)
- 12篇治理文档
- 工具脚本(kb-init.sh, kb-lint-fm.py, feishu-sync.py, kb-bot)
- 7个 Claude 命令
- 示例项目和测试项目(wanniu-l1)
- 契约文件(meta/kb-contract.yaml)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
yangqianqian
2026-07-16 18:24:39 +08:00
commit 84f7950589
60 changed files with 4410 additions and 0 deletions

126
docs/10-部署与运维.md Executable file
View File

@@ -0,0 +1,126 @@
# 10 · 部署与运维
> 物理拓扑 + 部署步骤 + 运维手册。回答「仓库在哪、处理逻辑在哪跑、同事怎么接入」。
> 核心:**仓库家 + 常驻处理都在公司 NAS**;交互处理在各人本机。
---
## 一、物理拓扑
```
┌──────────────────────────────────────────────────────────────┐
│ 公司 NAS数据的家 + 常驻处理节点) │
│ ├─ Gitea 仓库 company-kb.git ★唯一真相源★ │
│ ├─ 常驻kb-bot 飞书群机器人长连接subscribe + handle
│ └─ 定时feishu-render 投影(云文档 + 多维表格) │
└──────────────────────────────────────────────────────────────┘
▲ git clone/push (内网/VPN) │ 投影(只读)
│ ▼
┌─────────────┐ ┌──────────────┐
│ 各人本机 │ │ 飞书三层呈现 │
│ 本地 clone │ │ 文档/表格/机器人│
│ CC 交互处理 │ └──────────────┘
│ /kb-ingest │
│ /kb-ask │ ┌────────────────────────────┐
│ /kb-link │◀─────│ NAS 同步盘:各人工作目录↔投递区│
└─────────────┘ │ (采集通道,单向投递,无冲突)│
└────────────────────────────┘
```
**两条 NAS 用途,各司其职,不冲突:**
| NAS 角色 | 机制 | 用途 | 为何不冲突 |
|---|---|---|---|
| **Gitea 仓库** | Git 协作 | 知识库本体(提炼后真相源) | 多人共享Git 管合并/审计/回滚 |
| **同步盘** | Synology Drive / SMB | 采集通道(投递原始物料) | 单向投递,无多人同改 |
---
## 二、处理逻辑落点
| 处理类型 | 跑在哪 | 触发 | 说明 |
|---|---|---|---|
| **交互处理** `/kb-ingest`/`/kb-ask`/`/kb-link` | **各人本机** | 人触发 | CC 读本地 clone天然分布式无需中心 |
| **常驻处理** 飞书群机器人长连接 | **NAS** | 常驻 | 读 Git 真相源实时回答,无需公网 |
| **定时处理** feishu-render 投影 | **NAS** | 定时/手动 | md→飞书云文档+多维表格 |
> 关键:常驻/定时处理需要一台常开机 = NAS。交互处理分散在各人机器NAS 不是单点瓶颈。
---
## 三、部署步骤
### 3.1 接 Gitea remote需内网/VPN
```bash
cd ~/奇域/智能体开发/公司AI
# 在 Gitea Web (192.168.0.101:3002/robert) 建空 repo: company-kb
git remote add origin http://192.168.0.101:3002/robert/company-kb.git
git push -u origin main
```
> 现不在内网时 Gitea 不可达,本地提交先攒着,回公司网络再 push。
### 3.2 同事接入(每人一次)
```bash
git clone http://192.168.0.101:3002/robert/company-kb.git
cd company-kb
# CC: cd 进来即可用 /kb-ask /kb-ingest读项目级 CLAUDE.md 自动感知)
# Obsidian: Open folder as vault 打开本目录(个人主编辑器)
```
日常同步:干活前 `git pull`,产出后 `git add/commit/push`(或让 CC 代跑)。
### 3.3 NAS 常驻机器人Gitea 通后)
NAS 上 clone 一份 + 装 lark-cli + 起长连接:
```bash
# NAS 上Container/SSH
git clone <gitea-url> && cd company-kb
lark-cli auth status # 确认 bot 身份
nohup bash tools/kb-bot/subscribe.sh > /tmp/kb-sub.log 2>&1 &
nohup python3 tools/kb-bot/handle.py --watch > /tmp/kb-handle.log 2>&1 &
```
稳定后包成 NAS 的开机自启Synology「任务计划」或 systemd。NAS 侧仓库定时 `git pull` 保证机器人读到最新。
### 3.4 定时投影(可选)
NAS 上 crontab 每日同步飞书呈现:
```cron
# 每天 08:07 投影到飞书(错开整点)
7 8 * * * cd /path/company-kb && git pull -q && python3 tools/feishu-render.py --bitable
```
---
## 四、运维手册
### 备份
- Gitea 仓库随 NAS 备份策略走NAS 快照/RAID
- Git 本身即分布式备份:每个同事的本地 clone 都是全量副本。
### 冲突处理
- 多人改同一页 → Git 合并;`_index.md` 等导航文件已设计为低冲突。
- 编译产物hot/index/wiki已 gitignore不进 Git无合并冲突见 docs/04 §3
### 权限MVP → 演进)
- MVP5 人皆可直接 push main靠 Gitea Web review + `/kb-check` 把关。
- 演进Gitea 上给 main 加保护分支 + PR review团队变大或误操作增多时
### 健康检查
- `python3 tools/kb-lint-fm.py` — frontmatter 合规exit 0 为健康)。
- `/kb-status` — 源计数 / type 分布 / 红线观察(见 docs/05 P5
- 机器人存活:看 `/tmp/kb-sub.log``/tmp/kb-handle.log`
### 凭据安全
- lark-cli 凭据由其自身管理,**不入库**.gitignore 已挡 .env
- 飞书 App Secret 等走环境变量或 lark-cli 配置,绝不提交。
### 故障恢复
- 机器人挂 → NAS 上重跑 3.3 的两条 nohup。
- 仓库损坏 → 从任一同事本地 clone `git push` 恢复 Gitea。
- Gitea 不可用 → 交互处理(各人本机 CC不受影响仅机器人/投影暂停。