- 后端:新增 /api/audio/transcribe 接口,调用 Ollama whisper 进行语音识别 - 前端:新增 AudioTranscribePage.vue 页面,支持 MP3/WAV/M4A/OGG/FLAC 等格式 - 注册路由、工具卡片、智能助手欢迎语更新 Co-Authored-By: Claude Code <noreply@anthropic.com>
5.1 KiB
5.1 KiB
交付手册(Go 单二进制 + Clonezilla 整盘克隆)
面向交付工程师。目标:把一台配置好的原型机整盘克隆到客户同型号机器, 客户拿到手即用,机器上无源代码、无开发痕迹、无测试数据、无默认口令。
0. 交付物清单
| 文件 | 说明 |
|---|---|
eai_agentplatform-server |
单二进制(CGO 关闭,静态链接,约 38MB,无任何运行时依赖) |
eai_agentplatform.service |
systemd 单元文件 |
eai_agentplatform.env |
环境变量样例 |
clonezilla-cleanup.sh |
克隆前清理脚本(DRY-RUN 默认) |
data/eai_agentplatform.db |
SQLite 数据库(首启自动建表) |
data/kb_data/ |
已审批素材目录 |
knowledge_source/ |
知识源 Markdown(待入库,由管理员审批) |
不需要:Go 运行时、Python、Docker、MySQL、任何 pip/npm 依赖。
1. 目录布局(客户机器最终形态)
/opt/eai_agentplatform/
├── eai_agentplatform-server # 单二进制
├── .env # JWT 密钥等(交付前生成,勿提交源码库)
├── data/
│ ├── eai_agentplatform.db # SQLite(首启自动建)
│ └── kb_data/ # 素材 + 提取缓存
├── knowledge_source/ # 知识源 Markdown
└── (前端静态资源由 Nginx 托管,见 ../docs/deploy.md)
2. 交付前准备(原型机)
# 2.1 构建静态二进制(开发机执行,产物拷贝到原型机)
export PATH=$HOME/go-sdk/go/bin:$PATH CGO_ENABLED=0 GOPROXY=https://goproxy.cn,direct
go build -o bin/eai_agentplatform-server ./cmd/server
# 校验:file 输出应为 "statically linked",ldd 应为 "not a dynamic executable"
# 2.2 拷贝到原型机 + 建账号 + 装 systemd 单元
sudo install -m 0755 eai_agentplatform-server /opt/eai_agentplatform/eai_agentplatform-server
sudo useradd -r -s /usr/sbin/nologin eai_agentplatform
sudo mkdir -p /opt/eai_agentplatform/data/kb_data /opt/eai_agentplatform/knowledge_source
sudo chown -R eai_agentplatform:eai_agentplatform /opt/eai_agentplatform
sudo install -m 0644 deploy/eai_agentplatform.service /etc/systemd/system/eai_agentplatform.service
# 2.3 生成 .env(含随机 JWT 密钥)
sudo -u eai_agentplatform cp deploy/eai_agentplatform.env /opt/eai_agentplatform/.env
NEW_SECRET=$(python3 -c "import secrets; print(secrets.token_urlsafe(48))")
sudo sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$NEW_SECRET|" /opt/eai_agentplatform/.env
# 2.4 启动验证
sudo systemctl daemon-reload
sudo systemctl enable --now eai_agentplatform
curl http://127.0.0.1:8080/api/health # {"status":"ok",...}
3. 克隆前清理(不可逆,务必先 DRY-RUN)
sudo bash clonezilla-cleanup.sh # DRY-RUN,只列动作
sudo bash clonezilla-cleanup.sh --confirm # 确认后真实清理
脚本负责:
- 删除所有 Go 源代码(
cmd/internal/go.modgo.sum) - 清除
.git/ 版本控制痕迹 - 清空日志与 shell 历史
脚本不负责(需手工确认,见下):
手工清单(缺一不可)
| # | 动作 | 命令 |
|---|---|---|
| A | 重置管理员密码 | sudo -u eai_agentplatform /opt/eai_agentplatform/eai_agentplatform-server -reset-admin '<强密码>' |
| B | 确认 JWT 密钥随机 | grep -c '__CHANGE_ME__' /opt/eai_agentplatform/.env(应为 0) |
| C | 清空测试数据 | Web 后台删除演示用户/素材/考试记录,或用 sqlite3(见第 4 节) |
默认种子账号为
admin / admin123,克隆前必须改密(A 项),否则客户拿到默认口令。
4. 清空测试数据的 SQL 参考(可选)
# 若需彻底清库只保留结构 + admin:
sqlite3 /opt/eai_agentplatform/data/eai_agentplatform.db <<'SQL'
-- 先停服务
DELETE FROM exam_record;
DELETE FROM knowledge_chunk;
DELETE FROM knowledge_source;
DELETE FROM media_file;
DELETE FROM course;
DELETE FROM product;
DELETE FROM question;
DELETE FROM exam_paper;
DELETE FROM "user" WHERE username != 'admin';
DELETE FROM system_config WHERE config_key NOT IN ('company_intro','llm_base_url','llm_model','embed_model','llm_api_key');
SQL
表名以实际 schema 为准;无 sqlite3 时,用管理员 Web 界面逐项删除亦可。
5. Clonezilla 整盘克隆
- 原型机清理完成、复核 A/B/C 三项后关机。
- U 盘启动 Clonezilla →
device-device(整盘复制)。 - 目标机为同型号机器,逐台克隆。
- 客户机器首启:systemd 自动拉起服务;Nginx 反代 8080。
- 交付验收:登录(新密码)→ 上传素材 → 审批 → 考试 → AI 问答(若接内网 LLM)。
6. 交付红线(每次克隆前过一遍)
ldd eai_agentplatform-server输出not a dynamic executablefind /opt/eai_agentplatform -name '*.go' -o -name 'go.mod'无结果/opt/eai_agentplatform/.env无__CHANGE_ME__- 管理员密码非
admin123 .bash_history已清空、无.git- 测试账号(zhangsan 等)、演示素材、演示考试记录已删除