# AI训练师三级题库 · Caddy 部署包

包含900道题（判断、单选、多选各300道），以及原题库参考答案和解析。支持手机答题、随机练习、题型选择、跳题和本机进度保存。

这是纯静态网页，不需要 Node.js、npm、数据库或后端服务。所有网页资源已随包提供，不依赖 Sites 服务。自行部署后的访问权限由你的 Caddy 配置决定，本包没有登录验证。

## 文件结构

```text
ai-trainer-quiz/
  www/                   网页根目录，只将此目录作为对外服务目录
    index.html
    style.css
    app.js
    exam.js
    users.js
    practical.js
    practical-data.js
    practical-pages/     操作题原页图片
    questions.js
  Caddyfile              独立域名部署示例
  Caddyfile.local         本机/局域网8080端口测试配置
  部署说明.md
  SHA256SUMS.txt          文件校验值
```

## Linux 服务器部署（已安装 Caddy）

1. 解压部署包，把 `www` 目录上传到 `/opt/www/ai-trainer-quiz/www`。确保运行 Caddy 的账号能够读取文件、访问父目录。
2. 包内 `Caddyfile` 已配置域名 `aitrainer.lsily.cn`、证书邮箱 `lxl90518@vip.qq.com` 和网页目录 `/opt/www/ai-trainer-quiz/www`。确认该目录下直接存在 `index.html`。压缩包自带 `ai-trainer-quiz/` 顶层目录，应解压到 `/opt/www`，避免重复嵌套目录。
3. 把修改后的整个站点块追加到现有 `/etc/caddy/Caddyfile`，不要覆盖其他站点。若该域名已存在，应修改原站点块，不要重复添加同域名配置。
4. 检查并重载：

```bash
sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
sudo systemctl reload caddy
```

第一条成功后再执行第二条。域名解析到服务器，且80、443端口能被外网访问时，Caddy通常会自动申请HTTPS证书。手机打开 `https://你的域名/` 即可答题。

## 本机或局域网测试（Windows / Linux）

在解压目录中运行：

```text
caddy validate --config Caddyfile.local --adapter caddyfile
caddy run --config Caddyfile.local --adapter caddyfile
```

电脑打开 `http://localhost:8080/`。同一局域网的手机打开 `http://电脑局域网IP:8080/`，并允许防火墙的8080端口入站。若端口被占用，修改 `Caddyfile.local` 中的8080。

Windows正式部署可把域名配置中的root改为 `C:/web/ai-trainer-quiz/www` 等实际目录；路径带空格时用双引号包围。若现有Caddy已作为服务运行，应修改其实际加载的配置并使用原有服务管理方式重载，不要另起实例占用同一端口。

## 挂在现有网站的 /quiz/ 子路径

网页资源均为相对路径，支持子目录。在现有域名站点块内按原有路由结构合并以下规则：

```caddyfile
redir /quiz /quiz/ 308
handle_path /quiz/* {
    root * /opt/www/ai-trainer-quiz/www
    encode gzip
    header Cache-Control "no-cache"
    file_server
}
```

如果现有网站有整站 `reverse_proxy` 或其他兜底处理，应把原有兜底逻辑放入不带匹配器的 `handle { ... }`，让 `/quiz/*` 与其他请求互斥处理。合并后先validate，再重载。访问 `https://你的域名/quiz/`。

## 验收与更新

- 手机打开网页，确认题库总数900；分别测试判断、单选、多选题的提交和解析。
- 刷新页面后应恢复当前题目和已提交答案。进度仅存当前浏览器，换设备、域名、端口或HTTP/HTTPS地址不会自动迁移；清理浏览器数据会清除进度。
- 更新时把 完整替换 `www` 内文件及子目录。只更新网页文件不需要重启Caddy；修改Caddy配置才需要验证和重载。
- 参考答案沿用原PDF题库，不代表对原题库内容作独立校订。

配置参考：[Caddy静态文件文档](https://caddyserver.com/docs/quick-starts/static-files)、[自动HTTPS文档](https://caddyserver.com/docs/automatic-https)。

## 考试训练

单选140题/90分钟、判断40题/30分钟、多选10题/30分钟，分别随机抽题并独立计时。进度保存在当前浏览器，离开后计时继续；到时自动交卷，返回网页时可查看成绩。交卷前不展示答案，交卷后支持逐题查看解析。成绩按答对题数和正确率显示，多选必须完全匹配。每个项目保留最近一次考试；重新抽题会替换该项目旧试卷。考试记录与日常练习记录分开保存。

## 本机用户

页面顶部支持昵称登录和切换用户。输入已有昵称直接读取该用户存档，输入新昵称自动创建用户；再次打开默认恢复上次登录的用户。每个用户的日常练习、错题、考试均独立保存到当前浏览器。旧记录归默认用户，无需迁移。昵称不是登录账号，不提供密码验证或跨设备同步。请勿清理浏览器存储。切换用户不会暂停正在进行的考试倒计时。更新需上传完整 www 目录，包含 users.js。

## 操作技能练习

新增40道操作题，题目和评分标准直接展示，参考答案点击展开。包含297条评分细则，逐题校验分值合计。可查看题目、评分表和解答原页，图片点击放大。每个本机用户独立保存当前操作题位置。部署时必须同时上传 practical-pages 目录。PDF提到的CSV、Notebook等配套文件未包含在用户提供的PDF附件中，网页提供题目与参考答案阅读，不执行代码或自动评分。
