# 交付手册(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. 交付前准备(原型机) ```bash # 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) ```bash sudo bash clonezilla-cleanup.sh # DRY-RUN,只列动作 sudo bash clonezilla-cleanup.sh --confirm # 确认后真实清理 ``` 脚本负责: - 删除所有 Go 源代码(`cmd/` `internal/` `go.mod` `go.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 参考(可选) ```bash # 若需彻底清库只保留结构 + 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 整盘克隆 1. 原型机清理完成、复核 A/B/C 三项后关机。 2. U 盘启动 Clonezilla → `device-device`(整盘复制)。 3. 目标机为**同型号**机器,逐台克隆。 4. 客户机器首启:systemd 自动拉起服务;Nginx 反代 8080。 5. 交付验收:登录(新密码)→ 上传素材 → 审批 → 考试 → AI 问答(若接内网 LLM)。 --- ## 6. 交付红线(每次克隆前过一遍) - [ ] `ldd eai_agentplatform-server` 输出 `not a dynamic executable` - [ ] `find /opt/eai_agentplatform -name '*.go' -o -name 'go.mod'` 无结果 - [ ] `/opt/eai_agentplatform/.env` 无 `__CHANGE_ME__` - [ ] 管理员密码非 `admin123` - [ ] `.bash_history` 已清空、无 `.git` - [ ] 测试账号(zhangsan 等)、演示素材、演示考试记录已删除